2016-06-27 13 views
1

私のアプリケーションは安全なサーバー(NON http(s)の要求をする必要がありますが、実際にはSIPプロトコルに関するものです。私のAndroidデバイスのキーストアにインストールされているシステムデフォルトの信頼証明書に基づいて、サーバーが信頼できると見なされるかどうかを確認する必要があります。私のアプリケーションからAndroidの信頼できる証明書エントリにアクセスすることはできますか

問題は、AndroidがKeyStore、KeyChainなどの証明書を提供するすべてのAPIを確認した後、解決策を見つけることができなかったことです。

各アプリケーションは、デバイスのシステムデフォルトキーストアにアクセスできても、TrustedCertificateEntryタイプのエントリについて話しているときでも、グローバルではなく独自のリソースにのみアクセスできます。

ここに何か不足しているものはありますか?

が非HTTPS認証

敬具のためにかなり有効なユースケースのように思える、 アントニス

答えて

3

は最後なので、これは便利です、私は場合に共有でき、これを行う方法を見つけることができました他の人に。 Androidは、システム全体の信頼できる証明書にアクセスできるようにします。

私はコースを外れいけない実際のキーを、見つけることを試みていたと信じて
KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); 

を:ここでは詳細(と、それは以前に私のために動作しませんでした理由は)私が使用するキーストア「タイプ」識別子ました共有する。だから掘り下げた後、別のタイプのAndroidCAStoreがあることがわかりました。これは私のためのトリックでした。証明書を印刷するだけで、コードを抜粋しています:

try { 
    KeyStore ks = KeyStore.getInstance("AndroidCAStore"); 
    ks.load(null); 

    try { 
    Enumeration<String> aliases = ks.aliases(); 
    while (aliases.hasMoreElements()) { 
     Certificate cert = ks.getCertificate(aliases.nextElement()); 
     Log.e(TAG, "Certificate: " + cert.toString()); 
    } 
    } 
    catch(Exception e) { 
    e.printStackTrace(); 
    } 
} 
catch (IOException|NoSuchAlgorithmException|KeyStoreException|CertificateException e) { 
    e.printStackTrace(); 
} 
関連する問題