我正在尝试寻找一些简单问题的答案。
- Ruby 在执行 SSL 时使用哪些证书? (我假设这也适用于
gem
) - 如何将根证书添加到受信任的 CA 证书集中。
- 是否有这方面的最佳做法?它记录在哪里?
背景
我正在使用 mac(目前是 Sierra)和 rbenv/ruby-build 来安装 rubies。 我们已经使用 Sonatype Nexus 建立了一个内部 rubygems 存储库。服务器的证书由公司的内部根证书签署,我有一份。
一旦我尝试将我们的存储库添加为源
gem 来源 --add https://our.repository.com/bla/bla
它提示证书的根不受信任。这与我在尝试从存储库(作为代理)中提取时遇到的问题相同,并且对于使用我们的 gem 的任何其他团队来说都是一个问题。我需要一个好的解决方案来为我的团队和其他人提供建议。
显然,如果我设置环境变量 SSL_CERT_FILE=/path/to/root_cert.pem
,我就可以使用它。但我更愿意将证书文件放在受信任的位置,并让它透明地工作,就像我对 Java 信任库所做的那样。
最佳答案
通过一些调查和实验,我发现了以下注意事项。 (我建议为此信息执行 brew info openssl
):
- Ruby 使用系统 OpenSSL
- 最新版本的 OS X 不会更新 openssl,因为 OS X 现在推出了自己的 TLS 和加密库
- 需要重新哈希 openssl 使用的 CA 文件
看看关于 openssl 的 homebrew 输出中有趣的部分:
$ brew info openssl
...
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/openssl/bin/c_rehash
This formula is keg-only, which means it was not symlinked into /usr/local,
because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.
...
所以我只需要执行以下操作,对于 Ruby,我所有的 SSL 问题都消失了:
cp /path/to/my/root_certificate.pem /usr/local/etc/openssl/certs
/usr/local/opt/openssl/bin/c_rehash
希望对别人有帮助
关于ruby - 如何在 Mac 上为 Ruby 添加根 CA 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50540142/