如何在SSL握手中生成对称密钥?

时间:2016-06-02 09:16:57

标签: java ssl https tomcat8 jsse

  

在SSL握手期间,客户端会加密生成的预主密钥   使用服务器的公钥并发送到服务器。 Server和   客户执行步骤以商定的方式生成主密钥   密码。客户端和服务器都使用主密钥   生成会话密钥,用于对称密钥   加密和解密SSL会话期间交换的信息

     

http://www.symantec.com/connect/blogs/how-does-ssl-work-what-ssl-handshake

如何获得该对称密钥,以便我可以将其存储到数据库中,并在每次客户端连接时使用相同的密钥?

服务器和客户端都应保存该密钥,并且永远不再进行握手过程。下次(即使断开连接后),他们应该使用https上的对称密钥直接启动通信。

简而言之,我希望SSL会话永远持续下去。

修改 Android设备是客户端。每当客户端上线时,客户端 - 服务器仅交换少量字节数据。在这种情况下,SSL是开销,不是吗?

3 个答案:

答案 0 :(得分:5)

  

如何获得对称密钥

你不能用Java。

  

这样我可以将其存储到数据库中并在每次客户端连接时使用相同的内容吗?

你不能使用SSL。

  

服务器和客户端都应保存该密钥,再也不要再进行握手过程。

你做不到。这将是不安全的。

  

下次(即使断开连接后),他们应该使用https上的对称密钥直接启动通信。

你不能。

  

简而言之,我希望SSL会话永远持续下去。

你不能,也不想。这将是不安全的。

  

在这种情况下SSL是开销,不是吗?

这些问题毫无意义。相比什么?您无法将安全解决方案与不安全解决方案进行比较。如果您不想要安全性,请不要使用SSL。

答案 1 :(得分:2)

问题是:“我如何获得对称密钥,以便我可以将其存储到数据库中,并在每次客户端连接时使用相同的密钥?”。

如果您只需要一个共享的对称密钥,只需在客户端生成一个密钥,然后通过SSL连接将其发送到另一端。使用SSL会话生成的对称密钥实际上无法获得任何好处。

使用SSL生成的对称密钥和由您生成的对称密钥有什么区别?

当使用TLS 1.2并完善前向保密时,使用的对称密钥不是客户端在初始交换中生成的密钥,而是使用Ephemeral Diffie-Hellman(ECDHE-RSA,ECDHE-ECDSA)生成的密钥。

答案 2 :(得分:1)

你做不到。谈判的密钥应该是私密的。作为参考,我发送给apache环境变量的链接。您将看到对称密钥不是其中之一

https://httpd.apache.org/docs/current/mod/mod_ssl.html

您可以获取sessionID,但是如何重用会话必须留给SSL / TLS协议。它具有自动重新协商选项,因此即使服务器已经丢弃,您也可以重用会话。该协议将决定何时可以重用或不能重用。

请参阅https://tools.ietf.org/html/rfc5746