これはサポートされておらず、将来のバージョンでは壊れる可能性がありますが、信頼できる証明書のリストを取得する方法は次のとおりです。/system は読み取り専用でマウントされているため、root アクセスなしで新しいものを追加することはできません。ただし、ルート アクセス権がある場合は、通常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);
}
編集:これは、キーストアへのパスをハードコーディングする必要がある場合に機能するはずです:
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);
}