解决 Curl 自签名证书验证失败的实用指南
经过这些步骤仍然不能使用自签https, 报错的问题
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
在172.16.20.21这台客户端sudo cp harbor.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extractvi /etc/host 写入 172.16.20.20 registry-1.docker.ioopenssl verify -CAfile harbor.crt harbor.crt 验证正常curl -v --cacert harbor.crt https://172.16.20.20 验证正常重置 NSSDBsudo rm -rf /etc/pki/nssdb
sudo mkdir /etc/pki/nssdb
sudo certutil -N -d sql:/etc/pki/nssdb
sudo certutil -A -d sql:/etc/pki/nssdb -n "harbor" -t "C,," -i harbor.crtcat harbor.crt harbor.key > harbor.pemcurl --cert harbor.pem https://172.16.20.20curl https://registry-1.docker.io仍然报错 curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.htmlcurl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
问题分析
根据输出信息,curl
尝试使用 /home/anaconda3/ssl/cacert.pem
作为 CA 文件,但未能验证你的自签名证书,报错 SSL certificate problem: self signed certificate
。这表明自签名证书未被信任。以下是解决方法:
问题分析
curl
默认使用的 CA 文件路径为/home/anaconda3/ssl/cacert.pem
,而不是系统默认的/etc/pki/tls/certs/ca-bundle.crt
。- 自签名证书未被包含在指定的 CA 文件中,导致验证失败。
解决步骤
1. 确认 curl
使用的 CA 文件路径
运行以下命令确认 curl
的 CA 文件路径:
curl-config --ca
如果路径仍然是 /home/anaconda3/ssl/cacert.pem
,则需要将你的自签名证书添加到该文件中。
2. 将自签名证书添加到 CA 文件
如果 harbor.crt
是你的自签名证书:
cat harbor.crt >> /home/anaconda3/ssl/cacert.pem
3. 验证更新是否生效
再次尝试使用 curl
:
curl https://registry-1.docker.io --verbose
到此步骤成功了
如果无法修改 /home/anaconda3/ssl/cacert.pem
你可以显式指定 CA 文件路径:
curl --cacert /path/to/harbor.crt https://registry-1.docker.io --verbose
4. 检查域名与证书匹配
确保证书的 CN
或 Subject Alternative Name
包含 registry-1.docker.io
。查看证书详情:
openssl x509 -in harbor.crt -text -noout
如果 CN
不匹配 registry-1.docker.io
:
- 更新证书的
CN
。 - 或者在
/etc/hosts
中将172.16.20.20
映射为registry-1.docker.io
。
5. 强制忽略 SSL 验证(仅供测试)
如果只是临时测试,可以使用以下命令忽略 SSL 验证:
curl -k https://registry-1.docker.io
通过以上步骤,可以有效解决 curl
中的自签名证书验证问题。如果问题仍然存在,请进一步提供以下信息:
harbor.crt
的证书内容(敏感信息可打码)。/home/anaconda3/ssl/cacert.pem
是否包含自签名证书。