Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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_Ssl_Https_Tomcat8_Jsse - Fatal编程技术网

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

Java 如何在SSL握手中生成对称密钥?,java,ssl,https,tomcat8,jsse,Java,Ssl,Https,Tomcat8,Jsse,在SSL握手期间,客户端加密生成的预主密钥 使用服务器的公钥并发送到服务器。服务器和 客户机执行步骤,以使用商定的密钥生成主密钥 密码客户端和服务器都使用主密钥 生成会话密钥,这些密钥是用于 加密和解密SSL会话期间交换的信息 如何获取对称密钥,以便将其存储到数据库中,并在每次客户端连接时使用相同的密钥 服务器和客户端都应该保存该密钥,并且不再进行握手过程。下次即使断开连接,他们也应该通过https使用对称密钥直接启动通信 简而言之,我希望SSL会话永远持续 编辑 安卓设备是客户端。每当客户机联

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

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

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

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

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

您不能。协商的密钥应该是私有的。为了便于参考,我向您发送了apache环境变量的链接。您将看到对称密钥不是其中之一

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

如何获得对称密钥

你不能用Java

这样我就可以将它存储到数据库中,并在每次客户端连接时使用它了

您不能在SSL中使用

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

你不能。这将是不安全的

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

你不能

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

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

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


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

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


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

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


此外,当使用TLS 1.2和完美前向保密时,使用的对称密钥不是客户端在初始交换中生成的密钥,而是使用短暂的Diffie Hellman ECDHE-RSA、ECDHE-ECDSA生成的密钥。

通常是个坏主意。使用重复使用的密钥进行持续会话是一种不好的做法,因为您可能会长时间进入连接。你在连接什么?你从哪里转接?您使用的确切协议是什么?这不起作用,您只能使用SSL会话缓存,但是如果客户端不向您发送旧会话ID,则必须创建新会话。这是SSL/TLS指定的方式-如果您不希望采用这种方式,则不能使用SSL/TLS。如果您只需要一个共享对称密钥,只需在客户端生成一个,然后通过SSL连接将其发送到另一端。使用SSL会话生成的对称密钥真的没有什么可罚的。@zaph那么这就不是https了……感谢您让我知道这在SSL中是不可能的。如果客户端不是浏览器而是一个封闭源代码程序,那么保存密钥以供将来通信是多么不安全;因为对称密钥的长度不足以无限期地安全。你试图解决的问题实际上并不存在。SSL会话恢复确实有效,并且允许在同一会话中使用多个会话密钥,而无需进行完全的重新处理。Apache HTTPD mod_SSL环境变量与Java应用程序内部的可用性无关。事实上,apachehttpd mod_ssl使用OpenSSL,这使得会话密钥可用。但这与问题无关。mod_ssl是一个用于说明对称密钥在知名软件中不可用的示例,OpenSSL是一个用于说明它在另一个知名软件中可用的示例。所以问题是关于Java.ok,你是对的,因为@Nilesh并不表示要使用apache这样的代理,重要的是要知道哪些SSL变量为Java服务器提供了TOMCAT8,所以它不是作为示例提供的,而是作为对OP配置的猜测?在任何情况下,了解JavaAPI提供了什么也很重要。双方都需要OP方案中的密钥。