2019年3月20日水曜日

SSL verification error at depth 1: unable to get local issuer certificate (20)

概要

rubygems にアクセスする作業のときによく発生する証明書のエラーです
自分は bundle exec rake release 時に発生しました
対処方法を紹介します

環境

  • CentOS 7.5.1840
  • Ruby 2.5.0p0

背景

CentOS で RHSCL な Ruby を使ってる場合に出ました

解決方法

エラー内容は rubygems にアクセスする際の証明書がおかしい場合に発生します
単純に証明書が古い場合や参照している証明書のパスがおかしい場合に発生するようです
まず自分の環境の ruby がどのパスの証明書を参照しているか確認しましょう

  • bundle exec ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"

これで証明書のパスが確認できます
自分は /etc/pki/tls/cert.pem でした
このファイルはシンボリックリンクで実体は /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem にありました

方法1: 証明書を更新してみる

まずは証明書を更新してみましょう
念の為バックアップを取得してから実施します

  • cp /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem{,.back}
  • curl "https://curl.haxx.se/ca/cacert.pem" -o /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

こんな感じです
これで再度実行してエラーが解消されるか確認します

方法2: 証明書のパスを指定する

それでもダメな場合は SSL_CERT_FILE 環境変数を使って証明書のパスを指定してみましょう
以下のような感じです

  • export SSL_CERT_FILE=/etc/pki/tls/cert.pem && bundle exec rake release

これで実行してエラーが解決されるか確認します
自分はこれでエラーが解決しました

その他

あとは bundler のバージョンを上げたり、rake のバージョンを上げたりすると直ったという記事を見ました
おそらくそれは update したことで証明書が正しく認識されたんだと思います

0 件のコメント:

コメントを投稿