gpt4 book ai didi

java - 如何在生成 CRL 的上下文中检查 InputStream 是否为空?

转载 作者:行者123 更新时间:2023-12-01 23:08:33 25 4
gpt4 key购买 nike

给定 CRL url,我想检索 X509CRL 对象。以下是代码,

    private static X509CRL downloadCRLFromWeb(String crlURL) throws
MalformedURLException, IOException, CertificateException, CRLException {

URL url = new URL(crlURL);
InputStream crlStream = url.openStream();
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
return (X509CRL) cf.generateCRL(crlStream);
} catch (CRLException e) {
System.out.println("Caught exception: " + e.getMessage());
e.printStackTrace();
return null;
} finally {
assert crlStream != null;
crlStream.close();
}

return (X509CRL) cf.generateCRL(crlStream); 会在我尝试过的一些网址(不是全部)上生成 CRLException: Empty input

以下是堆栈跟踪,

java.security.cert.CRLException: Empty input
at sun.security.provider.X509Factory.engineGenerateCRL(X509Factory.java:397)
at java.security.cert.CertificateFactory.generateCRL(CertificateFactory.java:497)
at demo.pkcs.pkcs11.TryLDAP.downloadCRLFromWeb(TryLDAP.java:60)
at demo.pkcs.pkcs11.TryLDAP.main(TryLDAP.java:83)

还值得注意的是,crlStream 在读取时不会返回 -1,因此它并不完全是“空”。到底是什么导致了这个异常,我该如何解决它?如何更正此代码,以便我可以从获取此异常的网址中检索 X509CRL 对象?

最佳答案

对于我捕获异常的网址,我已通过以下步骤解决:

  1. crlStream转换为String对象
  2. 添加 "-----BEGIN X509CRL-----\n""\n-----END X509CRL-----\n" 位于 crlStreamString
  3. 的开头和结尾
  4. crlStreamString 转换回 InputStream

下面是工作代码,

        InputStream crlStream = url.openStream();
String stream = IOUtils.toString(crlStream);
String tryPEM = "-----BEGIN X509CRL-----\n";
tryPEM = tryPEM.concat(stream);
tryPEM = tryPEM.concat("\n-----END X509CRL-----\n");
System.out.println(tryPEM);
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
return (X509CRL) cf.generateCRL(IOUtils.toInputStream(tryPEM));

关于java - 如何在生成 CRL 的上下文中检查 InputStream 是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58387483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com