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

我可以读到证书文件里的内容,如下:假如证书为zyj.crtFilefile=newFile("D:\\zyj.crt");InputStreaminStream=newF... 我可以读到证书文件里的内容,如下:假如证书为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对象 然后读取里面的内容呢?
笨办法 就是把这个String 写到一个文件里,然后用上面的方法读这个文件。但这样效率太低了。
我还试着把String 转成inputStream,
InputStream inStream = new ByteArrayInputStream(caString.getBytes("UTF-8"));用这句替代 上面写的第二行代码。但是在执行第四行的时候报错。。
java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Unsupported encoding
展开
 我来答
哆啦爱橙
2018-04-06 · TA获得超过4763个赞
知道小有建树答主
回答量:24
采纳率:100%
帮助的人:8997
展开全部

那个字符串是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 写到一个文件里,然后用上面的方法读这个文件。

几时有happy
推荐于2017-12-16 · TA获得超过110个赞
知道答主
回答量:92
采纳率:100%
帮助的人:39.4万
展开全部
那个字符串是Base64编码后的
更多追问追答
追问
那我应该怎么办呢?Base64编码没接触过。。
InputStream inStream = new ByteArrayInputStream(caString.getBytes("UTF-8"))
这句应该怎么写呢?
InputStream inStream = new ByteArrayInputStream(caString.getBytes("Base64"))
这样吗。。
追答
不是你这样写的,首先那个字符串要把 头信息-----BEGIN CERTIFICATE----- 和 尾信息 -----END CERTIFICATE----- 去掉 ,中间的是证书信息
String scert = "XXXXXXXXXXXX";
// Base64解码
BASE64Decoder decoder = new BASE64Decoder();
byte[] byteCert = decoder.decodeBuffer(scert);
//转换成二进制流
ByteArrayInputStream bain = new ByteArrayInputStream(byteCert);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate oCert = (X509Certificate)cf.generateCertificate(bain);
String info = oCert.getSubjectDN().getName();
System.out.println("证书拥有者:"+info);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式