2012-07-18 88 views
0

我想从XML文件中获得的X509证书的有效期限在标签获取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:无效DER编码的证书数据 在sun.security.x50 9.X509CertImpl.parse(未知来源) at sun.security.x509.X509CertImpl。(未知来源) 任何想法?由于

回答

0

目前尚不清楚这是否是所有这是错误的,但你不使用的CertificateFactory文档中指定的精确格式:

如果证书是Base64编码提供的,它必须以----- BEGIN CERTIFICATE -----开头为界,且必须以----- END CERTIFICATE -----结尾。

你得周围的文字,错号码破折号的空间,你END CERTIFICATE后没有破折号。

您可能还想修剪节点值,因为它在数据之后当前有几个空格。

+0

它工作。添加了正确的边界标签并修剪了空间。谢谢。 – User 2012-07-18 17:14:50