【问题标题】:How do I get symmetric key generated in SSL handshake?如何获取 SSL 握手中生成的对称密钥?
【发布时间】:2016-10-01 22:29:49
【问题描述】:

在 SSL 握手期间,客户端加密生成的 pre-master secret 使用服务器的公钥并发送到服务器。服务器和 客户端执行步骤以生成具有约定的主密钥 密码。客户端和服务器都使用主密钥 生成会话密钥,它们是对称密钥,用于 加密和解密 SSL 会话期间交换的信息

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

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

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

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

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

【问题讨论】:

  • 通常是个坏主意。使用重复使用密钥的持续会话是不好的做法,因为您可以长时间进入连接。你在连接什么?你从哪里连接?您使用的是哪种协议?
  • 那行不通,你只能使用 SSL 会话缓存,但是如果客户端没有向你发送旧会话 ID,则必须创建一个新会话。这就是 SSL/TLS 指定的方式 - 如果您不希望这样,则不能使用 SSL/TLS。
  • 如果您只需要一个共享对称密钥,只需在客户端生成一个并通过 SSL 连接将其发送到另一端。使用 SSL 会话生成的对称密钥确实没有什么可罚款的。
  • @zaph 那不叫 https...

标签: java ssl https tomcat8 jsse


【解决方案1】:

如何获得对称密钥

你不能在 Java 中。

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

你不能在 SSL 中。

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

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

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

你不能。

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

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

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

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

【讨论】:

  • 感谢您让我知道使用 SSL 是不可能的。如果客户端不是浏览器而是封闭源程序,那么为将来的通信保存密钥是多么不安全? ;)
  • 因为对称密钥不够长,无法无限期地保证安全。您要解决的问题实际上并不存在。 SSL 会话恢复确实有效,并且允许在同一个会话中使用多个会话密钥,而无需完全重新握手。
【解决方案2】:

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

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

使用 SSL 生成的对称密钥和你自己生成的对称密钥有什么区别?

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

【讨论】:

    【解决方案3】:

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

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

    你可以得到sessionID,但是如何复用session就要交给SSL/TLS协议了。它具有自动重新协商选项,因此您可以重用会话,即使服务器已经丢弃。该协议将决定您何时可以重用或不能重用。

    https://www.rfc-editor.org/rfc/rfc5746

    【讨论】:

    • Apache HTTPD mod_ssl 环境变量与 Java 应用程序内部可用的内容没有任何关系。事实上,Apache HTTPD mod_ssl 使用 OpenSSL,它确实 使会话密钥可用。但这与问题无关。
    • mod_ssl 是一个例子,用来说明对称密钥在知名软件中不可用
    • OpenSSL 是一个示例,用于表明它在另一款知名软件中可用。所以?问题是关于 Java。
    • 好的,你是对的,因为@Nilesh 没有表示使用像apache这样的代理,重要的是要知道哪些SSL变量为java服务器提供了TOMCAT8
    • 所以它不是作为示例提供的,而是作为对 OP 配置的猜测?在任何情况下,了解 Java API 提供什么也很重要。双方都需要 OP 方案中的密钥。
    猜你喜欢
    • 2011-04-25
    • 2011-10-14
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多