2011-08-09 3 views
9

私はAndroidデバイス上の中央の信頼できるキーストアにプログラムでアクセスする方法があることを期待しています。 SSL接続などを検証するために少なくとも証明書、ブラウジングなどを追加するための便利なツールが付属しています(設定 - >場所の下にあります)Android Central Keystore

ファイルを暗号化する目的で公開鍵をプログラムから取得できるようにしたい。

他のアプリ開発者が自分のアプリ内で独自のキーストアを管理しているようだ。

アイデア?これはサポートされていません

+0

ここでは、すでに説明した目的に役立つサーバー証明書があります。あなたが見つけられないだろう - 追加したくないと思うのは、あなたの明記された目的のファイル暗号化に役立つ個人証明書だと思います。 – Earl

+0

彼らはCA証明書にしか見えません。私はまだ彼らがプログラムでアクセス/変更することができるかどうか、また電子証明書などのために別の中央キーストアが存在するかどうかを調べることに興味があります。 – Nick

+0

確かにトラストストアにアクセスしてロードできますが、この。これは通常のBouncy Castleキーストアで、KeyStoreクラスを使用するだけです。 –

答えて

9

、将来のバージョンなどで破るが、ここでは、信頼できる証明書のリストを取得する方法ですがあります。/systemは読み取り専用でマウントされているため、ルートアクセスなしで新しいものを追加することはできません。しかし、あなたがルートアクセス権を持っている場合は、通常のKeyStore APIを使って証明書を追加することができます。

KeyStore ks = KeyStore.getInstance("BKS"); 
InputStream is = new FileInputStream("/etc/security/cacerts.bks"); 
ks.load(is, "changeit".toCharArray()); 

List<X509Certificate> certs = new ArrayList<X509Certificate>(); 
Enumeration<String> aliases = ks.aliases(); 
while (aliases.hasMoreElements()) { 
    String alias = aliases.nextElement(); 
    X509Certificate cert = (X509Certificate) ks.getCertificate(alias); 
    certs.add(cert); 
} 

EDIT:これは、キーストアへのパスをハードコーディングする必要がで動作します:

TrustManagerFactory tmf = TrustManagerFactory 
        .getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
tmf.init((KeyStore) null); 
X509TrustManager xtm = (X509TrustManager) tmf.getTrustManagers()[0]; 
for (X509Certificate cert : xtm.getAcceptedIssuers()) { 
    String certStr = "S:" + cert.getSubjectDN().getName() + "\nI:" 
         + cert.getIssuerDN().getName(); 
    Log.d(TAG, certStr); 
} 
+0

もちろん、それは壊れてしまった...少なくともMotorola XOOMタブレットでは4.xにアップグレードされた。 /etc/security/cacerts.bksは、個別のPEMエンコードファイルとしてcertsを含む/ etc/security/cacerts /ディレクトリに置き換えられました。 – Nick

+3

APIを使用してICSに証明書を追加できます。私もそれについて書いた:) http://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.html –

+0

これは、 "ファイルが見つかりませんでした"というエラーを表示しています..何をするのですか? –

1

ICS(アンドロイド4.0/API 14)は、(SDKで直接利用できません)TrustedCertificateStoreを導入しましたあなたはそれを正確に行うことができます。

/** 
* Android Central Keystore repo usually located on /data/misc/keychain 
* including the system trusted anchors located on /system/etc/security 
*/ 
KeyStore keyStore = KetStore.getInstance("AndroidCAStore"); 
keyStore.load(null, null); //Load default system keystore 
Enumeration<String> keyAliases = keyStore.aliases(); 

while(keyAliases.hasMoreElements()){ 
    String alias = aliases.nextElement(); 
    X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias); 

    //<User cert in whatever way you want> 
} 
関連する問題