使用 java.security.cert.CertificateFactory.generateCertificate(InputStream inStream) 通过String生成x.509证书实体的两种情况
证书实体certEntityString如下
-----BEGIN CERTIFICATE-----
MIIDsjCCApqgAwIBAgIERqyYvTANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJj
bjEhMB8GA1UECgwYSU5GT1NFQyBUZWNobm9sb2dpZXMgUlNBMRQwEgYDVQQDDAtS
(省略中间部分…)
8dF/wIGcT71/ERRrlB0p+AZ+B+2wKHBjBVLyb0MIZNo+8xS20eBgEBa8UsU2fZzT
FSNYGfoL2sfBQ4e5hL3cFrudNPOfeIP0VQ9SmwcGZxUmITvhzqg=
-----END CERTIFICATE-----
首先,CertificateFactory certFactory = CertificateFactory.getInstance(“X.509”),这一步都是一样的.
InputStream in = null;
String里面没有"-----BEGIN CERTIFICATE-----“和”-----END CERTIFICATE-----"
如果证书实体String不包含开始结束标识,需要将该base64字符串解码,再生成证书
in=new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(certEntityString));
Certificate cert = certFactory.generateCertificate(in);
return (X509Certificate) cert;
String里面含有"-----BEGIN CERTIFICATE-----“和”-----END CERTIFICATE-----"
如果证书实体String是完整的,包含开始结束标识,需要将字符串转为byte[ ]
in=new ByteArrayInputStream(certEntityString.getBytes(“utf-8”));
Certificate cert = certFactory.generateCertificate(in);
return (X509Certificate) cert;
不清楚是generateCertificate( )方法的具体实现,但这两种情况都试了一下,只有像上面那样,按不同情况转化字符串,才能正确解析出证书.