我知道密钥库通常会保存私钥/公钥,信任存储只保存公钥(并代表您打算与之通信的可信方列表).嗯,这是我的第一个假设,所以如果这不正确,我可能还没有开始......
我对使用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等时的关系是什么?
我正在尝试连接到安全的Web服务.
即使我的密钥库和信任库已正确设置,我也会收到握手失败.
经过几天的挫折,无休止的谷歌搜索并询问周围的每个人我发现唯一的问题是java选择不在握手期间将客户端证书发送到服务器.
特别:
我的问题:
我确实为此设置了一个肮脏的解决方法,但我对此并不高兴所以如果有人能为我澄清这个,我会很高兴.
生成密钥库:
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)
我相信我已经以正确的顺序导入了链条,所以我对此消息感到非常困惑.谁能看到我做错了什么?
我正在更新我的 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)一样?
我是计算机安全的新手,我有一个基本的问题,我的答案是我无法找到的.
我有一个私钥,其有效期已过期.使用该密钥,我之前生成了一个.csr并将其发送给CA,他们给了我一张仍然有效的证书.
我的问题是,我可以(使用keytool或其他......)修改私钥的到期日期,以便将其与我的证书(.cer)一起使用.我可以重新生成与此证书一起使用的私钥吗?
谢谢,
ssl ×4
keytool ×3
certificate ×2
java ×2
ca ×1
cryptography ×1
hadoop ×1
https ×1
jce ×1
jks ×1
private-key ×1
security ×1
tomcat ×1