0

我想创建一个 TLS 套接字连接。我知道 TLS 有几种方法可以交换密钥,例如。RSA、Diffie-Hellman 等。如何强制使用 Diffie-Hellman 密钥交换而不是其他形式的密钥交换?

我知道如果使用 Diffie-Hellman 密钥交换,它很容易受到中间人攻击。使用 RSA 时,我们有防止 MITM 的服务器身份验证。但我担心的一个问题是使用 RSA 会禁止前向保密。

我该怎么办?

4

1 回答 1

3

通过选择支持该密钥交换方法的密码套件来指定密钥交换方法。

SSLSocket您可以在(或SSLEngine)上使用密码套件setEnabledCipherSuites

SunJSSE 提供者文档中提供了支持的密码套件表以及默认情况下使用 Oracle JRE 启用的密码套件表。

匿名密码套件 ( _DH_anon_) 是容易受到 MITM 攻击的密码套件。

或密码套件还使用 RSA_DH_RSA__DH_DSA_DSA 来验证 DH 密钥交换(而不是密钥交换本身),以防止 MITM 攻击。此外,Ephemeral DH 密码套件(包含_DHE__ECDHE_用于椭圆曲线变体的那些)提供完美前向保密。(无论如何,Sun JSSE 提供程序都不支持非临时_DH_RSA_或密码套件。)_DH_DSA_

于 2013-02-07T19:47:00.807 回答