、将来のバージョンなどで破るが、ここでは、信頼できる証明書のリストを取得する方法ですがあります。/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);
}
ここでは、すでに説明した目的に役立つサーバー証明書があります。あなたが見つけられないだろう - 追加したくないと思うのは、あなたの明記された目的のファイル暗号化に役立つ個人証明書だと思います。 – Earl
彼らはCA証明書にしか見えません。私はまだ彼らがプログラムでアクセス/変更することができるかどうか、また電子証明書などのために別の中央キーストアが存在するかどうかを調べることに興味があります。 – Nick
確かにトラストストアにアクセスしてロードできますが、この。これは通常のBouncy Castleキーストアで、KeyStoreクラスを使用するだけです。 –