LoginSignup
15
16

More than 5 years have passed since last update.

OS X 10.10.3でRubyから一部サイトへのHTTPS接続時がエラーになる

Posted at

発生する事象

Net::HTTPを使って一部のサイトにHTTPS接続すると以下のようにOpenSSL::SSL::SSLErrorが発生します。

/Users/hideki/.rbenv/versions/2.2.1/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

前提条件

  • OS X 10.10.3
  • HomebrewからOpenSSLをインストール (10.10.3にアップデートしてからインストールされたもの)
  • rbenvなどからHomebrewのOpenSSLをリンクしてRubyをインストール

原因

HomebrewからOpenSSLをインストールすると、Keychainから/usr/local/etc/openssl/cert.pemを生成するようになっています。1

そして、Homebrewの28b03c2のコミットにEquifaxの証明書を/usr/local/etc/openssl/certs配下に追加するワークアラウンドが追加されています。2
このワークアラウンドのコメントを見ると、AppleがEquifax Secure CA rootをOS X 10.10.3で削除したためと書かれています。

しかし、どうやらRubyからはOpenSSL::X509::DEFAULT_CERT_FILE3に定義されている/usr/local/etc/openssl/cert.pemしか参照せず、/usr/local/etc/openssl/certs配下の証明書は見ていないようです。

対処方法

乱暴ですが、/usr/local/etc/openssl/cert.pemのバックアップを取り、cert.pem/usr/local/etc/openssl/certs配下にあるEquifaxの証明書を結合したものを新たにcert.pemとして置くことで解決しました。

$ cd /usr/local/etc/openssl
$ mv cert.pem cert.pem.backup
$ cat cert.pem.backup certs/Equifax_Secure_Certificate_Authority.pem > cert.pem

ひとまずこれでOS X側が修正されるのを待てばよいと思います。

OS X側が修正されたならば、certs/Equifax_Secure_Certificate_Authority.pemcerts/578d5c04.0を削除し、次のコマンドで再度Keychainからcert.pemを再生成するとよいでしょう。

$ security find-certificate -a -p /Library/Keychains/System.keychain /System/Library/Keychains/SystemRootCertificates.keychain > cert.pem

Equifax_Secure_Certificate_Authority.pemを自分でKeychainに入れて上記コマンドを実行するの方法もありますが、SystemのKeychainにホイホイ証明書を入れてしまうのはどうかなと思ってやめました。

他に綺麗な解決法、例えばRubyからも/usr/local/etc/openssl/certsを使えるようにする方法などがあれば教えて欲しいです:relieved:

おまけ

以前はHomebrewからcurl-ca-bundleというFomulaをインストールするのが定番でしたが、現在では削除されています。4

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16