我想创建一个TLS套接字连接。我知道TLS有几种交换密钥的方法,例如。 RSA,Diffie-Hellman等。我如何强制使用Diffie-Hellman密钥交换而不是其他形式的密钥交换?如何强制使用Diffie Hellman密钥交换
我知道如果使用Diffie-Hellman密钥交换,它很容易受到中间人攻击。使用RSA时,我们有防止MITM的服务器认证。但我担心的一个问题是,使用RSA禁止前向保密。
我该怎么办?
我想创建一个TLS套接字连接。我知道TLS有几种交换密钥的方法,例如。 RSA,Diffie-Hellman等。我如何强制使用Diffie-Hellman密钥交换而不是其他形式的密钥交换?如何强制使用Diffie Hellman密钥交换
我知道如果使用Diffie-Hellman密钥交换,它很容易受到中间人攻击。使用RSA时,我们有防止MITM的服务器认证。但我担心的一个问题是,使用RSA禁止前向保密。
我该怎么办?
指定密钥交换方法是通过选择一个支持该密钥交换方法的密码套件来完成的。
您可以使用setEnabledCipherSuites
的SSLSocket
(或SSLEngine
)上的密码套件。
在SunJSSE provider documentation中提供了支持的密码套件表以及默认情况下使用Oracle JRE启用的表。
匿名密码套件(_DH_anon_
)是易受MITM攻击的套件。
_DH_RSA_
或_DH_DSA_
密码套件也使用RSA或DSA来验证DH密钥交换(不是用于密钥交换本身),以防止MITM攻击。另外,对于椭圆曲线变体,DH密码套件(包含_DHE_
或_ECDHE_
的那些)提供了完全向前保密。 (非短暂_DH_RSA_
或_DH_DSA_
密码套件不被太阳JSSE提供支持反正)
看看这个:http://stackoverflow.com/questions/12846017/java-ssl-tls-with-anonymous- diffie-hellman –
你“知道”是错误的。 Ephemeral Diffie-Hellman密码套件*可以*认证服务器,防止MITM攻击,同时提供前向保密。 – erickson