0

タグの下のxmlファイルからx509証明書の有効期限を取得しようとしています

<ds:X509Certificate> MBaAFI7JTi5oRslwv2B3MmERGbPKKUsSMFwGA1UdIARVMFMwUQYKKwYBBAEJFQEBADBDMEEGCCsG
AQUFBwIBFjVodHRwOi8vd3d3LmNpc2NvLmNvbS9zZWN1cml0eS9wa2kvcG9saWNpZXMvaW5kZXgu
aHRtbDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQUFAAOCAQEAs2DJZwgVLmZqQS2N
3Yp4iGYhZBG6vZSDaiaAg6u1wgrfq/byBd7H3Ei+V9I7MZ1aCh4s3kl6FJ1CoRhMQcM1gbxpCbPP
KAfrMv/5/MH8erMnole7m/MqVHETX1UbLEyagOioqK3cs8MzMKxC+Fdku6Bm+i/6xhUsc6XbrVJl
IHsVBB9+9ZnpjAjC9jj21r04N51cyfp6C37999TaybNEtCJlG0XTHfLbcyX65E9ndVaRd6GYu/d0
xW0MT5bKhA36KhpUROAbPS7rXKKkfCYnMkmImE7Hfvm3vRSahX+ehY1Tx9qJXFv3PYGzbyDbvpjV
2cSUgP/bhGATKSOZuhohrw==  </ds:X509Certificate

>>

文字列に読み取るコードがあります

NodeList nodelist = element.getElementsByTagName("ds:X509Certificate");
Element element1 = (Element) nodelist.item(0);
NodeList certificateItem = element1.getChildNodes();
String certificateValue = "---- BEGIN CERTIFICATE -------- " + "\n" +
"certificateItem.item(0).getNodeValue()" + "\n" + "--- END CERTIFICATE";                            
System.out.print("Certificate data is : " + certificateValue);
InputStream certinputstream = new ByteArrayInputStream(certificateValue.getBytes());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(certinputstream);
System.out.println("Expiry Date : " + cert.getNotAfter());

しかし、次のエラーが発生しますjava.security.cert.CertificateParsingException:sun.security.x509.X509CertImpl.parse(Unknown Source)の無効なDERエンコードされた証明書データsun.security.x509.X509CertImpl。(Unknown Source)任意のアイデア?ありがとう

4

1 に答える 1

0

これがすべて間違っているかどうかは明らかではありませんが、ドキュメントで指定されている正確な形式を使用していません。CertificateFactory

証明書がBase64エンコーディングで提供されている場合は、最初に----- BEGIN CERTIFICATE -----でバインドし、最後に----- ENDCERTIFICATE-----でバインドする必要があります。 。

テキストの周りにスペースがあり、ダッシュの数が間違っていて、の後にダッシュがありませんEND CERTIFICATE

現在、データの後に2、3のスペースがあるため、ノード値をトリミングすることもできます。

于 2012-07-18T17:03:24.280 に答える