同时设置HTTPS_PROXY与SSL_CERT_FILE环境变量时后者不生效问题咨询
问题诱因
curl的SSL_CERT_FILE环境变量设计初衷是用于验证目标访问站点的SSL证书,而非验证HTTPS代理服务器自身的证书。你配置的代理地址是https://10.0.4.11:8888,属于HTTPS类型代理,curl需要先和代理服务器建立HTTPS连接,这一步的证书校验逻辑和目标站点的证书校验是完全隔离的,默认不会读取SSL_CERT_FILE的配置,所以才会出现场景2、3里配置了SSL_CERT_FILE但代理证书校验失败的问题。
解决方法
- 方法1:使用curl专属的代理CA证书环境变量
curl 7.77.0及以上版本原生支持CURL_PROXY_CAINFO环境变量,专门用于指定HTTPS代理的CA证书路径,配置后即可生效:export CURL_PROXY_CAINFO=./myCA2.pem - 方法2:将自签名证书导入系统受信任根证书库
把myCA2.pem添加到操作系统的全局受信任CA证书列表中,所有应用(包括curl)都会自动信任该CA签发的证书,无需额外配置:- Debian/Ubuntu系列:将证书文件复制到
/usr/local/share/ca-certificates/目录,执行sudo update-ca-certificates - CentOS/RHEL系列:将证书文件复制到
/etc/pki/ca-trust/source/anchors/目录,执行sudo update-ca-trust extract
- Debian/Ubuntu系列:将证书文件复制到
- 方法3:请求时手动指定代理证书参数
临时使用的场景下,每次执行curl时携带--proxy-cacert ./myCA2.pem参数即可,和场景1的操作一致。 - 方法4:配置curl别名简化操作
常用场景下可以给curl设置全局别名,自动携带代理证书参数,将以下配置添加到~/.bashrc或~/.zshrc中即可永久生效:alias curl='curl --proxy-cacert ./myCA2.pem'
内容的提问来源于stack exchange,提问作者Jackie Wang
相关产品推荐
相关产品推荐

