如何强制使用Diffie Hellman密钥交换

时间:2013-02-07 17:21:17

标签: java ssl diffie-hellman

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

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

我该怎么办?

1 个答案:

答案 0 :(得分:3)

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

您可以使用setEnabledCipherSuitesSSLSocket(或SSLEngine)上设置密码套件。

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

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

_DH_RSA__DH_DSA_密码套件还使用RSA或DSA来验证DH密钥交换(不是密钥交换本身),以防止MITM攻击。此外, Ephemeral DH密码套件(包含_DHE__ECDHE_的椭圆曲线变体)提供完美前向保密。 (无论如何,Sun JSSE提供商都不支持非短暂的_DH_RSA__DH_DSA_密码套件。)