SSL中使用的信任存储和密钥存储如何?
问题描述:
当使用Java创建SSL连接,我们首先与我们的的KeyStore和信任库初始化的SSLContext。在中的SSLContext javax.net.ssl有一种方法,称为createSSLEngine()创建一个SSLEngine。所以当为连接创建会话时,将使用创建的SSLEngine。我的问题是SSL协议在哪一点使用KeyStore和TrustStore的keyManagers和TrustManagers?SSL中使用的信任存储和密钥存储如何?
在此先感谢。
答
在SSL握手期间建立相互信任和真实性并创建SSL会话。
对于您的发送问题,如果链中至少有一个证书是可信的,则标准JSSE信任管理器将认为证书链是可信的。它不一定是根证书。如果您确信您必须建立根证书的有效性和真实性,则应该实施自定义TrustManager并使用它,而不是默认实现。
这些在[JSSE参考指南](http://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html)中都有详细描述。你有什么问题? – EJP 2013-02-27 09:37:22
我需要知道在SSLEngine中是否实现了Trust存储的使用?如果是这样如何?我问这个问题,因为当我从客户端获取证书链时,链中的根证书必须位于Truststore中才能建立SSL连接。我不确定这是否在Java中的SSL实现中实现。 – Jeewantha 2013-02-27 10:16:04
是的。 SSLEngine执行SSL握手,通过TrustManager验证对等证书,并使包含对等证书的SSLSession可用于应用程序。这就是为什么SSLEngine是由SSLContext创建的,该SSLContext包含KeyManagers和TrustManagers。 – EJP 2013-02-27 21:34:27