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

我们是否应该将密钥库和信任库指向同一个 .jks 文件?

邹野
2023-03-14

我正在使用SSL握手连接到URL。为此,我生成了一个. csr文件并对其进行了签名。签名后,我创建了一个my.jks文件,其中包含3个条目

    < li >签名的客户端证书 < li >私钥 < li>CA

我使用jetty作为服务器,我专门将密钥库和信任库设置为相同的jks文件,如下所示

-Djavax.net.ssl.keyStore=/home/keystore/my.jks
-Djavax.net.ssl.keyStorePassword=changeit
-Djavax.net.ssl.trustStore=/home/keystore/my.jks
-Djavax.net.ssl.trustStorePassword=changeit

它工作正常。但是这是正确的方法吗?我认为密钥库应该包含客户端证书和私钥,信任库应该包含CA。但是当我尝试这样做时,我得到了以下错误。

"javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径"

请对此提出建议。

共有3个答案

庄阿苏
2023-03-14

对于你问题的第一部分,我认为这个答案已经涵盖了很多。简而言之,是的,你可以指向同一个文件,不,这不是最佳实践。至于你得到的错误,有很多原因可能会发生,但是你可以尝试从JAVA_HOME/jre/lib/security将CA添加到cacerts文件中。这使得它可用于所有JAVA应用程序

封景曜
2023-03-14

如果您希望自签名证书(仅当您将其用于服务器内通信而不交换任何个人/敏感信息时):

1)使用-certreq生成CSR

< code > keytool-cert req-alias keyAlias-keystore location PK-store pass your pass-file myowncertrequest . CSR

2)使用上面的csr生成证书:

keytool -gencert -infile myowncertrequest.csr -alias keyAlias -keystore locationPk -storepass yourpass -outfile myownsignedcert.cer

3)将其导入“单独”信任存储

< code > keytool-import-trustcacerts-alias myown-file myownsignedcert . cer-keystore intra _ server _ trust store-store pass good password

这将创建一个自定义信任存储区,该信任存储区将仅在您自己的域中使用,并用于某些基本的身份验证和数据交换。但是,如果要向外界公开服务,请使用适当的CA来签署这些证书。

羊舌高明
2023-03-14

不可以。信任库只包含公共数据:您信任的CA的公共证书。KeyStore包含私钥及其证书:您的数字身份。它们甚至可能由不同的人控制。不要混淆它们的功能。

 类似资料:
  • 应用程序A调用webservice应用程序B 相互认证。 我们有申请证书。由名为C的CA签名的证书。这是jks文件中唯一的单一证书内容 我们使用了相同的jks文件作为应用程序密钥库和信任库。它运转良好。 我的理解是,当应用程序A调用appB时,appB发送其证书,该证书也由名为C的CA签名。appA接受该证书,因为在appA TrsStore中,我们有另一个证书,该证书由名为C的CA签名。 然后,

  • 我试图转换JKS密钥存储到BKS密钥存储使用转换密钥存储实用程序(https://code.google.com/p/zip-signer/downloads/detail?name=convert-keystore-1.2.zip 在执行命令时 我得到以下错误: 密钥存储是通过Java密钥存储实用程序创建的: keytool-genkey-alias myAlias-keyalg RSA-key

  • 我有许多Java应用程序,它们通过SSL保护的连接连接到其他应用程序和服务。在开发过程中,我可以使用JVM参数指定要使用的密钥库/信任库和密码: 这非常有效。然而,在生产过程中需要隐藏密码,使用JVM参数意味着任何查看进程列表的人都可以看到明文形式的密码。 有没有一个简单的方法来解决这个问题?我考虑将证书导入JRE的lib/security/cacerts文件,但我的理解是,这仍然需要密码。一种选

  • 来自服务器端的PEM文件,打开时为以下格式: 我试图将其转换为两个JKS文件(信任存储和密钥存储),我可以通过SSL使用java应用程序调用服务器。 谢谢你在这方面的帮助。

  • 问题内容: 我想知道是否存在Java中使用的JKS密钥存储格式的正式规范?我想编写一个往返PKCS#12的转换器,但不是用Java编写的,因此不幸的是,不能选择使用keytool或Java代码。 在一个十六进制编辑器中查看一个告诉我,它可能不是ASN.1。在我开始研究OpenJDK之前,尝试对格式进行逆向工程,是否有人知道是否存在规范?到目前为止我找不到任何东西,将不胜感激! 问题答案: 我认为您

  • 问题内容: 据我了解,密钥库通常会保存私钥/公钥,而信任库通常只保存公钥(并且代表您打算与之通信的受信任方的列表)。好吧,这是我的第一个假设,因此,如果这不正确,那么我可能起步并不顺利… 我很想了解使用keytool时如何/何时区分商店。 因此,到目前为止,我已经使用 这将创建我的keystore.ks文件。我回答了我是否信任bob的问题,但是我不清楚这是否创建了密钥库文件或信任库文件?我可以将我