Wget提示域名证书使用不安全算法报错,但Curl可正常访问的问题求助
您好,针对您在RHEL 9.3系统上遇到的Wget证书报错、但Curl能正常访问的问题,我整理了几个实用的排查和解决思路,您可以一步步尝试:
1. 临时宽松测试定位问题
先通过Wget的参数临时调整SSL验证规则,确认是不是算法兼容性导致的问题:
- 指定TLS版本尝试:
wget --secure-protocol=TLSv1_2 https://abc.com - 临时跳过证书检查(仅用于测试,不建议长期使用):
wget --no-check-certificate https://abc.com
如果这样能正常下载,说明确实是Wget的SSL配置或算法支持和Curl存在差异。
2. 检查系统加密策略
RHEL 9系列有系统级的加密策略配置,Wget会严格遵循系统设定,而Curl可能有独立的兼容逻辑。您可以先查看当前系统的加密策略:
update-crypto-policies --show
如果当前策略是FUTURE或STRICT,理论上Let's Encrypt的SHA-256 RSA签名算法是符合要求的,但可以临时切换到DEFAULT策略测试:
sudo update-crypto-policies --set DEFAULT
测试后如果问题解决,再考虑是否长期调整策略或针对性配置Wget。
3. 更新Wget及相关SSL库
RHEL 9.3自带的Wget或其依赖的GnuTLS库可能存在版本兼容性bug,导致误判证书算法。尝试更新相关包:
sudo dnf update wget gnutls
更新完成后重新测试Wget访问。
4. 让Wget使用OpenSSL替代GnuTLS
Curl默认使用OpenSSL,而Wget在RHEL上通常依赖GnuTLS,两者对算法的识别逻辑不同。如果您的系统中有支持OpenSSL的Wget版本,可以尝试指定SSL库:
wget --ssl-library=openssl https://abc.com
如果这个参数可用且能解决问题,您可以把--ssl-library=openssl加到Wget的配置文件~/.wgetrc或/etc/wgetrc中,让默认请求使用OpenSSL。
5. 手动指定完整证书链
有时候Wget无法自动加载完整的证书链,而Curl能自动处理。您可以下载Let's Encrypt的完整证书链(包含根证书和中间证书),然后让Wget指定使用:
wget --ca-certificate=/path/to/your/fullchain.pem https://abc.com
补充说明
Curl和Wget依赖的SSL实现不同(Curl用OpenSSL,Wget默认GnuTLS),两者对证书算法的校验逻辑、兼容范围有细微差异,这就是为什么会出现一个正常、一个报错的情况。
备注:内容来源于stack exchange,提问作者Neeraj Punmiya

