在java.security禁用MD5后Java代码仍可调用MD5算法的原因是什么?
问题原因
你添加的三个禁用算法配置仅作用于特定Java安全场景,未限制普通代码直接调用MD5哈希能力:
jdk.certpath.disabledAlgorithms:仅在证书路径校验场景生效,比如验证HTTPS证书链、签名证书有效性时,才会拒绝使用列表内的算法jdk.jar.disabledAlgorithms:仅在JAR包签名校验场景生效,JVM验证jar包签名合法性时会禁用列表内算法jdk.tls.disabledAlgorithms:仅在TLS通信协商场景生效,TLS握手时不会选择包含列表内算法的加密套件,不影响业务代码自主调用哈希算法
正确禁用全局MD5调用的方法
如果需要让MessageDigest.getInstance("MD5")直接抛出异常禁用普通调用,需要配置jdk.security.disabledAlgorithms参数:
注意:该参数从JDK 8u261、JDK 11及以上版本开始支持
- 永久生效:在
$JAVA_HOME/lib/security/java.security文件中添加如下配置:
jdk.security.disabledAlgorithms=MD5
- 临时生效:启动Java程序时添加JVM参数即可:
java -Djdk.security.disabledAlgorithms=MD5 MD5
配置完成后运行测试代码就会抛出NoSuchAlgorithmException异常,符合禁用预期。
内容的提问来源于stack exchange,提问作者Ashutosh gupta
相关产品推荐
相关产品推荐

