安装cocoapods时SSL验证错误

bao*_* le 3 ruby ssl cocoapods

我做了什么 sudo gem install cocoapods

这是来自终端的完整消息

ERROR:  You must add /C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2 to your local trusted store
ERROR:  Could not find a valid gem 'cocoapods' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - hostname "rubygems.org" does not match the server certificate (https://rubygems.org/specs.4.8.gz)
ERROR:  SSL verification error at depth 0: unable to get local issuer certificate (20)
Run Code Online (Sandbox Code Playgroud)

我没有使用 SSL 的经验,但我关注了几个与我类似的问题,但没有运气

我试过的:

  • 下载并安装新的 SHA256 中间证书
  • 将主机名从 https 更改为 http
  • 遵循本指南但无法将 GlobalSignRootCA.pem 复制到 ruby​​ 文件夹
  • 使用 HomeBrew 但在安装时出现另一个错误

mpe*_*tis 6

MichaelHuelsen 有正确的答案。在这里,我将给出对我有用的分步说明,但会用一个大文件覆盖 pem 文件,所以请注意,如果其中包含您可能不想销毁的敏感信息。

  1. 标识证书文件。
$ ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
"/etc/pki/tls/cert.pem"
Run Code Online (Sandbox Code Playgroud)

告诉我我的证书文件在哪里。

  1. 备份证书文件
cp /etc/pki/tls/cert.pem /tmp/cert.pem.bak
Run Code Online (Sandbox Code Playgroud)
  1. 通过 curl 复制完整的证书文件

请参阅:https : //curl.se/docs/caextract.html

curl --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)
  1. 移动新的 cacert.pem 文件以替换旧文件
mv cacert.pem /etc/pki/tls/cert.pem
Run Code Online (Sandbox Code Playgroud)

然后我跑去gem update --system更新东西,但你可能可以运行你的原始gem命令。


Mic*_*sen 5

我还建议仔细阅读错误消息。当然,Ruby 证书存储中的默认根 CA 通常会缺少证书链中的重要证书。例如,如果您位于(公司)代理后面。

由于 Ruby 依赖 openssl,因此您需要找出您的证书文件所在的位置。

ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
Run Code Online (Sandbox Code Playgroud)

它输出 ruby​​ 和 gem 正在使用的文件,在我的例子中,在带有 Ruby 3.0 的 Windows 10 下,它看起来类似于:

"C:/Your_Local_Ruby_Install_Path/Ruby30-x64/ssl/cert.pem"
Run Code Online (Sandbox Code Playgroud)

cert.pem 是一个包含证书信息的纯文本文件。您需要下载并提供缺少的证书并将其添加到 cert.pem 文件中。

之后您就可以使用gem install your_package先前丢失的证书而不会出现 SSL 问题。


小智 2

解决问题

从https://rubygems.org/pages/download下载(Windows 为 ZIP)

解压到一个目录并 cd 在那里安装:ruby setup.rb(您可能需要 admin/root 权限)

它为我解决了