何时安装密钥库以及何时仅安装包装在密钥库中的证书

Lee*_*fin 13 java android certificate keystore ssl-certificate

我有一个PKCS#12文件,我认为它是一个密钥库文件,因为它包含一个密钥条目和一个证书条目.

在Android中,我看到人们通过以下方式以编程方式安装密钥库(代码来自Android开发人员博客):

byte[] keystore = . . (read from a PKCS#12 keystore)

Intent installIntent = KeyChain.createInstallIntent();
installIntent.putExtra(KeyChain.EXTRA_PKCS12, keystore);
startActivityForResult(installIntent, INSTALL_KEYSTORE_CODE);
Run Code Online (Sandbox Code Playgroud)

我还看到人们以编程方式只安装包装在密钥库中的证书:

Intent intent = KeyChain.createInstallIntent();
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, cert);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

此外,我还看到人们安装密钥库和密钥库中包含的证书.例如,本文向我们展示了如何首先安装密钥库,然后以编程方式安装包装在密钥库中的证书.

我真的很困惑我应该何时才安装密钥库以及何时应该安装证书(包含在密钥库中)?什么时候应该安装?请问有人让我明白这个吗?

例如,我的密钥库PKCS#12文件(mycert.p12)包含密钥/证书对,它用于连接到VPN服务器.什么时候我的android客户端应该安装密钥库中包含的密钥库和证书?客户端何时应该安装包装在密钥库中的证书?有什么区别 ?我对此很困惑.

bis*_*oje -1

由于尚未有人回答您,我希望我至少可以澄清您链接到的博客文章中的一些观点。

过去,如果应用程序需要对安全 SSL Web 服务器进行身份验证,或通过客户端证书对服务器进行用户身份验证,则通常会维护自己的密钥存储。

这是这里的两个基本用例:

  • 如果您使用客户端证书进行身份验证(向服务器证明您是授权客户端),那么您只需安装证书。
  • 如果您尝试验证服务器的身份,那么您将需要验证服务器的证书。在这种情况下,您将需要安装一个密钥库(如果您不使用自签名证书,则可能是一个链)。密钥库中的私钥将用于验证服务器的证书。

您问题中的第二段代码旨在创建证书链(当您不使用自签名证书时):

我们首先使用密钥别名获取私钥和​​证书链,然后创建并验证签名以检查密钥是否确实可用。由于我们使用自签名证书,“链”由单个条目组成,但对于由 CA 签名的证书,您需要在返回的数组中找到实际的最终实体证书。

安装 CA 证书与安装 PKCS#12 文件没有太大区别:您将证书加载到字节数组中并将其作为额外内容传递给安装意图。

Intent intent = KeyChain.createInstallIntent();
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, cert);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我希望这个解释有帮助!:)

  • 你确定你没有把这些颠倒过来吗?在第二个项目符号/用例中,您声明需要私钥来验证服务器。这是不正确的。您需要公钥/证书来验证服务器。那你需要在证书链中拥有一个值得信任的 CA。这些都是公共证书 - 没有私钥。服务器的私钥仅在服务器上。另外,第一个项目符号是不正确的。要使用客户端证书对服务器进行身份验证,您需要客户端的私钥(以及证书)。 (3认同)
  • 如果您只有客户端的公共证书,服务器如何知道除您之外的其他人正在提供证书?它通常的工作方式是,当客户端连接到服务器时,它提供客户端的证书(带有公钥)和一些使用客户端私钥签名的数据(通常是哈希值)。然后,服务器可以使用客户端的公钥验证签名。TLS/SSL 会为您处理此问题,但为了将 TLS 与客户端证书一起使用,您必须提供私钥。 (2认同)
  • 你已经完全从后到前了。如果您要出示证书,则必须拥有相应的私钥。如果您要验证对等点,则只需要一组受信任的签名者证书。关于创建签名来验证您自己的私钥的第二个引用是毫无意义的。使用您自己的私钥创建签名,然后使用您自己的公钥对其进行验证,这完全没有任何效果。“检查密钥是否真的可用”只是胡言乱语。 (2认同)