编程语言
首页 > 编程语言> > java – Android Central Keystore

java – Android Central Keystore

作者:互联网

我希望有一种方法可以以编程方式访问Android设备上的中央可信密钥库.我知道一个存在,至少用于验证SSL连接等,它还带有一个方便的工具,用于添加证书,浏览等(在设置 – >位置和安全 – >管理可信证书下找到)

我希望能够以编程方式从中检索公钥以加密文件等.

鉴于可用的文档,似乎其他应用程序开发人员在他们的应用程序中管理自己的密钥库,这似乎是多余的.

有任何想法吗?

解决方法:

这是不受支持的,可能会在将来的版本中中断等,但这里是如何获取可信证书的列表.您无法在没有root访问权限的情况下添加新的,因为/ 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);
}

标签:android,java,security,certificate,android-keystore
来源: https://codeday.me/bug/20191006/1858129.html