java如何解读证书里的内容(通过string 来生成X509Certificate对象)?

我可以读到证书文件里的内容,如下:假如证书为zyj.crt
File file = new File("D:\\zyj.crt");
InputStream inStream = new FileInputStream(file);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate oCert = (X509Certificate)cf.generateCertificate(inStream);
info = oCert.getSubjectDN().getName();
System.out.println("证书拥有者:"+info);

但现在的问题的,我的项目得到的不是证书文件,而是一个string。 这个string里的内容和zyj.crt文件里的内容是一样的。内容片断如下:
-----BEGIN CERTIFICATE----- MIICMjCCAZsCCQD3/xw1j77JATANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJD
.....省略
-----END CERTIFICATE-----

我怎么通过这个string 来生成X509Certificate对象 然后读取里面的内容呢?

那个字符串是Base64编码后的

试着把String 转成inputStream,

InputStream inStream = new ByteArrayInputStream(caString.getBytes('UTF-8'));用这句替代 上面写的第二行代码。但是在执行第四行的时候报错。。

java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Unsupported encoding

就是把这个String 写到一个文件里,然后用上面的方法读这个文件。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-06

1.我怎么通过这个string 来生成X509Certificate对象 

2.笨办法:就是把这个String 写到一个文件里,然后用上面的方法读这个文件。但这样效率太低了。

3.我还试着把String 转成inputStream,InputStream inStream newByteArrayInputStream(caString.getBytes("UTF-8"));用这句替代 上面写的第二行代码。但是在执行第四行的时候报错。。

4.java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Unsupported encoding