gpt4 book ai didi

java - 如何解决 java 6 ssl 错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:22 26 4
gpt4 key购买 nike

我被困在 Java 6 环境中。我无法修改 JRE 配置。我正在尝试访问这样的特定服务:new RestTemplate().postForObject("https://someService.com","hello", String.class);

我收到此错误 java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024

可能是因为服务提供的参数大于 1024。我该如何解决这个问题?

我无法控制我尝试访问的服务。我不能接受基于服务器的解决方案。

最佳答案

一些选项,取决于您未指定的一些细节:

  • 如果您可以更改客户端上的代码,并且服务器接受纯 RSA key 交换,即不接受 DHE 或 ECDHE,因此没有当今许多人要求的前向保密性,请更改客户端以禁用名称为包含 _DHE_ 。 (为了安全起见,也禁用 _DH_ 静态套件,尽管几乎没有人使用它们,而且您的服务器也不太可能使用它们。)

    如果 RestTemplate(或它调用您控制的东西)直接创建 SSL 套接字并对其执行 HTTP,在创建时调用 .getEnabledCipherSuites() 以获取当前数组,创建一个新数组,排除不需要的项目,然后 .setEnabledCipherSuites()

    如果它在 https: URL 上使用 URLConnection,创建一个 SSLSocketFactory 来包装标准的并将(创建的)套接字修改为上面,并使该工厂成为 HttpsURLConnection 的默认工厂。

    如果它使用其他东西,比如 Apache httpclient,可能有等效的技术或设置,但我不知道。

  • 如果您可以在客户端更改代码并添加库,并且服务器接受 ECDHE key 交换,请从 https://www.bouncycastle.org 获取 bcprov jar并将它放在类路径中的某个位置,并在应用程序的开头执行 java.security.Security.addProvider ( new org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider () )。这是有效的,因为 Java6 JSSE 支持 ECHDE 密码套件如果有 ECC 原语的提供者,而 Java6 不包括; Java7 为此添加了 SunEC。 BC 提供了一大堆您通常不需要的东西,但其中包括 ECC 原语。

  • 如果服务器接受 HTTP-no-S 并且您不介意,请使用 http:。您可能仍然可以通过 SSH 隧道或 VPN 等方式来确保传输安全,具体取决于服务器。

  • 如果您需要 HTTPS 并且可以在客户端(或通过物理上安全的 LAN 连接的机器)安装软件,请从 https://www.stunnel.org 安装 stunnel并将其配置为监听您选择的本地端口,并使用 SSL 连接到真实的服务器名称/地址和端口,并让您的(真实的)客户端将 http-no-s 连接到 localhost 或 vernearhost 上的 stunnel 端口。 Stunnel 然后将此 HTTP 包装在 SSL/TLS 中,使其成为 HTTPS。

请注意,前两个选项绕过 Java6(和 7,在 8 中修复)对整数 Diffie-Hellman key 交换的限制,但它们不会将 Java6 限制更改为 TLSv1.0 协议(protocol)。使用超过 1024 位整数 DH 参数的服务器可能是因为它受到严格的安全要求(这可能是必要的,也可能不是必要的,但如果你不控制服务,你就无法决定),许多这样的安全要求今天阻碍了 TLSv1.0,并且很可能很快就会禁止它,在这种情况下,Java6 就完全不走运了。而如果有安全需求,选项3也未必可以接受,只剩下4(stunnel)。

关于java - 如何解决 java 6 ssl 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com