java - 如何强制使用 Diffie Hellman Key Exchange

标签 java ssl diffie-hellman

<分区>


想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。

关闭 10 年前

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

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

我该怎么办?

最佳答案

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

您可以使用 setEnabledCipherSuitesSSLSocket(或 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/

上一篇:用于显示 ssl 证书的 perl 脚本

下一篇:java - 如何在我的应用程序中添加 SSL?

相关文章:

java - 在日期文本字段上单击打开日期选择器

java - JWT token 到期时间在生成的 token 中被修剪

通过 SSL https 连接的 Laravel IO Socket 和 redis

javax.net.ssl.SSLHandshakeException :PKIX path building failed: sun. security.provider.certpath.SunCertPathBuilderException:

ssl - 用于 secret key 分发的公钥密码学与 Diffie–Hellman

ssl - 实现 Diffie-Hellman key 交换时预主 key 不匹配

java - ArithmeticException 偶尔被零除

java - 从 Java URL 中提取文件名(文件 : and http/https protocol)?

ssl - 使用 Play WS 获取 SSL 证书结束日期

c++ - 将公钥与 Crypto++ 的 ECDH 类配合使用