Учитывая URL CRL, я хочу получить объект 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
для некоторых URL, которые я пробовал (не для всех).
Ниже приведена трассировка стека,
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
Объект из URL-адресов, из которых я получаю это исключение?