咨询IBM WebSphere Liberty 23.0.0.6启用SHA-1签名JAR的替代方案
解决IBM WebSphere Liberty 23.0.0.6中启用SHA-1签名JAR的问题
针对你遇到的Oracle Java变通方案在IBM WebSphere Liberty内置JDK中无效的问题,以下是适配Liberty环境的解决步骤:
1. 修改IBM JDK的安全配置
IBM JDK的安全属性逻辑与Oracle JDK基本一致,但需要定位到Liberty内置JDK的配置文件:
- 找到Liberty安装目录下内置JDK的
java.security文件,路径通常为:[Liberty根目录]/java/jre/lib/security/java.security - 编辑该文件,调整两个关键安全属性:
- 从
jdk.certpath.disabledAlgorithms中移除SHA1 usage SignedJAR & denyAfter 2019-01-01 - 从
jdk.jar.disabledAlgorithms中移除SHA1 denyAfter 2019-01-01
- 从
- 若不想修改全局JDK配置,可通过系统属性覆盖:创建自定义安全配置文件(比如
custom.security),写入上述修改后的属性,然后在Liberty的server.env文件中添加:JAVA_OPTS=-Djava.security.properties=/path/to/your/custom.security
2. 配置Liberty服务器的JCE提供者与信任存储
Liberty的安全框架会额外校验JCE提供者,需要补充以下配置:
2.1 启用JCA特性并注册JsafeJCE提供者
编辑服务器的server.xml,添加或更新配置:
<featureManager> <feature>jca-1.7</feature> <!-- JCE依赖JCA特性,确保启用 --> </featureManager> <!-- 注册JsafeJCE提供者 --> <jceProvider id="JsafeJCE" providerClass="com.rsa.jsafe.provider.JsafeJCE" providerName="JsafeJCE"/>
2.2 将cryptoj.jar的签名证书加入信任存储
异常提示cryptoj.jar未被可信签名者签名,需要把它的签名证书导入Liberty的信任存储:
- 导出签名证书:执行以下命令获取并导出证书
keytool -printcert -jarfile /Lava/wlp/usr/servers/g7al85901f51.ihy.broadcom.net/apps/expanded/affwebservices.war/WEB-INF/lib/cryptoj.jar > cryptoj-cert.cer - 导入到Liberty信任存储(默认路径为
[服务器目录]/resources/security/truststore.p12):keytool -importcert -alias cryptoj-signer -file cryptoj-cert.cer -keystore /path/to/your/server/resources/security/truststore.p12 -storetype PKCS12 - 在
server.xml中确保信任存储配置正确:<keyStore id="defaultTrustStore" location="${server.config.dir}/resources/security/truststore.p12" type="PKCS12" password="your-truststore-password"/>
3. 验证配置
重启Liberty服务器,检查应用启动日志,确认不再出现java.lang.SecurityException: JCE cannot authenticate the provider JsafeJCE和java.util.jar.JarException相关异常。
重要注意事项
- 启用SHA-1签名JAR存在明确的安全风险,此方案仅作为临时兼容手段,建议尽快替换为使用SHA-256及以上哈希算法签名的JAR包。
- 修改全局JDK配置会影响所有使用该JDK的Liberty实例,若需单独配置某台服务器,优先使用
java.security.properties系统属性的方式。
内容的提问来源于stack exchange,提问作者Veera Lava Kumar Reddy Bandi
相关产品推荐
相关产品推荐

