JavaSSL:服务器和客户端是否必须拥有同一密钥库文件的副本?

JavaSSL:服务器和客户端是否必须拥有同一密钥库文件的副本?,java,ssl,keystore,Java,Ssl,Keystore,我对此有点陌生,我只是想知道,在ssl应用程序中,理想的情况是在现实世界中,服务器和客户端是否都有完全相同的.keystore文件的副本,或者这是否存在安全风险。在客户端没有实际密钥库文件副本的情况下,还有其他方法可以做到这一点吗?没有,客户端和服务器不需要相同的密钥库(通常它们并不相同),尽管如果它们是相同的,则可以工作 SSL连接在握手阶段依赖于非对称公钥/私钥加密,一旦建立连接,就切换到对称密钥加密 基本原则是: 服务器将其公钥发送到客户端 客户端响应使用服务器公钥加密对称密钥 只有服务

我对此有点陌生,我只是想知道,在ssl应用程序中,理想的情况是在现实世界中,服务器和客户端是否都有完全相同的.keystore文件的副本,或者这是否存在安全风险。在客户端没有实际密钥库文件副本的情况下,还有其他方法可以做到这一点吗?

没有,客户端和服务器不需要相同的密钥库(通常它们并不相同),尽管如果它们是相同的,则可以工作

SSL连接在握手阶段依赖于非对称公钥/私钥加密,一旦建立连接,就切换到对称密钥加密

基本原则是:

  • 服务器将其公钥发送到客户端
  • 客户端响应使用服务器公钥加密对称密钥
  • 只有服务器具有解密对称密钥所需的私钥,而服务器具有解密对称密钥所需的私钥
  • 然后,客户端和服务器使用符号密钥加密它们之间传递的所有数据

正如我所说的,这是基础,关于检查证书和握手的工作方式,还有更多的工作要做。

不,客户机和服务器不需要相同的密钥库(通常它们不一样),尽管如果它们是相同的,也会工作

SSL连接在握手阶段依赖于非对称公钥/私钥加密,一旦建立连接,就切换到对称密钥加密

基本原则是:

  • 服务器将其公钥发送到客户端
  • 客户端响应使用服务器公钥加密对称密钥
  • 只有服务器具有解密对称密钥所需的私钥,而服务器具有解密对称密钥所需的私钥
  • 然后,客户端和服务器使用符号密钥加密它们之间传递的所有数据

就像我说的,这是基础,关于检查证书和握手的工作方式,还有更多的工作要做。

当然不是


如果两个实体使用相同的私钥和证书,这将是一个重大的安全漏洞。私钥应该是、呃、私有的,证书应该对应于拥有该私钥的唯一标识。任何违反这一原则的行为都是根本性的安全错误。

绝对不是


如果两个实体使用相同的私钥和证书,这将是一个重大的安全漏洞。私钥应该是、呃、私有的,证书应该对应于拥有该私钥的唯一标识。任何违反该原则的行为都是一个基本的安全错误。

此外,请考虑SSL不是Java特定协议的事实。事实上,我猜现实世界中很大一部分SSL连接不是由Java代码创建的。因此,根据定义,.keystore文件是特定于Java的,并非所有SSL客户端都需要它。共享的只是公钥。客户端不会“响应使用服务器的公钥加密对称公钥”。双方都通过RFC2246中记录的密钥协商协议协商对称会话密钥和共享预主密钥。事实上,我猜现实世界中很大一部分SSL连接不是由Java代码创建的。因此,根据定义,.keystore文件是特定于Java的,并非所有SSL客户端都需要它。共享的只是公钥。客户端不会“响应使用服务器的公钥加密对称公钥”。双方通过RFC 2246中记录的密钥协商协议协商对称会话密钥和共享预主密钥。