Tob*_*oby 239 java ssl jce 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等时的关系是什么?
Bru*_*uno 324
该术语是有点混乱确实,但两者javax.net.ssl.keyStore
并javax.net.ssl.trustStore
用来指定密钥库使用,用于两个不同的目的.密钥库有各种格式,甚至不一定是文件(请参阅此问题),并且keytool
只是对它们执行各种操作的工具(导入/导出/列表/ ...).
的javax.net.ssl.keyStore
和javax.net.ssl.trustStore
参数是用于建立默认参数KeyManager
S和TrustManager
S(分别地),然后用于构建SSLContext
其基本上包含SSL /使经由一个SSL/TLS连接时TLS设置,以使用SSLSocketFactory
或SSLEngine
.这些系统属性就是默认值来自的位置,然后由其SSLContext.getDefault()
自身使用SSLSocketFactory.getDefault()
,例如.(如果您不想使用默认值和特定SSLContext
用途的s ,那么所有这些都可以通过API在多个地方进行自定义.)
的之间的差KeyManager
和TrustManager
(并因此之间javax.net.ssl.keyStore
和javax.net.ssl.trustStore
)如下(从引JSSE REF指南):
TrustManager:确定是否应该信任远程身份验证凭据(以及连接).
KeyManager:确定要发送到远程主机的身份验证凭据.
(其他参数可用,它们的默认值在JSSE参考指南中描述.请注意,虽然信任库存在默认值,但密钥库中没有一个.)
从本质上讲,密钥库中javax.net.ssl.keyStore
包含您的私钥和证书,而其javax.net.ssl.trustStore
意图是包含您在远程方提供其证书时愿意信任的CA证书.在某些情况下,它们可以是同一个商店,尽管使用不同的商店通常是更好的做法(特别是当它们是基于文件的时候).
Bal*_*yan 50
以常见用例/目的或外行方式解释:
TrustStore:如名称所示,它通常用于存储可信实体的证书.进程可以维护其信任的所有可信任方的证书存储.
keyStore:用于存储服务器密钥(公共和私有)以及签名证书.
在SSL握手期间,
客户端尝试访问https://
因此,服务器通过提供SSL证书(存储在其keyStore中)进行响应
现在,客户端收到SSL证书并通过trustStore进行验证(即客户端的trustStore已经拥有它信任的预定义证书集).它像:我可以信任这台服务器吗?这是我试图与之交谈的服务器吗?没有中间人攻击?
一旦客户端验证它正在与它信任的服务器通信,则SSL通信可以通过共享密钥进行.
注意:我在这里不是在谈论服务器端的客户端身份验证.如果服务器也想要进行客户端身份验证,那么服务器还会维护一个trustStore来验证客户端.
mus*_*iKk 24
密钥库和信任库文件之间没有区别.两者都是专有JKS文件格式的文件.区别在于使用:据我所知,Java将仅使用引用的商店-Djavax.net.ssl.trustStore
在创建SSL连接时查找要信任的证书.键和键相同-Djavax.net.ssl.keyStore
.但理论上,对于信任和密钥库使用同一个文件是可以的.
Aka*_*288 21
密钥库由服务器用于存储私钥,第三方客户端使用Truststore来存储服务器提供的公钥访问.我已经在我的生产应用程序中完成了 以下是为SSL通信生成Java证书的步骤:
keytool -genkey -keystore server.keystore -alias mycert -keyalg RSA -keysize 2048 -validity 3950
keytool -selfcert -alias mycert -keystore server.keystore -validity 3950
keytool -export -alias mycert -keystore server.keystore -rfc -file mycert.cer
keytool -importcert -alias mycert -file mycert.cer -keystore truststore
归档时间: |
|
查看次数: |
222536 次 |
最近记录: |