从 android 中的 X509Certificate 中提取组织名称

extracting organization name from X509Certificate in android

您好,我想从 X509Certificate 中提取组织名称。对于大多数应用程序,我正在获取此组织名称,但对于亚马逊应用程序,我无法提取此名称,因为对于亚马逊应用程序 x509Cert.getIssuerDN().toString(); returns 结果在 OU O 和 L 值之间没有“,”。

我正在使用以下代码:

CertificateFactory certFactory = CertificateFactory.getInstance("X509");
                X509Certificate x509Cert = (X509Certificate) certFactory.generateCertificate(certStream);
                String temp = x509Cert.getIssuerDN().toString();

对于其他应用程序,温度如下:

CN=MAP4 Platform 466-1, OU=MDb, O=Motorola, L=Libertyville, ST=Illinois, C=US
CN=Android, OU=Android, O=Google Inc., L=Mountain View, ST=California, C=US
CN=Microsoft Corporation Third Party Marketplace (Do Not Trust), OU=Android Marketplace Signing for Microsoft Office, O=Microsoft Corporation, L=Redmond, ST=Washington, C=US

上面 OU,O,L 之间有分隔符 (,) 但对于亚马逊应用程序没有分隔符以下是 2 个亚马逊应用程序的结果:

CN=Amazon Self-Sign CA, OU="Java Object Signing O=Amazon Services LLC L=Las Vegas", ST="Nevada C=US"
CN=Amazon Self-Sign CA, OU="Java Object Signing O=Amazon Services LLC L=Las Vegas", ST="Nevada C=US"

现在从上面的结果中我将如何获得 O 的值?任何建议将不胜感激。谢谢

如评论中所示,证书不包含 O 属性。似乎证书的创建者犯了一个错误,并将 OL 属性的内容作为 OU

的一部分包含在内

您可以使用OpenSSL 进行检查。从 apk 中提取 META-INF/ANDROID.RSA 并执行

openssl pkcs7 -inform DER -in ANDROIDS.RSA -noout -print_certs -text

因此,要提取此证书的 O 属性,请解析 OU 属性的字符串值并查找 "O=[the value]"