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

rew*_*olf 4 ruby macos ssl openssl rubygems

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

  1. Ruby在使用SSL时使用了哪些证书?(我认为这gem也适用)
  2. 如何将根证书添加到受信任的CA证书集中.
  3. 有最佳实践吗?它在哪里记录?

背景

我正在使用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.但我更愿意将证书文件放在受信任的位置,让它像Java信任存储一样透明地工作.

rew*_*olf 13

通过一些调查和实验,我意识到以下注释.(我建议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.
...
Run Code Online (Sandbox Code Playgroud)

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

cp /path/to/my/root_certificate.pem /usr/local/etc/openssl/certs
/usr/local/opt/openssl/bin/c_rehash
Run Code Online (Sandbox Code Playgroud)

希望能帮助别人