Linux下bundle install遇SSL证书验证失败,如何指定OpenSSL版本?
解决Bundler SSL证书验证失败问题
能否在bundle install时指定OpenSSL版本?
不能直接在bundle install命令中指定OpenSSL版本,但可以通过确保Ruby解释器基于目标OpenSSL版本编译,让Bundler间接使用该版本的OpenSSL。你给出的RVM安装命令就是正确的实现方式:
rvm install 2.7.6 --with-openssl-dir=$HOME/.rvm/usr --autolibs=disable
执行该命令后,Ruby会绑定指定路径下的OpenSSL库,后续bundle install会自动使用这个版本的OpenSSL完成SSL验证流程。
解决Bundler::Fetcher::CertificateFailureError的具体方法
1. 确认当前Ruby绑定的OpenSSL版本
先检查Ruby正在使用的OpenSSL版本是否符合需求:
ruby -r openssl -e 'puts OpenSSL::OPENSSL_VERSION'
若版本过低或不是预期版本,重新用RVM编译Ruby(使用你提供的指定OpenSSL路径的命令)。
2. 修复系统CA证书
多数SSL验证失败源于系统缺少必要的根CA证书:
- Debian/Ubuntu系统:
sudo apt update && sudo apt install ca-certificates sudo update-ca-certificates - RHEL/CentOS系统:
sudo yum install ca-certificates sudo update-ca-trust
3. 为Bundler指定CA证书路径
如果系统证书仍无法完成验证,可以手动指定Bundler使用的CA证书文件或目录:
# 指定证书文件 export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt # 或者指定证书目录 export SSL_CERT_DIR=/etc/ssl/certs # 执行bundle install bundle install --jobs=$(nproc) --retry=5
4. 手动信任目标源的证书
如果仅https://enterprise.contribsys.com/的证书无法被验证,可手动导出并信任该证书:
- 导出网站证书:
openssl s_client -connect enterprise.contribsys.com:443 -showcerts < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > contribsys.crt - 将证书添加到系统信任库:
- Debian/Ubuntu:
sudo cp contribsys.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - RHEL/CentOS:
sudo cp contribsys.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust
- Debian/Ubuntu:
5. 临时绕过SSL验证(不推荐)
如果以上方法均无效,且处于紧急测试场景,可临时关闭SSL验证(存在安全风险,仅用于临时排查):
BUNDLE_SSL_VERIFY=false bundle install --jobs=$(nproc) --retry=5
内容的提问来源于stack exchange,提问作者htamayo
相关产品推荐
相关产品推荐

