ruby - 如何在 Mac 上为 Ruby 添加根 CA 证书

标签 ruby macos ssl openssl rubygems

我正在尝试寻找一些简单问题的答案。

  1. Ruby 在执行 SSL 时使用哪些证书? (我假设这也适用于 gem)
  2. 如何将根证书添加到受信任的 CA 证书集中。
  3. 是否有这方面的最佳做法?它记录在哪里?

背景

我正在使用 mac(目前是 Sierra)和 rbenv/ruby-build 来安装 rubies。 我们已经使用 Sonatype Nexus 建立了一个内部 ruby​​gems 存储库。服务器的证书由公司的内部根证书签署,我有一份。

一旦我尝试将我们的存储库添加为源

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/

相关文章:

objective-c - 如何将所有错误(包括未捕获的异常、NSLog 调用和其他日志)重定向到 Mac OS X 上的日志文件?

php - 在 Apache 服务器上使用 OpenSSL 进行单点登录

WCF 服务 - 证书未到达服务器

email - 无法从 Unifi Controller 向 Postfix SMTP 中继发送电子邮件通知

ruby - 未使用哈希默认值

mysql - 在mac终端运行一个sql文件

objective-c - bash 脚本和使用 OpenSSL 的 cocoa 代码之间的区别

mysql - 在 ruby​​ 中连接到 mysql 会产生错误数量的参数错误(4 个,共 0 个)- 如何调试?

ruby - Ruby测试期望命令会被执行

ruby - attr_accessor 创建的方法对子类不可用