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

时间:2018-05-26 06:50:38

标签: ruby macos ssl openssl rubygems

我试图找到一些简单问题的答案。

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

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

    我试图将我们的存储库添加为源

    gem sources --add https://our.repository.com/bla/bla

    它禁止证书的根目录不受信任。这与我在尝试从存储库(作为代理)中提取时遇到的问题相同,并且对于使用我们的宝石的任何其他团队来说都是一个问题。我需要一个很好的解决方案来建议我的团队和其他人。

    显然,如果我设置环境变量SSL_CERT_FILE=/path/to/root_cert.pem,我可以使用它。但我更愿意将cert文件放在受信任的位置,让它像Java信任存储一样透明地工作。

1 个答案:

答案 0 :(得分:11)

通过一些调查和实验,我意识到以下注意事项。 (我建议为此信息执行brew info openssl):

  • Ruby使用系统OpenSSL
  • 最新版本的OS X不会更新openssl,因为OS X现在推出了自己的TLS和加密库
  • 需要重新使用openssl
  • 使用的CA文件

看看自制软件中有关openssl的输出的有趣部分:

$ 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.
...

所以我所要做的就是以下内容,我所有的SSL问题都在Ruby中消失了:

cp /path/to/my/root_certificate.pem /usr/local/etc/openssl/certs
/usr/local/opt/openssl/bin/c_rehash

希望能帮助他人