仁がWeb技術っぽい記事を書いています。rbenvという環境でNet::HTTP使ってSSLでの通信をしようと思ったらエラーがでた。(OpenSSL::SSL::SSLError)たとえば、こんな感じのコードでhttpsなURLにアクセスする場合。res.bodyendそういえば前にもこのエラー見たなぁとも思いながら調べてみる。ようするに、クライアント側にバンドルされるべきの証明書がないのが原因らしい。Rubyが見に行く証明書のパスは”/usr/local/etc/openssl/cert.pem”だけど、実際にはファイルはない。directoryちなみにCentOS6.4ではちゃんとファイルがあるので動作する。RPM的にはca-certificatesというパッケージでインストールされている。/etc/pki/tls/certs/ca-bundle.crtca-certificates-2010.63-3.el6_1.5.noarchMacにhomebrewでインストールしてもCA証明書はインストールされないということのようだ。curlのサイトが配布してくれているPEM形式のCA証明書をRubyが読み込んでいるパスに保存してあげる。/usr/local/etc/openssl/cert.pem中身の冒頭を読むとわかるようにこの証明書はMozillaが配布しているルート証明書をcurlなどが使えるようにPEMの形式に自動的に変換したものだ。http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1これで、エラーが出ずにNet::HTTPをつかってSSLでアクセスできるようになった。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。仁がWeb技術っぽい記事を書いています。