相关疑难解决方法(0)

Trust Store与Key Store - 使用keytool创建

我知道密钥库通常会保存私钥/公钥,信任存储只保存公钥(并代表您打算与之通信的可信方列表).嗯,这是我的第一个假设,所以如果这不正确,我可能还没有开始......

我对使用keytool时如何/何时区分商店感兴趣.

所以,到目前为止,我已经创建了一个密钥库

keytool -import -alias bob -file bob.crt -keystore keystore.ks
Run Code Online (Sandbox Code Playgroud)

这将创建我的keystore.ks文件.我回答yes问题我是否相信bob但是我不清楚这是否创建了密钥库文件或信任库文件?我可以设置我的应用程序以使用该文件.

-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x
Run Code Online (Sandbox Code Playgroud)

并且使用System.setProperty( "javax.net.debug", "ssl")set,我可以在受信任的证书下看到证书(但不在密钥库部分下).我导入的特定证书只有一个公钥,我打算用它通过SSL连接向Bob发送内容(但也许最好留给另一个问题!).

任何指示或澄清都将非常感激.无论你导入什么,keytool的输出都是相同的,它的惯例是一个是密钥库而另一个是信任存储?使用SSL等时的关系是什么?

java ssl jce keytool

239
推荐指数
4
解决办法
22万
查看次数

为什么java握手期间java不发送客户端证书?

我正在尝试连接到安全的Web服务.

即使我的密钥库和信任库已正确设置,我也会收到握手失败.

经过几天的挫折,无休止的谷歌搜索并询问周围的每个人我发现唯一的问题是java选择不在握手期间将客户端证书发送到服务器.

特别:

  1. 服务器请求客户端证书(CN = RootCA) - 即"给我一个由根CA签名的证书"
  2. Java查看了密钥库,只发现了我的客户端证书,该证书由"SubCA"签署,而"SubCA"又由"RootCA"签发.它没有费心去查看信任库...呃好吧我猜
  3. 可悲的是,当我试图将"SubCA"证书添加到密钥库时,这根本没有帮助.我确实检查了证书是否被加载到密钥库中.他们这样做,但KeyManager忽略除客户端之外的所有证书.
  4. 所有上述情况导致java决定它没有任何满足服务器请求的证书并且什么都不发送... tadaaa握手失败:-(

我的问题:

  1. 我是否有可能以"破坏证书链"或某种方式将"SubCA"证书添加到密钥库中,以便KeyManager仅加载客户端证书并忽略其余证书?(Chrome和openssl设法解决这个问题,为什么不能使用java? - 请注意,"SubCA"证书总是作为受信任的权限单独提供,因此Chrome显然在握手期间正确地将其与客户端证书一起打包)
  2. 这是服务器端的正式"配置问题"吗?服务器是第三方.我希望服务器能够请求由"SubCA"授权机构签署的证书,因为这是他们为我们提供的.我怀疑这个在Chrome和openssl中工作的事实是因为它们"限制性较小"而java只是"按书"而且失败了.

我确实为此设置了一个肮脏的解决方法,但我对此并不高兴所以如果有人能为我澄清这个,我会很高兴.

java ssl https certificate ca

63
推荐指数
2
解决办法
7万
查看次数

keytool错误:java.lang.Exception:无法从回复建立链

生成密钥库:

keytool -genkey -alias tomcat -keyalg RSA -keystore my.keystore -keysize 2048
Run Code Online (Sandbox Code Playgroud)

生成证书签名请求(CSR):

keytool -certreq -alias tomcat -keyalg RSA -file my.csr -keystore my.keystore
Run Code Online (Sandbox Code Playgroud)

然后我去我的托管服务提供商并获得一些证书.这些我安装如下:

keytool -import -alias root -keystore my.keystore -trustcacerts -file gd_bundle-g2-g1.crt
keytool -import -alias intermed -keystore my.keystore -trustcacerts -file gdig2.crt
keytool -import -alias tomcat -keystore my.keystore -trustcacerts -file my.crt
Run Code Online (Sandbox Code Playgroud)

当我安装最终证书(my.crt)时,我收到以下错误:

keytool error: java.lang.Exception: Failed to establish chain from reply
Run Code Online (Sandbox Code Playgroud)

我相信我已经以正确的顺序导入了链条,所以我对此消息感到非常困惑.谁能看到我做错了什么?

tomcat keytool ssl-certificate

26
推荐指数
3
解决办法
8万
查看次数

Java 密钥库 PrivateKeyEntry 与 trustCertEntry

我正在更新我的 Hadoop 集群使用的证书。当前 JKS 有一个条目:

Your keystore contains 1 entry

Alias name: myalias
Creation date: Jan 10, 2019
Entry type: PrivateKeyEntry
Certificate chain length: 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试从新证书创建一个新的密钥库:

keytool -importcert -alias myalias  -file newcertfile.crt -keystore newkeystore.jks
Run Code Online (Sandbox Code Playgroud)

但是我被问到我是否信任这个证书(如果我说不,keytool 退出):

Trust this certificate? [no]:  yes
Run Code Online (Sandbox Code Playgroud)

当我查看结果时,它不再是 PrivateKeyEntry 而是trustedCertEntry:

keytool -list -v -keystore newkeystore.jks
...
...
Your keystore contains 1 entry

Alias name: myalias
Creation date: Feb 20, 2019
Entry type: trustedCertEntry
...
...
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?我应该只使用带有trustedCertEntry 的JKS 还是有办法让它像旧的JKS(带有PrivateKeyEntry)一样?

security ssl hadoop jks

9
推荐指数
1
解决办法
2万
查看次数

我可以修改私钥有效性吗?

我是计算机安全的新手,我有一个基本的问题,我的答案是我无法找到的.

我有一个私钥,其有效期已过期.使用该密钥,我之前生成了一个.csr并将其发送给CA,他们给了我一张仍然有效的证书.

我的问题是,我可以(使用keytool或其他......)修改私钥的到期日期,以便将其与我的证书(.cer)一起使用.我可以重新生成与此证书一起使用的私钥吗?

谢谢,

ssl cryptography certificate keytool private-key

6
推荐指数
2
解决办法
9828
查看次数