- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试重现 Java: Why does SSL handshake give 'Could not generate DH keypair' exception? 中提出的问题.
我有一个日志显示异常原因:
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1844)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1827)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1753)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:127)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:94)
... 27 more
Caused by: java.lang.RuntimeException: Could not generate DH keypair
at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:136)
at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:621)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:205)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
... 30 more
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DHKeyPairGenerator.java:120)
at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:658)
at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:127)
... 38 more
我正在使用 Axis2 调用 Web 服务。我在 jre/lib/security 中也有“Java 加密扩展 (JCE) 无限强度管辖策略文件”(但正如其他帖子中提到的那样,这对他们不起作用)。
为了重现此问题,我尝试在具有类似环境(也使用 Axis2)的单独部署中托管 Web 服务。这有一个自定义的 SSLServerSocketFactory,它正在创建和配置 SSLServerSocket。
使用 Wireshark(以及 javax.net.debug JVM 参数)我可以看到协商的密码套件是 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 但 ServerKeyExchange 中的 Prime DH 服务器参数只有 96 字节(768 位)。
有什么方法可以将 SSLServerSocket 配置为在握手期间使用更大的素数?
我猜 key 是由 JRE 的 RSA 安全提供程序生成的。我是否需要添加自己的提供程序并将其添加到 jre/lib/security/java.security?
抱歉,如果这是一个愚蠢的问题,我一般是 DHE 和密码套件的新手。我只需要知道足够多的知识就可以让服务器测试正常工作(我不涉及客户端实现)。
最佳答案
因此,在 EJP 向正确方向的插入下,我最终成功地找到了确定强度(以及随后的 DH 参数)的确切位置。它确实在 JRE 中(特别是在 ServerHandshaker 中)。
将安全提供程序与具有强度限制(如原始帖子中所述)的旧 JRE 一起使用在这里不起作用。虽然使用其他安全提供程序可能会在客户端防止此错误,但在初始化 KeyPairGenerator 的实现之前已经确定了强度。
作为旁注,我没有费心升级 JRE 来重现这一点。我刚刚添加了带有调试信息的 BouncyCaSTLe JCE 提供程序,在 org.bouncycaSTLe.jcajce.provider.asymmetric.dh.KeyPairGeneratorSpi.initialize(int, SecureRandom) 方法中放置了一个断点并手动更改了强度。这对我的测试来说已经足够好了。
关于java - 有什么方法可以使用 javax.net.ssl.SSLServerSocket 指定 Diffie-Hellman 素数的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29483924/
我目前正在尝试将我的守护进程从一个常规的未加密的守护进程更改为使用 SSL 的守护进程。 我正在按照以下方式执行此操作: System.setProperty("javax.net.ssl.keySt
我使用 ServerSocket 和 Socket 对象编写了一个客户端/服务器 Java 程序。然后,我修改了代码以使用 SSLServerSocket 和“SSLSocket”,但是我抛出了不同的
我来自“C”背景。我正在尝试分析如何编写 Java SSL 服务器。 到目前为止,我发现的示例都是关于加载证书和私有(private) keystore 以及以编程方式将 KeyStore 关联到 S
我使用的是用 Java 编写的 Apache Thrift 服务器。当我创建 ServerSocket 时,我传递了一个名为 clientTimeout 的参数,其值为 60000(十分钟)。但这并不
我正在编写一个 POP3 服务器来提供不是电子邮件的通知,而是数据库中的内容。我让它工作,但是当我尝试从服务器套接字切换到 SSLServerSocket 时,出现错误“javax.net.ssl.S
我正在尝试打开带有自定义 keystore /信任库且仅启用 TLSv1.2 的 SSLServerSocket。这是我打开此类套接字的相关代码: SSLContext sslContext = nu
我有一个 Java SSL 服务器应用程序,我能够使用自签名证书和 key 对与其客户端通信。这是在我的开发机器上完成的。 现在,是时候在实时服务器上启动应用程序了,我已经从权威机构 (LE) 获得了
我已经打开了一个 SSLServerSocket,它是从一个加载了信任库和 keystore 的 SSLContext 对象创建的。除此之外,我还有一个单独的编辑器程序来编辑 keystore ,即添
这是我第一次接触 SSLSockets, 我创建了 SSLServerSocket 和 SSLSocket , ServerSocket 运行正常,但是当尝试运行 SSLSocket (Client)
这个问题在这里已经有了答案: Java SSL sockets without authentication or stores? (3 个答案) 关闭 5 年前。
我有一个使用 Java 中的 SSLSockets 的客户端/服务器架构。我收到握手异常。我使用调试选项从终端执行客户端应用程序和服务器应用程序以捕获 SSL 问题。我在下面放了浓缩版。 java -
背景 我正在开发一个提供简单 HTTP/HTTPS 服务器的 Android 应用程序。如果配置了 HTTPS 服务,那么在每个连接上都会观察到 native 内存使用量增加,最终导致应用程序崩溃 (
正在关注 Let's Encrypt's instructions关于如何创建用于测试目的的本地证书,我已将其制作成具有 certificate.crt 和 certificate.key 文件。现在
我正在使用 Java 中的 SSLServerSocket 类设置安全套接字连接,然后使用 objective-c 中的 Stream 类(CF 和 NS)。我已经使用以下代码进行了设置: Java
我正在尝试重现 Java: Why does SSL handshake give 'Could not generate DH keypair' exception? 中提出的问题. 我有一个日志显
我是一名优秀的程序员,十分优秀!