如何获得SSL握手中生成的对称密钥?

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

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

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

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

总之,我想SSL会话永远持续下去。

编辑 Android设备是客户端。 每当客户端上线时,客户端服务器只交换几个字节的数据。 SSL在这种情况下是开销,不是吗?


我如何得到这个对称密钥

你不能用Java。

这样我可以将其存储到数据库中,并且每次客户端连接时都使用相同的方法?

你不能在SSL。

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

你不能。 这将是不安全的。

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

你不能。

总之,我想SSL会话永远持续下去。

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

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

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


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

如果您只需要一个共享对称密钥,只需在客户端上生成一个密钥,并通过SSL连接将其发送到另一端。 使用由SSL会话生成的对称密钥确实没有什么可以获得的。

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

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


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

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

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

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

链接地址: http://www.djcxy.com/p/21805.html

上一篇: How do I get symmetric key generated in SSL handshake?

下一篇: How to create a custom secure socket connection between client/server?