基于WebScarab Jar的代理拦截HTTPS请求时遇MD2withRSA算法约束错误
解决WebScarab代理的SSLHandshakeException(MD2withRSA算法约束问题)
这个问题我之前帮同行排查过,核心原因是JDK默认禁用了MD2这种弱签名算法,而WebScarab生成的代理证书恰好使用了MD2withRSA签名,触发了JDK的安全校验机制,导致握手失败。下面给你两种可行的解决办法:
方法一:临时修改JDK的安全配置(快速解决)
JDK从7u40版本开始,就把MD2算法加入了禁用列表。你需要修改JDK的安全配置文件来解除对MD2的限制:
- 找到你的JDK安装目录:
- 对于JDK 8及以下:路径是
{JDK_HOME}/jre/lib/security/java.security - 对于JDK 9+:路径是
{JDK_HOME}/conf/security/java.security
- 对于JDK 8及以下:路径是
- 打开文件,找到
jdk.certpath.disabledAlgorithms这一行,把其中的MD2或者MD2withRSA从禁用列表中移除。比如:
原配置可能是:
修改后:jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024jdk.certpath.disabledAlgorithms=MD5, RSA keySize < 1024 - 保存文件后,重启WebScarab,再访问HTTPS URL应该就能正常拦截了。
⚠️ 注意:这种方法会降低JDK的安全级别,只是临时解决方案,测试完成后建议改回原配置。
方法二:调整WebScarab的证书签名算法(更安全)
如果WebScarab支持自定义证书签名算法,优先用这个方法:
- 打开WebScarab的设置界面,找到「证书生成」相关的配置项
- 将签名算法从
MD2withRSA改为更安全的算法,比如SHA256withRSA或者SHA1withRSA(SHA1现在也不算最安全,但比MD2强很多) - 重新生成WebScarab的代理证书,然后配置浏览器信任这个新证书,再尝试拦截请求
至于为什么不用WebScarab时请求正常?因为目标网站的证书用的是符合JDK安全要求的签名算法(比如SHA256withRSA),只有WebScarab生成的中间证书用了被禁用的MD2算法,才会触发这个错误。
内容的提问来源于stack exchange,提问作者Yaazhini Ravichandran
相关产品推荐
相关产品推荐

