You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK 1.8.0_371下sshj缺失加密算法提供商问题求助

问题描述

使用sshj时出现如下报错日志:

Cannot find any provider supporting CAST5/CTR/NoPadding
Cannot find any provider supporting IDEA/CTR/NoPadding
Cannot find any provider supporting Serpent/CBC/NoPadding
Cannot find any provider supporting Serpent/CTR/NoPadding
Cannot find any provider supporting Twofish/CBC/NoPadding
Cannot find any provider supporting Twofish/CTR/NoPadding
Disabling high-strength ciphers: cipher strengths apparently limited by JCE polic

当前使用JDK 1.8.0_371,根据官方说明Java 8u151及以上版本默认启用JCE无限制加密策略,但该问题仅在一台虚拟机上出现,另一台正常。

在两台虚拟机上执行以下代码打印支持的加密算法:

Set<String> algs = new TreeSet<>();
for (Provider provider : Security.getProviders()) {
    provider.getServices().stream()
            .filter(s -> "Cipher".equals(s.getType()))
            .map(Provider.Service::getAlgorithm)
            .forEach(algs::add);
}
algs.forEach(System.out::println);

得到的输出完全一致:

AES
AESWrap
AESWrap_128
AESWrap_192
AESWrap_256
AES_128/CBC/NoPadding
AES_128/CFB/NoPadding
AES_128/ECB/NoPadding
AES_128/GCM/NoPadding
AES_128/OFB/NoPadding
AES_192/CBC/NoPadding
AES_192/CFB/NoPadding
AES_192/ECB/NoPadding
AES_192/GCM/NoPadding
AES_192/OFB/NoPadding
AES_256/CBC/NoPadding
AES_256/CFB/NoPadding
AES_256/ECB/NoPadding
AES_256/GCM/NoPadding
AES_256/OFB/NoPadding
ARCFOUR
Blowfish
DES
DESede
DESedeWrap
PBEWithHmacSHA1AndAES_128
PBEWithHmacSHA1AndAES_256
PBEWithHmacSHA224AndAES_128
PBEWithHmacSHA224AndAES_256
PBEWithHmacSHA256AndAES_128
PBEWithHmacSHA256AndAES_256
PBEWithHmacSHA384AndAES_128
PBEWithHmacSHA384AndAES_256
PBEWithHmacSHA512AndAES_128
PBEWithHmacSHA512AndAES_256
PBEWithMD5AndDES
PBEWithMD5AndTripleDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_128
PBEWithSHA1AndRC2_40
PBEWithSHA1AndRC4_128
PBEWithSHA1AndRC4_40
RC2
RSA

请问遗漏了什么配置?是否是密钥存在问题?

排查方向与解决方案

针对两台机器环境一致但表现不同的情况,可从以下几个方面排查:

1. 检查JCE策略文件状态

虽然Java 8u151+默认启用无限制加密策略,但仍需确认$JAVA_HOME/jre/lib/security目录下的local_policy.jar和US_export_policy.jar是否为无限制版本。若这两个文件是旧版限制文件,会覆盖默认策略:

  • 正常无限制版本的local_policy.jar中,default_local.policy应包含grant { permission javax.crypto.CryptoPermission "*", "unlimited"; };
  • 若存在旧文件,替换为JDK安装包自带的无限制版本(通常在$JAVA_HOME/jre/lib/security/unlimited目录下)。

2. 检查java.security配置

打开$JAVA_HOME/jre/lib/security/java.security文件,查找crypto.policy配置项:

  • 确保配置为crypto.policy=unlimited,若被注释或设置为limited,会强制启用限制策略。
  • 修改后需重启应用生效。

3. 检查自定义安全配置参数

确认应用启动时是否通过-Djava.security.properties=/path/to/custom/java.security参数加载了外部安全配置文件,该配置可能覆盖默认加密策略。

4. 调整SSHJ的Cipher列表

报错中提到的CAST5、IDEA、Serpent、Twofish等算法并非JDK默认支持的加密算法,SSHJ默认会尝试这些算法。可自定义SSHJ的Cipher列表,只保留JDK支持的算法来避免报错:

SSHClient ssh = new SSHClient();
ssh.getConfig().setCipherOrder(Arrays.asList(
    "aes256-ctr", "aes192-ctr", "aes128-ctr",
    "aes256-cbc", "aes192-cbc", "aes128-cbc",
    "blowfish-cbc", "3des-cbc"
));

5. 检查文件权限

确认$JAVA_HOME/jre/lib/security目录及其下的java.security、策略文件等是否允许当前应用用户读取。权限不足会导致JVM无法加载正确的加密策略配置。

内容的提问来源于stack exchange,提问作者Jigar Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:02:41