<分区>
我想创建一个 TLS 套接字连接。我知道 TLS 有几种交换 key 的方法,例如。 RSA、Diffie-Hellman 等。如何强制使用 Diffie-Hellman key 交换而不是其他形式的 key 交换?
我知道如果使用 Diffie-Hellman key 交换,它很容易受到中间人攻击。使用 RSA 时,我们有防止 MITM 的服务器身份验证。但我担心的一个问题是使用 RSA 会禁止前向保密。
我该怎么办?
最佳答案
通过选择支持该 key 交换方法的密码套件来指定 key 交换方法。
您可以使用 setEnabledCipherSuites
在 SSLSocket
(或 SSLEngine
)上使用密码套件.
受支持的密码套件表和 Oracle JRE 默认启用的密码套件表可在 SunJSSE provider documentation 中找到。 .
匿名密码套件 (_DH_anon_
) 是容易受到 MITM 攻击的密码套件。
_DH_RSA_
或 _DH_DSA_
密码套件也使用 RSA 或 DSA 来验证 DH key 交换(而不是 key 交换本身),以防止 MITM 攻击。此外,Ephemeral DH 密码套件(包含 _DHE_
或 _ECDHE_
的椭圆曲线变体)提供完美前向保密。 (无论如何,Sun JSSE 提供程序都不支持非临时性 _DH_RSA_
或 _DH_DSA_
密码套件。)
关于java - 如何强制使用 Diffie Hellman Key Exchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757108/