【问题标题】:How to import a jks certificate in java trust store如何在 java 信任库中导入 jks 证书
【发布时间】:2018-11-08 18:01:18
【问题描述】:

如何将 .jks 文件导入 java 安全的信任库?我看到的所有教程都是使用“.crt”文件。但是,我只有“.jks”文件,它也是我使用 keytool 命令生成的密钥库。

目前,我正在关注this tutorial

我能够根据本教程生成 Java 密钥库和密钥对,并为现有 Java 密钥库生成证书签名请求 (CSR)。但我无法将根证书或中间 CA 证书导入现有的 Java 密钥库,也无法将签名的主证书导入现有的 Java 密钥库,因为它正在寻找“.cert”文件。

我是否遗漏了教程中列出的步骤?如果我拥有的唯一文件是“.jks”文件,我如何信任证书?而“.csr”文件有什么用?

请注意,我使用的是 Windows。

【问题讨论】:

  • 您能指出您要达到的目标吗?您是否尝试设置服务器?或者您是否尝试使用客户端身份验证?或两者?您是否在客户端和/或服务器上使用特定框架?
  • 我没有使用任何框架。我正在尝试进行服务器身份验证。我需要验证我连接到的服务器是否是合法的给定证书。
  • 所以您有一个客户端,没有服务器,并且您已经获得了一个.jks 密钥库可以使用?如果您只是客户端并且没有使用客户端身份验证,则不需要生成密钥对。

标签: java ssl https keytool jks


【解决方案1】:

".jks" 信任库,或者至少如果你将它分配给 JSSE 应该是。您应该将 CA 的证书添加到该文件中。然后,软件将通过遍历证书来查找证书链。私钥应保留在(受密码保护的)".jks" 文件中。

换句话说,您应该将证书导入到".jks",而不是从中导出证书。如果您的证书请求的响应中未包含特定提供商的证书,您可能需要单独下载它们。您可能也可以从您最喜欢的浏览器中导出它们。通常这些以 X5.09 DER 格式存储(应该与 Java keytool 兼容)。

步骤(一般):

  1. 生成密钥对和证书请求,存储到新的或现有的密钥库 (.jks)
  2. 发送要签名的证书请求,获取以您请求的证书开头的链
  3. 使用私钥将证书链导入密钥库
  4. 为需要进行验证的一方(使用 SSL 时至少一个或多个客户端)生成新的或使用现有的密钥库,并导入证书链
  5. 信任上述密钥库中证书链中的证书,可能是最顶层的证书(“根”证书)。
  6. 配置和测试各方,例如使用带有私钥的密钥库的服务器和使用后一个密钥库的多个客户端。

【讨论】:

  • 这是通用答案,如果您想了解更多细节或细节,请指出,因为如果没有更多细节,我无法提供哪些额外信息。
  • 感谢您清除它!我曾经认为通过在密钥库中添加证书意味着您实际上是在 JVM 中添加证书,而不仅仅是单个密钥库文件。你能教我如何在使用 HttpsURLConnection 而不将其设置为信任所有证书的情况下将 Java 设置为信任自签名证书吗?
  • 不,但我不必这样做。通常,您会配置 Java 应用程序以通过别名使用特定键。如果 Java 可以找到整个证书链,它只会接受此别名,但对于自签名证书,该链的长度为 1。您只需要信任 在您所在的另一个端点的证书没有私钥。例如。在创建连接时,客户端将尝试查看它是否可以构建到在特定时间有效的受信任证书的链。为此,您需要附加或创建密钥库,并导入并信任自签名证书。
  • 谢谢!是的,我需要它,因为我正在开发客户端。
  • 是的。谢谢,猫头鹰!但我仍然缺少一些东西。将首先为其寻找解决方案,如果我不能,我将发布另一个问题。再次感谢!
【解决方案2】:
#Use Keytool command to generate a self-signed certificate and install the certificate in Client Machine JDK Security Key store path.

# generate a certificate using JKS format keystore
keytool -genkey -alias selfrest -keyalg RSA -keypass pass123 -storetype JKS -keystore selfsigned.jks -storepass pass123 -validity 360 -keysize 2048

# To check the content of the keystore, we can use keytool again:
keytool -list -v -keystore selfsigned.jks

#Export Self signed certificate into .cer file
keytool -exportcert -alias selfrest -keystore selfsigned.jks -file selfsigned.cer

# (Run As Administrator- to open CMD.exe)
# Install self-signed certificate into Java JDK CA Certificate key store path
# to avoid giving certificate path in the client program.
keytool -import -alias selfrest -keystore "C:\Program Files\Java\jdk1.8.0_181\jre\lib\security\cacerts" -file selfsigned.cer

# List certificates stored in JDK Key store which you have just now imported into JDK Security path.
keytool -list -keystore "%JAVA_HOME%\jre\lib\security\cacerts

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 2016-03-19
    • 1970-01-01
    • 2014-08-12
    • 2013-01-07
    • 2015-07-09
    • 1970-01-01
    • 2019-02-26
    • 2014-06-11
    相关资源
    最近更新 更多