安装cocopod时SSL验证错误

kse8i1jr  于 2023-01-21  发布在  其他
关注(0)|答案(7)|浏览(806)

我所做的
这是来自终端的完整消息

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)

我没有SSL的经验,但我遵循了一对夫妇的问题类似于我的,但没有运气
我尝试过的:

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

mv1qrgav1#

MichaelHuelsen有正确的答案。在这里我将给出我的一步一步的指示,为我工作,但覆盖pem文件与一个大的,所以要小心,如果这有敏感信息,你可能不想破坏。
1.标识证书文件。

$ ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
"/etc/pki/tls/cert.pem"

告诉我证书文件在哪里。
1.备份证书文件

cp /etc/pki/tls/cert.pem /tmp/cert.pem.bak

1.通过curl复制完整的证书文件
参见:https://curl.se/docs/caextract.html

curl --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem

1.移动新的cacert.pem文件以替换旧文件

mv cacert.pem /etc/pki/tls/cert.pem

然后,我运行gem update --system来更新内容,但是您运行原来的gem命令可能就可以了。

6xfqseft

6xfqseft2#

我还建议仔细阅读错误消息。通常,Ruby证书库中的默认根CA(当然)会丢失证书链中的重要证书。例如,如果您位于(公司)代理之后。
由于Ruby依赖于openssl,因此需要找到cert文件的位置。

ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'

它输出ruby和gem正在使用的文件,在我使用Ruby 3.0的Windows 10的情况下,它看起来类似于以下内容:

"C:/Your_Local_Ruby_Install_Path/Ruby30-x64/ssl/cert.pem"

pem是一个包含证书信息的纯文本文件。您需要下载并提供缺少的证书,然后将其添加到cert.pem文件中。
之后,您可以使用gem install your_package,而不会出现与之前丢失的证书相关的SSL问题。

chy5wohz

chy5wohz3#

要解决问题
https://rubygems.org/pages/download下载(Windows为ZIP)
解压缩到一个目录并在其中安装cd:rb(你可能需要管理员/根权限)
它帮我解决了

5jvtdoz2

5jvtdoz24#

尽管给出了解决方案,但最好还是深入问题的根源。您的系统缺少可信CA池中的AlphaSSL中间证书。您需要更新计算机上的可信CA根证书和中间证书。最好的来源之一是从Firefox中提取的curl's constantly updated CA certificate storage。否则,您可以手动导入证书。

yhxst69z

yhxst69z5#

在Ubuntu 22.04上,我不得不遵循这个家伙写的修改脚本:https://deanpcmad.com/2022/installing-older-ruby-versions-on-ubuntu-22-04/
@MichaelHuelsen的回答给我指出了正确的方向,并向我透露了Dean安装中提供的预编译版本中有他的主路径。
所以我编译了自己的,经过一些调整,我可以在Ubuntu 22.04中安装旧版本的Ruby。
这可能是一个轻微的切线对这个问题,但尽管如此,希望它有助于任何人谁找到他们的方式在这里出于同样的原因。
我的安装说明版本:

mkdir ~/.openssl
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar zxvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/home/$USER/.openssl/openssl-1.1.1g --openssldir=/home/$USER/.openssl/openssl-1.1.1g
make
make test
make install
rm -rf ~/.openssl/openssl-1.1.1g/certs
ln -s /etc/ssl/certs ~/.openssl/openssl-1.1.1g/certs
# Ruby 3.0
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/home/$USER/.openssl/openssl-1.1.1g rbenv install 3.0.4
# Ruby 2.7
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/home/$USER/.openssl/openssl-1.1.1g rbenv install 2.7.6
# Ruby 2.6
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/home/$USER/.openssl/openssl-1.1.1g rbenv install 2.6.9
# Ruby 2.5 (No Longer Supported)
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/home/$USER/.openssl/openssl-1.1.1g rbenv install 2.5.9
# Ruby 2.4 (No Longer Supported)
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/home/$USER/.openssl/openssl-1.1.1g rbenv install 2.4.10
ukqbszuj

ukqbszuj6#

对于我的情况:

错误

sudo gem install cocoapods但错误:

ERROR:  SSL verification error at depth 0: ok (0)
ERROR:  Could not find a valid gem 'cocoapods' (>= 0), here is why:
          Unable to download data from https://ruby.taobao.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (certificate rejected) (https://ruby.taobao.org/specs.4.8.gz)

原因

旧源无效(签名?)

溶液

删除旧源,添加新的有效源

步数

gem sources --remove https://ruby.taobao.org/
gem sources -a https://gems.ruby-china.com/

注:
gem sources -l
可以检查电流源。

mefy6pfw

mefy6pfw7#

对我来说,我收到了一个类似的错误。它告诉我需要安装我公司的证书文件。查看SSL错误,找到CN=--我相信这是“证书名称”。我在Mac OS上,所以我打开“钥匙链访问”并导出证书。
然后,为了找到ruby正在使用的证书的位置,我运行:
ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
在通过自制程序安装了openssl的Mac OS上,这会产生:
/opt/homebrew/etc/openssl@1.1/cert.pem
当我查看这个文件时,我发现它实际上是另一个cert文件的符号链接,这是因为我使用的是certifi python库(以及pyenv),在openssl@1.1目录下运行l会显示符号链接:
cert.pem -> ../../../../Users/<USERNAME>/.pyenv/versions/3.10.4/lib/python3.10/site-packages/certifi/cacert.pem
在将我公司的证书连接到这个原始的证书文件之后,我安装了gem,我通过运行下面的命令(在~/.pyenv/versions/3.10.4/lib/python3.10/site-packages/certifi/目录中)完成了安装。
cat ~/path/to/my/exported/cert/MyCompanyCert.pem cacert.pem > cacert.pem
这会将公司证书附加到现有证书文件的末尾。瞧,gem install <package>符合您的愿望。

相关问题