列出android上安装的所有证书

列出android上安装的所有证书,android,certificate,Android,Certificate,我正在编写一个应用程序,其中列出了安装在上的所有证书 这个装置。但我发现有两个地方有证书 存储的数据包括: System/etc/security/cacerts.bks:此文件包含所有 预装证书。我可以使用 框架中定义的密钥库类/ base/keystore/java/android/security 数据/misc/keystore:安装证书的另一种方法(例如通过 certinstaller应用程序)安装第三方证书并生成 它在这个目录中的条目 但我不知道如何读取SerialNumber之类的

我正在编写一个应用程序,其中列出了安装在上的所有证书 这个装置。但我发现有两个地方有证书 存储的数据包括:

  • System/etc/security/cacerts.bks:此文件包含所有 预装证书。我可以使用 框架中定义的密钥库类/ base/keystore/java/android/security

  • 数据/misc/keystore:安装证书的另一种方法(例如通过 certinstaller应用程序)安装第三方证书并生成 它在这个目录中的条目

  • 但我不知道如何读取SerialNumber之类的证书信息,
    IssuerDN等。当我查看/etc/security/cacerts时,我看到了存储为ASCII测试的所有证书的列表。您要求的参数、SerialNumber和Issuer info存储为文本。只需将其作为文本文件打开,并读入您要查找的字符串

    # ls -al /etc/security/cacerts/ff783690.0
    ls -al /etc/security/cacerts/ff783690.0
    -rw-r--r-- root     root         5106 2011-12-13 23:49 ff783690.0
    # cat /etc/security/cacerts/ff783690.0
    cat /etc/security/cacerts/ff783690.0
    -----BEGIN CERTIFICATE-----
    MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
    lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
    Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
    dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
    SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
    A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
    MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
    d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
    cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
    0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
    M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
    MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
    oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
    DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
    oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
    VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
    dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
    bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
    BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
    //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
    CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
    CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
    3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
    KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
    -----END CERTIFICATE-----
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                44:be:0c:8b:50:00:24:b4:11:d3:36:2a:fe:65:0a:fd
            Signature Algorithm: sha1WithRSAEncryption
            Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
            Validity
                Not Before: Jul  9 18:10:42 1999 GMT
                Not After : Jul  9 18:19:22 2019 GMT
            Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                RSA Public Key: (2048 bit)
                    Modulus (2048 bit):
                        00:b1:f7:c3:38:3f:b4:a8:7f:cf:39:82:51:67:d0:
                        6d:9f:d2:ff:58:f3:e7:9f:2b:ec:0d:89:54:99:b9:
                        38:99:16:f7:e0:21:79:48:c2:bb:61:74:12:96:1d:
                        3c:6a:72:d5:3c:10:67:3a:39:ed:2b:13:cd:66:eb:
                        95:09:33:a4:6c:97:b1:e8:c6:ec:c1:75:79:9c:46:
                        5e:8d:ab:d0:6a:fd:b9:2a:55:17:10:54:b3:19:f0:
                        9a:f6:f1:b1:5d:b6:a7:6d:fb:e0:71:17:6b:a2:88:
                        fb:00:df:fe:1a:31:77:0c:9a:01:7a:b1:32:e3:2b:
                        01:07:38:6e:c3:a5:5e:23:bc:45:9b:7b:50:c1:c9:
                        30:8f:db:e5:2b:7a:d3:5b:fb:33:40:1e:a0:d5:98:
                        17:bc:8b:87:c3:89:d3:5d:a0:8e:b2:aa:aa:f6:8e:
                        69:88:06:c5:fa:89:21:f3:08:9d:69:2e:09:33:9b:
                        29:0d:46:0f:8c:cc:49:34:b0:69:51:bd:f9:06:cd:
                        68:ad:66:4c:bc:3e:ac:61:bd:0a:88:0e:c8:df:3d:
                        ee:7c:04:4c:9d:0a:5e:6b:91:d6:ee:c7:ed:28:8d:
                        ab:4d:87:89:73:d0:6e:a4:d0:1e:16:8b:14:e1:76:
                        44:03:7f:63:ac:e4:cd:49:9c:c5:92:f4:ab:32:a1:
                        48:5b
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Key Usage:
                    Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
                X509v3 Basic Constraints: critical
                    CA:TRUE
                X509v3 Subject Key Identifier:
                    A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45
                X509v3 CRL Distribution Points:
                    URI:http://crl.usertrust.com/UTN-USERFirst-Hardware.crl
    
                X509v3 Extended Key Usage:
                    TLS Web Server Authentication, IPSec End System, IPSec Tunnel, I
    PSec User
        Signature Algorithm: sha1WithRSAEncryption
            47:19:0f:de:74:c6:99:97:af:fc:ad:28:5e:75:8e:eb:2d:67:
            ee:4e:7b:2b:d7:0c:ff:f6:de:cb:55:a2:0a:e1:4c:54:65:93:
            60:6b:9f:12:9c:ad:5e:83:2c:eb:5a:ae:c0:e4:2d:f4:00:63:
            1d:b8:c0:6c:f2:cf:49:bb:4d:93:6f:06:a6:0a:22:b2:49:62:
            08:4e:ff:c8:c8:14:b2:88:16:5d:e7:01:e4:12:95:e5:45:34:
            b3:8b:69:bd:cf:b4:85:8f:75:51:9e:7d:3a:38:3a:14:48:12:
            c6:fb:a7:3b:1a:8d:0d:82:40:07:e8:04:08:90:a1:89:cb:19:
            50:df:ca:1c:01:bc:1d:04:19:7b:10:76:97:3b:ee:90:90:ca:
            c4:0e:1f:16:6e:75:ef:33:f8:d3:6f:5b:1e:96:e3:e0:74:77:
            74:7b:8a:a2:6e:2d:dd:76:d6:39:30:82:f0:ab:9c:52:f2:2a:
            c7:af:49:5e:7e:c7:68:e5:82:81:c8:6a:27:f9:27:88:2a:d5:
            58:50:95:1f:f0:3b:1c:57:bb:7d:14:39:62:2b:9a:c9:94:92:
            2a:a3:22:0c:ff:89:26:7d:5f:23:2b:47:d7:15:1d:a9:6a:9e:
            51:0d:2a:51:9e:81:f9:d4:3b:5e:70:12:7f:10:32:9c:1e:bb:
            9d:f8:66:a8
    SHA1 Fingerprint=04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7
    

    对于我和运行10.7.5的Mac以及随附的JavaVM+keytool,Shashwat Shriparv描述的过程略有不同:

    adb pull /system/etc/security/cacerts.bks cacerts.bks
    wget http://bouncycastle.org/download/bcprov-jdk16-141.jar
    keytool -list -v -keystore cacerts.bks -storepass "" -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath ./bcprov-jdk16-141.jar
    

    我使用下面的代码片段列出

    public void PrintInstalledCertificates() {
        try {
            KeyStore ks = KeyStore.getInstance("AndroidCAStore");
        
            if (ks != null) {
                ks.load(null, null);
                Enumeration<String> aliases = ks.aliases();
            
                while (aliases.hasMoreElements()) {
    
                    String alias = (String) aliases.nextElement();
    
                    java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);
                    //To print System Certs only
                    if(cert.getIssuerDN().getName().contains("system")){
                        System.out.println(cert.getIssuerDN().getName());
                    }
    
                    //To print User Certs only 
                    if(cert.getIssuerDN().getName().contains("user")){
                        System.out.println(cert.getIssuerDN().getName());
                    }
    
                    //To print all certs
                    System.out.println(cert.getIssuerDN().getName());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (java.security.cert.CertificateException e) {
            e.printStackTrace();
        }               
    }
    
    public void PrintInstalledCertificates(){
    试一试{
    KeyStore ks=KeyStore.getInstance(“AndroidCAStore”);
    如果(ks!=null){
    ks.load(null,null);
    枚举别名=ks.alias();
    while(别名.hasMoreElements()){
    字符串别名=(字符串)别名。nextElement();
    java.security.cert.X509Certificate cert=(java.security.cert.X509Certificate)ks.getCertificate(别名);
    //只打印系统证书
    如果(cert.getIssuerDN().getName()包含(“系统”)){
    System.out.println(证书getIssuerDN().getName());
    }
    //仅打印用户证书
    如果(cert.getIssuerDN().getName()包含(“用户”)){
    System.out.println(证书getIssuerDN().getName());
    }
    //打印所有证书
    System.out.println(证书getIssuerDN().getName());
    }
    }
    }捕获(IOE异常){
    e、 printStackTrace();
    }捕获(KeyStoreException e){
    e、 printStackTrace();
    }捕获(无算法异常){
    e、 printStackTrace();
    }捕获(java.security.cert.CertificateException e){
    e、 printStackTrace();
    }               
    }
    
    是一款开源android应用程序,它可以帮助您查看X509证书信息-

    ,因为android 4.2
    /system/etc/security/cacerts.bks
    不可用。
    public void PrintInstalledCertificates() {
        try {
            KeyStore ks = KeyStore.getInstance("AndroidCAStore");
        
            if (ks != null) {
                ks.load(null, null);
                Enumeration<String> aliases = ks.aliases();
            
                while (aliases.hasMoreElements()) {
    
                    String alias = (String) aliases.nextElement();
    
                    java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);
                    //To print System Certs only
                    if(cert.getIssuerDN().getName().contains("system")){
                        System.out.println(cert.getIssuerDN().getName());
                    }
    
                    //To print User Certs only 
                    if(cert.getIssuerDN().getName().contains("user")){
                        System.out.println(cert.getIssuerDN().getName());
                    }
    
                    //To print all certs
                    System.out.println(cert.getIssuerDN().getName());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (java.security.cert.CertificateException e) {
            e.printStackTrace();
        }               
    }