使用 generateCertificate(InputStream inStream) 通过String生成x.509证书的两种情况

使用 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( )方法的具体实现,但这两种情况都试了一下,只有像上面那样,按不同情况转化字符串,才能正确解析出证书.

猜你喜欢

转载自blog.csdn.net/weixin_36998210/article/details/83058975