首页 > 解决方案 > 32 位 Linux 的 Java 8 Diffie Hellman 密钥大小问题

问题描述

在旧的 32 位 linux 系统上将我们的 java 从 1.7 升级到 1.8 后,我们在与 web 服务通信时收到以下错误消息:

原因:java.security.InvalidAlgorithmParameterException:DH 密钥大小必须是 64 的倍数,并且只能从 512 到 2048(含)。不支持特定的密钥大小 4096

linux发行版是:

unname -a

Linux XXX-XXX-S018 2.6.16.21-0.8-default #1 Mon Jul 3 18:25:39 UTC 2006 i686 i686 i386 GNU/Linux

分布:

猫 /etc/*释放

LSB_VERSION="core-2.0-noarch:core-3.0-noarch:core-2.0-ia32:core-3.0-ia32" SUSE Linux Enterprise Server 10 (i586) 版本 = 10

我们使用的 Java 版本(32 位和 64 位相同的版本)

Java版本:

jdk1.8.0_151

奇怪的是,在降级到 java 1.7 后它可以正常工作。

同样的应用程序在不同的 64 位系统(使用 java 1.8)上运行 - 所以我们假设这可能是 os 体系结构(32 位)、操作系统的年龄(在这种情况下是 2006 年)和 java.util.

我们发现了一些关于最大长度为 2048 的开放 JDK 的错误报告——但我们目前使用的是 oracle 的常规 JDK​​。

谢谢你的帮助,

豪克

标签: javalinuxencryptiondiffie-hellman

解决方案


请阅读https://www.oracle.com/technetwork/java/javase/8u151-relnotes-3850493.html

在 Oracle JRE 8u151 中,您将找到java.security文件并将crypto.policy设置为'unlimited'.

我假设您的 JRE7 已经安装了 Unlimited JRE 强度策略

较新的版本(8u161,..)默认启用无限强度。

请注意,Oracle JRE 8u151 在解码 gzip 流方面存在严重问题。与 Tomcat 等 Web/应用程序服务器一起使用时,.. 您必须禁用流压缩或升级到更高一点的https://bugs.java.com/view_bug.do?bug_id=JDK-8189789


推荐阅读