Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSL握手过程_Java_Security_Encryption_Ssl - Fatal编程技术网

Java SSL握手过程

Java SSL握手过程,java,security,encryption,ssl,Java,Security,Encryption,Ssl,我将开始学习安全性,并了解SSL握手场景。在这篇文章中,回复者提到对称密钥是在浏览器上生成的,使用服务器的公钥加密并发送到服务器 然而,在其他文章中,他们提到生成了主密钥之前的密钥,并将其发送给对称密钥的计算 我可以知道哪个是正确的解释吗?这个预主密钥是如何生成并用于生成对称密钥的?您链接到的帖子中的描述只是对协议的简单解释 客户端生成预主密钥,并在握手过程中使用服务器的公钥对其进行加密。然后,双方根据中的方法导出对称密钥材料,包括IV密钥和MAC密钥 您链接到的帖子中的描述只是对协议的简化解释

我将开始学习安全性,并了解SSL握手场景。在这篇文章中,回复者提到对称密钥是在浏览器上生成的,使用服务器的公钥加密并发送到服务器

然而,在其他文章中,他们提到生成了主密钥之前的密钥,并将其发送给对称密钥的计算


我可以知道哪个是正确的解释吗?这个预主密钥是如何生成并用于生成对称密钥的?

您链接到的帖子中的描述只是对协议的简单解释


客户端生成预主密钥,并在握手过程中使用服务器的公钥对其进行加密。然后,双方根据中的方法导出对称密钥材料,包括IV密钥和MAC密钥

您链接到的帖子中的描述只是对协议的简化解释


客户端生成预主密钥,并在握手过程中使用服务器的公钥对其进行加密。然后,双方根据中的方法导出对称密钥材料,包括IV密钥和MAC密钥

下面是一篇描述SSL/TLS握手的优秀文章的链接(包括客户端和服务器使用预主密钥生成主密钥,用于生成MAC和加密的一组会话密钥):


下面是一篇描述SSL/TLS握手的优秀文章的链接(包括客户端和服务器使用预主密钥生成主密钥,用于生成MAC和加密的一组会话密钥):


说浏览器生成对称密钥只是一种简化(至少比说加密是用证书完成的要好)。有关更多详细信息,请访问on Security.SE:

然后,密码套件确定这些对称密钥最终如何共享。SSL/TLS握手的直接目的是在客户端和服务器之间建立共享预主密钥。这被更广泛地称为

这分为两类(不包括匿名密钥交换):

  • RSA密钥交换(例如,TLS_RSA_WITH_AES_128_CBC_SHA):客户端使用服务器的公钥(在证书中找到)加密预主密钥
  • DH(E)密钥交换(例如,TLS_DHE_RSA_与_AES_256_CBC_SHA):进行Diffie-Hellman密钥交换。服务器对其DH参数进行签名,客户端根据服务器证书中的公钥验证签名。(拥有基于RSA的证书并不意味着需要交换RSA密钥。)
在握手结束时,无论使用了这两个步骤中的哪一个,客户机和服务器都拥有一个公共的主密钥,并从中派生出一个主密钥(请参阅)


根据该主密钥,双方可以导出加密密钥(和MAC密钥),如中所述。

说浏览器生成对称密钥只是一种简化(至少比说加密是用证书完成的要好)。有关更多详细信息,请访问on Security.SE:

然后,密码套件确定这些对称密钥最终如何共享。SSL/TLS握手的直接目的是在客户端和服务器之间建立共享预主密钥。这被更广泛地称为

这分为两类(不包括匿名密钥交换):

  • RSA密钥交换(例如,TLS_RSA_WITH_AES_128_CBC_SHA):客户端使用服务器的公钥(在证书中找到)加密预主密钥
  • DH(E)密钥交换(例如,TLS_DHE_RSA_与_AES_256_CBC_SHA):进行Diffie-Hellman密钥交换。服务器对其DH参数进行签名,客户端根据服务器证书中的公钥验证签名。(拥有基于RSA的证书并不意味着需要交换RSA密钥。)
在握手结束时,无论使用了这两个步骤中的哪一个,客户机和服务器都拥有一个公共的主密钥,并从中派生出一个主密钥(请参阅)


根据该主密钥,双方可以派生加密密钥(和MAC密钥),如中所述。

您可能可以链接到TLS规范(1.0或更高版本)。此SSLv3规范最近才作为历史记录发布。您可能会链接到TLS规范(1.0或更高版本)。此SSLv3规范仅在最近作为历史记录发布。