Ubuntu下wget报Unable to locally verify the issuer‘s authority错误

本文指导如何使用wget和perl下载并创建SSL证书bundle,将其存储在~/.ssl/,并将ca_bundle.crt添加到wgetrc和CURL环境变量中,确保跨平台的HTTPS请求支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

wget --no-check-certificate https://github.com/curl/curl/raw/master/lib/mk-ca-bundle.pl

perl mk-ca-bundle.pl

mkdir ~/.ssl/ 

mv ca-bundle.crt ~/.ssl

echo "ca_certificate = ~/.ssl/ca-bundle.crt" >> ~/.wgetrc

也可以增加到Curl环境变量里面,永久生效放到.bashrc或者  .profile

将他设置到CURL的环境变量 CURL_CA_BUNDLE 即:
export CURL_CA_BUNDLE = ~/.ssl/ca-bundle.crt

<think>好的,我现在需要解决用户遇到的OpenSSL验证错误verify error:num=20:unable to get local issuer certificate。这个问题通常和SSL证书链不完整或系统未正确配置信任链有关。用户希望配置正确的信任链来解决这个问题。 首先,我应该回忆一下用户提供的引用内容,特别是引用[1]、[4]和[5],其中提到了CA证书路径的设置和下载特定根证书的必要性。根据引用[1],指定正确的CApath可以解决问题,例如使用-openssl -CApath /etc/ssl/certs/。而引用[4]提到需要安装Entrust Secure CA根证书,这可能在某些情况下需要手动下载。引用[5]则提到忽略证书验证(虽然不推荐),但用户更希望正确配置而不是绕过验证。 接下来,我需要考虑常见的解决方案步骤。第一步通常是检查证书链是否完整。用户可以使用OpenSSL的s_client命令,如引用[2]中的-showcerts选项,查看服务器返回的证书链是否包含所有中间证书和根证书。如果链不完整,服务器配置需要修复,确保发送完整的链。 第二步是更新系统的CA证书包。很多Linux发行版通过ca-certificates包管理根证书,更新这个包可能解决问题。例如,在Ubuntu/Debian上使用sudo apt update && sudo apt install --reinstall ca-certificates,CentOS/RHEL则是sudo yum update ca-certificates。 第三步是手动指定CA路径或文件。如果系统证书路径不正确,可以通过OpenSSL的-CApath参数指定目录,或-CAfile指定具体的证书文件。例如,引用[1]中的例子使用-CApath指向/etc/ssl/certs/,这可能包含正确的证书。 第四步,如果问题特定于某个CA(如Entrust),可能需要手动下载并添加其根证书。引用[4]提到从Entrust网站下载根证书,并配置到系统中。用户需要访问相关网站下载证书,然后将其添加到系统的CA存储中,或者使用-CAfile参数指定。 第五步是检查OpenSSL的配置文件openssl.cnf,确认[CA_default]和[ssl_section]中的路径是否正确。默认路径通常是/etc/ssl/。 此外,可能还需要验证证书链的正确性。使用openssl verify -CAfile命令来检查证书链是否完整。如果中间证书缺失,需要获取并添加到证书文件中。 最后,如果是开发或测试环境,可以考虑暂时关闭验证(虽然不安全),如引用[5]提到的使用-k或设置SSL_VERIFYPEER为False,但这只是临时解决方案,不推荐生产环境使用。 总结解决步骤应该是:1. 检查证书链完整性;2. 更新系统CA证书;3. 指定正确的CA路径或文件;4. 手动添加缺失的根证书;5. 验证配置是否正确。同时需要根据具体情况调整,比如服务器配置是否正确发送完整链,或者客户端是否正确信任根证书。</think>### SSL证书验证错误解决方案 遇到OpenSSL的`verify error:num=20`错误时,表明系统无法找到证书颁发者(根证书或中间证书)。以下是分步解决方法: --- #### 1. 确认证书链完整性 - **检查服务器证书链** 使用以下命令查看服务器返回的证书链是否完整: $$ openssl s_client -connect example.com:443 -showcerts $$ 若输出仅包含终端证书而缺少中间证书或根证书,需重新配置服务器证书链[^2]。 - **手动验证证书链** 将证书链文件(包含终端证书、中间证书、根证书)合并后验证: $$ openssl verify -CAfile full_chain.pem your_certificate.crt $$ --- #### 2. 更新系统根证书 - **Linux系统** 更新`ca-certificates`包以获取最新根证书: ```bash # Debian/Ubuntu sudo apt update && sudo apt install --reinstall ca-certificates # CentOS/RHEL sudo yum update ca-certificates ``` 完成后,证书默认路径为`/etc/ssl/certs/`[^1]。 - **手动添加缺失根证书** 若问题涉及特定CA(如Entrust),需从官网下载根证书: ```bash # 示例:下载Entrust根证书 wget https://www.entrust.net/downloads/root_request.cfm -O entrust_root.crt # 合并到系统证书目录 sudo cp entrust_root.crt /etc/ssl/certs/ && sudo update-ca-certificates ``` 参考[^4]中提到的Entrust根证书案例。 --- #### 3. 指定证书路径 - **使用`-CApath`或`-CAfile`参数** 在OpenSSL命令中显式指定证书路径或文件: ```bash openssl s_client -connect example.com:443 -CApath /etc/ssl/certs/ openssl s_client -connect example.com:443 -CAfile /path/to/ca_bundle.crt ``` 若路径正确,可绕过系统默认配置的限制[^1][^5]。 --- #### 4. 检查OpenSSL配置 - **修改`openssl.cnf`文件** 确保配置文件中的证书路径正确(通常位于`/etc/ssl/openssl.cnf`): ```ini [CA_default] dir = /etc/ssl/certs [ssl_section] CipherString = DEFAULT@SECLEVEL=2 ``` 修改后重启相关服务。 --- #### 5. 临时绕过验证(不推荐) - **开发/测试环境** 使用`-k`或`-noverify`跳过验证(仅限调试): ```bash curl -k https://example.com openssl s_client -connect example.com:443 -no_verify ``` 参考[^5]中关于忽略验证的说明。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值