状況
GitHub Actionsを利用したDocker buildx
中のgem install
で以下のエラーが発生。
#24 [linux/arm/v7 7/10] RUN gem install iconv
#24 2.493 ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20)
#24 2.495 ERROR: You must add /C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA to your local trusted store
ベース・イメージはDocker Hubのhttpd:2.4.46
とhttpd:2.4.43
(2020年11月時点のlatest)のlinux/arm/v7
です。
linux/arm64
とlinux/amd64
では発生していません。
詳しくはレポジトリを参照してください。
後述の通りその後対処が不要になったのでDockerfile
等は当時の版を参照。
原因
原因は書いてある通り証明書エラーです。
GlobalSign Root CA
の証明書が入っていません。
対処
証明書を追加すれば解決します。
Bundlerのページにあるトラブルシュートに従い、pemファイルへの直接リンクからダウンロードします。
署名の追加方法はLife with ITさんの記事と@msiさんの記事に従いました。
ただし、証明書が不足している/古い場合はcurlが動作しないことがあります、Dockerfile
内ではなく外部でcurlから取得し、COPY
した方が良いでしょう。
- name: Download GlobalSignRootCA.pem
run: curl https://raw.githubusercontent.com/rubygems/rubygems/master/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem -o GemCert.pem
COPY GemCert.pem /tmp/GemCert.pem
RUN mkdir /usr/share/ca-certificates/Gem && \
cp /tmp/GemCert.pem /usr/share/ca-certificates/Gem && \
echo "Gem/GemCert.pem" >> /etc/ca-certificates.conf && \
update-ca-certificates && \
rm /tmp/GemCert.pem
なお、apt-get install ca-certificates
では解決しませんでした。
他には、
$ curl -Lks 'https://git.io/rg-ssl' | ruby # SSLのチェック
$ gem install bundler # Bundlerの更新
$ gem update --system # RubyGemsの更新
が推奨されていました。私の場合更新は必要ありませんでしたが、チェックスクリプトは便利です。
なお、今回は証明書をインストールしましたが、SSLなしに設定するという選択肢もあります。お勧めしません。
懸念点
SSLの証明書をGitHubからダウンロードするというのはセキュリティ上心配です。
GitHubでなくとも将来ずっとURLが維持されるか、証明書自体が今後も信用できるのかなど不安が残ります。
特に定期実行もするGitHub Actionsで現時点で動作するだけのワークアラウンドも避けた方が良いでしょう。
ここではやりませんでしたが、追加し処理が終わった後証明書を削除するのも一つのやり方でしょう。
私の場合は、この後ソースコードを修正しgem install
自体が不要になり、この対処を削除しました。
参考記事
- Lief with IT (2019) 「Amazon Linux 2上でcurl実行時に「SSL certificate problem: unable to get local issuer certificate」というエラーが出る場合の対応」 https://l-w-i.net/t/aws/ec2_100.txt
- Bundler 「How to troubleshoot RubyGems and Bundler TLS/SSL Issues」https://bundler.io/v2.0/guides/rubygems_tls_ssl_troubleshooting_guide.html
- @msi (2020)「独自(root)CA のインストール方法」Qiita https://qiita.com/msi/items/9cb90271836386dafce3