在Android中查看证书的详细信息

时间:2012-12-07 06:12:50

标签: java android security certificate

如何在java中显示证书(DER格式,即.cer文件)中主题的详细信息?例如:电子邮件,国家,名称或单独的OID等。

可以从上面的代码中读取证书。也适用于Android。谢谢GreyBeardedGeek。但是为了更详细地说明(如所要求的那样好奇),如果使用方法getSubjectDN()或cert.getSubjectX500Principal()。getname()显示主题详细信息,它将显示整个细节。有些可能是编码的。我相信它是ASN1。(不确定)。我需要的是只提取我需要的信息。有关示例,请参阅代码的输出以获取我创建的示例证书。使用方法 - cert.getSubjectX500Principal()。getname()主题名称2.5.4.5 =#130d4e2d61626c652f49542f303130,2.5.4.72 =#1308456e67696e656572,2.5.4.41 =#13104e7577616e20446520416c6d65696461,1.2.840.113549.1.9.1 =#16106e7577616e406e2d61626c652e62697a,OU = Information Technology ,O = N-able Pvt Ltd \,ST = Western,C = LK

2.5.4.5是一个编码的OID(对象标识符)。

使用方法 - getSubjectDN()

OID.2.5.4.5 = N-able / IT / 010,OID.2.5.4.72 =工程师,OID.2.5.4.41 = Nuwan De Almeida,OID.1.2.840.113549.1.9.1 =#16106E7577616E406E2D61626C652E62697A,OU =信息技术,O =“N-able Pvt Ltd”,ST = Western,C = LK

此处还有一些信息被编码,例如:电子邮件地址。

回到我的问题,我们如何根据OID分别提取信息(未编码)。此外,如果您在Windows操作系统中安装证书,您可以正确查看主题信息。我需要的是一个代码,用于获取在Java中传递OID的OID值信息,以单独提取主题详细信息。

提前再次感谢你。

2 个答案:

答案 0 :(得分:1)

查看Bouncy Castle ASN.1解析库,尤其是X500Name。它可以将可分辨名称(DN)解析为其部分(CN,O等)。

http://www.bouncycastle.org/docs/docs1.5on/index.html

答案 1 :(得分:0)

以下代码(不包括错误处理)将从.cer文件生成X509Certificate的实例。然后,您可以使用该对象的方法来检查证书的属性。代码是通用的java,但应该在Android中运行。

X509Certificate cert = null;

FileInputStream fis = null;
ByteArrayInputStream bais = null;

String source = "certificate.cer";
String certType = "X.509"

fis = new FileInputStream(source);
byte[] value = new byte[fis.available()];
fis.read(value);

bais = new ByteArrayInputStream(value);

java.security.cert.CertificateFactory cf = java.security.cert.CertificateFactory.getInstance(certType);
cert = (X509Certificate)cf.generateCertificate(bais);