当前位置: 首页 > 知识库问答 >
问题:

我有一个密钥库文件,如何在Android应用程序中为sslContext提供密钥管理器?

甘骞尧
2023-03-14

更新:至于我最初的问题,结果是对java的调用。安全密钥库。getCertificate(别名)实际上返回X509Certificate。但这不是问题所在。

(请耐心听我说,我对这个证书还不熟悉。)

只要我不需要经过身份验证的客户端,我就设法连接到我的(自签名的)启用SSL的服务器。当我需要clientAuth我的应用程序产生"例程:SSL3_READ_BYTES: sslv3警报握手失败(外部/openssl/ssl/s3_pkt. c"...对一些人来说,治疗方法是从BKS切换到PKCS12,这对我不起作用。

因此,现在我正在尝试实现自己的X509KeyManager(如本文所建议的),将其交给sslContext。init([keyManager],信任管理器,null)

如果我理解正确,sslContext将向我的密钥管理器询问给定别名的证书链和/或私钥。(每当它询问要选择哪个别名时,我都会提供我的硬编码别名。)

但是根据X509KeyManager界面,我应该返回X509Certificate。如何使用密钥库创建一个密钥库?

共有1个答案

危文乐
2023-03-14

您可以在客户端证书中使用KeyStore进行客户端身份验证,而无需显式创建KeyManager。代码应该是这样的:

KeyStore keyStore = KeyStore.getInstance("BKS");
InputStream is = getResources().openRawResource(R.raw.client);
keyStore.load(is, "yourKeyStorePassword".toCharArray());
is.close();

KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");
keyManagerFactory.init(keyStore, "yourKeyStorePassword".toCharArray());

SSLContext sslContext = SSLContext.getInstance("TLS"); 
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagers, null);

还要确保服务器信任客户端证书。

 类似资料:
  • 我为Jetty 9和Kafka使用ssl密钥库。我需要提供密钥库和密钥密码来访问密钥库和私钥。但是,我不想在配置文件中以明文形式提供这些密码。还有哪些其他选项可以安全地提供/加密密码?每种方法的优缺点是什么?

  • 我在过去为Azure函数使用了很多秘密,现在我试图使用一个密钥,RSA加密,4096位。这是一个私有的PuTTy.ppk键,我已经将其导出为。pem类型以满足Azure的要求。我有一个Python 3.7应用程序,我已经在其中部署了所需的功能,并尝试在应用程序设置中引用所需的键,下面的语句是: @microsoft.keyvault(secreturi=https://{thevault-addr

  • 问题是,我如何只使用上传密钥而不使用密钥库文件生成一个新的签名应用程序包?

  • 我试图为某些设备生成密钥时出错。我能够在运行4.4.2的三星Galaxy Note上重现错误。 我创建了一个小应用程序,只能通过从Android开发者页面“生成新私钥”下的https://developer.android.com/training/articles/keystore.html逐行复制代码来生成密钥 错误似乎发生在kpg.generateKeyPair(),在Android Key

  • 问题内容: 我需要将2个密钥存储到KeyStore中,这是相关代码: 尽管我得到了执行,但“私钥必须带有证书链” 那到底是什么?以及我将如何生成它? 问题答案: 您还需要提供私钥条目的证书(公钥)。对于由CA签名的证书,链是CA的证书和最终证书。对于自签名证书,您只有自签名证书。 示例: 要生成证书,请点击以下链接: 示例:

  • 在 Swarm 集群中管理敏感数据 在动态的、大规模的分布式集群上,管理和分发 密码、证书 等敏感信息是极其重要的工作。传统的密钥分发方式(如密钥放入镜像中,设置环境变量,volume 动态挂载等)都存在着潜在的巨大的安全风险。 Docker 目前已经提供了 secrets 管理功能,用户可以在 Swarm 集群中安全地管理密码、密钥证书等敏感数据,并允许在多个 Docker 容器实例之间共享访问