出于安全原因,我的公司对所有互联网流量都使用代理,但不幸的是,这会破坏Ruby的SSL。
当我尝试gem install rake
或任何其他gem
命令时,我得到以下错误:
ERROR: SSL verification error at depth 0: unable to get local issuer certificate (20)
ERROR: You must add /C=US/ST=New York/L=New York City/O=My Company, Inc./OU=Corporate/CN=mycompany.com to your local trusted store
RubyGems connection to rubygems.org: failed ❌ (certificate verification)
字符串
我该如何解决这个问题?
1条答案
按热度按时间vsikbqxv1#
我们的企业代理在Ruby使用的默认Privacy Enhanced Mail(PEM)文件中没有SSL证书(基本上是长哈希),所以我必须手动添加它:
1.获取错误信息中地址的SSL证书hash
该错误指定服务器的地址,在本例中为
mycompany.com
。在Web浏览器中导航到此地址。我用的是Google Chrome。它可能会重定向,但没关系。您应该会在地址栏中的Web地址左侧看到一个锁图标,表示连接是安全的。这意味着浏览器已找到SSL证书。要获取我们需要的哈希,请单击锁图标以打开证书查看器。点击“详细信息”选项卡,确保选择顶级证书(这应该与您在错误消息中获得的原始网址相匹配),然后点击“导出”。将文件保存在某个地方,然后在文本编辑器中打开它,您将看到哈希。的数据
打开文件:
字符串
2.找到Ruby的证书文件,追加服务器的证书
在终端中,运行:
ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
个你会看到一条路。在我的例子中:
"C:/Ruby32-x64/bin/etc/ssl/cert.pem"
个在文本编辑器中打开此文件,并将“append the certificate”添加到文件末尾。添加一个注解来指定证书的用途可能是个好主意。为安全起见,在条目的上方和下方保留一个换行符:
型
保存文件。此时,您可以跳过下一步。
3.告诉Ruby使用该文件(可能可以跳过这一步)
在PowerShell中:
$env:SSL_CERT_FILE="C:\Ruby32-x64\bin\etc\ssl\cert.pem"
个在命令提示符下:
set SSL_CERT_FILE=C:\Ruby32-x64\bin\etc\ssl\cert.pem
个4.测试
运行this script检查错误是否已解决。按照链接,将其保存为
check.rb
,然后运行ruby check.rb
。你应该看到这样的东西:型