CA証明書について
内容
Laravl(ver12)にて、個人開発をしようとした際にlarabel/breeze(ja)パッケージをインストールしようとした際にSSLエラーが発生してつまづいたので解決した方法と学習した内容を記録。
環境
ローカル環境上でdocker-composeにて以下の構成になるようにコンテナを作成しています。
言語 php
RDBMS mysql
webサーバーソフトウェア nginx
メールサーバーあり
redisあり
※今回の投稿にて、各ソフトウェアのバージョンは無関係と認識しているので割愛します。
前提条件
①dockerコンテナ環境が「環境」の内容に沿って問題なく立ち上がっている。
②laravel/breezeパッケージをインストール済みである
→Blade with Alpineにて設定
③laravelの初期設定が完了している
詳細
laravel/breezeパッケージをインストール後に、多言語対応をしようとしてlaravel/breeze(ja)パッケージをインストールしようとした際に以下のエラーが発生した。
xx@xxxxxxxxxxxxxxxx:/src# composer require askdkc/breezejp --dev
In CurlDownloader.php line 390:
curl error 77 while downloading https://repo.packagist.org/packages.json: error setting certificate file: /etc/ssl/certs/ca-certificates.crt
require [--dev] [--dry-run] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--fixed] [--no-suggest] [--no-progress] [--no-update] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--update-no-dev] [-w|--update-with-dependencies] [-W|--update-with-all-dependencies] [--with-dependencies] [--with-all-dependencies] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-m|--minimal-changes] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--] [<packages>...]
エラー内容としてはComposerがパッケージをダウンロードする際にSSL証明書の検証に失敗したとの事です。
Composer は、HTTPS を使って通信するすべての場面で、SSL/TLS 証明書の検証を行います。
この内容から独自のrootCA証明書を再構築を実施しました(.crt
バンドルを再生成というらしいです)
update-ca-certificates --fresh
※何らかの原因で.crtファイルが生成されなかった場合は以下のコマンドも実行をしてみてください
cat /etc/ssl/certs/*.pem > /etc/ssl/certs/ca-certificates.crt
補足
ここからの内容については、より理解を深めるためにネットで調べてまとめたものです。
間違えている点・理解を深めた方が良い点ございましたらご指摘をただけますと幸いです。
CA証明書とは‥?
CA = Certificate Authority(証明書認証局) の略です。
CA(証明書認証局)とは何か?
インターネット上で「このサーバーは本物です」と第三者的に保証する機関のことです。
実生活に例えると
あなたがパスポートを持っているとします。
• そのパスポートに「政府(=公的なCA)」のハンコがあるから、他国の入国管理が信頼してくれる。
• ハンコが自作だったら「信用できない!」と門前払いされる。
インターネットのCAも同じです。
サーバー証明書に「信頼されたCAの署名」があるかが命です。
開発時によく使う mkcert って?
• 開発環境用に自分専用のCAを作れるツール
• 自分のマシンに「俺がCAだ!」というルート証明書を登録
• そのCAで *.local などの証明書を発行し、開発時にHTTPSで使う
今回ローカル環境はssl化をしていたが、
mkcert が信頼されないのは「そのCA証明書がDockerなどの別の環境には登録されていないから」