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

Java 在Android中查看证书的详细信息,java,android,security,certificate,Java,Android,Security,Certificate,如何在java证书(DER格式的ie.cer文件)中显示主题的详细信息?例如:电子邮件、国家、姓名或单独的ID等 可以通过上述代码读取证书。也可以在Android中使用。谢谢你,灰胡子的怪人。但更详细地说(根据好奇的要求),如果使用getSubjectDN()或cert.getSubjectX500Principal().getname()方法显示主题详细信息,它将显示整个详细信息。有些可能是编码的。我认为是1。(不确定)。我需要的是只提取我需要的信息。例如,请参考我创建的示例证书的代码输出。使

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

可以通过上述代码读取证书。也可以在Android中使用。谢谢你,灰胡子的怪人。但更详细地说(根据好奇的要求),如果使用getSubjectDN()或cert.getSubjectX500Principal().getname()方法显示主题详细信息,它将显示整个详细信息。有些可能是编码的。我认为是1。(不确定)。我需要的是只提取我需要的信息。例如,请参考我创建的示例证书的代码输出。使用方法-cert.GetSubjectX500 Principal().getname()主题名称2.5.4.5=#130D4E2D61626C652F4954F303130,2.5.4.72=#1308456E67696E6565572,2.5.4.41=#13104E7577616E20446520416C6D65964646461,1.2.840.113549.1.9.1=#16106E7577616E406E46E21626C652697A,OU=N=N-able,西部私人有限公司

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

使用方法-getSubjectDN()

OID.2.5.4.5=N-able/IT/010,OID.2.5.4.72=Engineer,OID.2.5.4.41=Nuwan De Almeida,OID.1.2.840.113549.1.9.1=#16106E7577616E406E2D61626C652E6297A,OU=信息技术,O=“N-able私人有限公司”,ST=Western,C=LK

这里还对一些信息进行了编码,例如:电子邮件地址

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

再次感谢您。

以下代码(不包括错误处理)将从.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);
以下代码(不包括错误处理)将从.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);

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


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


请详细说明您的用例。请详细说明您的用例。谢谢您的指导,尼古拉。我正在安卓系统中尝试这个。这是为了我的研究。然而,即使我在项目中包括Bouncy castle或Spongy castle JAR文件,X509Name还是被贬低了。此外,还没有办法从X509证书文件中获取X509名称。非常感谢你。如果有人有任何想法,这是非常有帮助的。
X500Name
(不是509)当然不是不推荐的,它有一个构造函数,它接受一个
字符串。探索示例的来源也会有所帮助。感谢您的指导Nikolay。我正在安卓系统中尝试这个。这是为了我的研究。然而,即使我在项目中包括Bouncy castle或Spongy castle JAR文件,X509Name还是被贬低了。此外,还没有办法从X509证书文件中获取X509名称。非常感谢你。如果有人有任何想法,这是非常有帮助的。
X500Name
(不是509)当然不是不推荐的,它有一个构造函数,它接受一个
字符串。探索示例的来源也有帮助。