このSSLチェック によって報告されるように、SSLチェーンが壊れているサーバーがあります。
私はこれがサーバー自体で解決すべき問題であることを知っていますが、これを修正するのが難しい場合があります(サーバーの管理者ではありません)。
問題は、Windows上のChrome/Mozilla/Edgeとにかくサイト証明書を信頼することです:
ただし、Gnu/Linuxデプロイメント(DockerのUbuntu 18.04)では、証明書は信頼されていません。
curl: (60) SSL certificate problem: unable to get local issuer certificate
私は試した update-ca-certificates
、さらにはGlobalsign Root証明書をインポートしました。 update-ca-certificates
はその場合、重複した証明書を報告しました。とにかく、何も機能しません。
Dockerの使用:
docker run -it ubuntu:18.04
# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it # <---- "unable to get local issuer certificate"
Gnu/Linuxにこの証明書を信頼させるにはどうすればよいですか?
PS:同じ証明書は 別のサーバーに正しくデプロイされています 。
これに対する実際の修正は、サーバーがチェーン内にall証明書を提示し、エンドエンティティ(サーバー)証明書だけではないことを確認することです。
サーバー管理者に RFC 5246セクション7.4.2 を指示してくださいこのメッセージはサーバーの証明書を伝えますchainクライアントへ。
管理者が何らかの理由でこれを拒否/できない場合、別のオプションは、不正なハンドシェイクでcurl
を動作させることです。
Curlメーリングリストのメッセージによると、
誰かがcURLが中間証明書をサポートしているかどうかを確認できますか?
はい、そうです。すべてのCA証明書には、ルートまでの証明書チェーンがあります。 curlで使用するcaバンドルは、チェーン全体の証明書で構成される必要があります。
/ daniel.haxx.se
ルートCAおよびすべての中間証明書をバンドルに追加し、--cacert <file>
オプションを使用してcurl
にバンドルを指定できるようにする必要があります。
ブラウザーが機能している場合、そこから正しいCA証明書にアクセスできます。 [証明書]タブ(ブラウザーごとに異なりますが、1つはわかると思います)で、証明書チェーンを表示します。最初にルートCAをダブルクリックGlobalsign Root CA-G1し、詳細タブで、 ファイルにコピー...root.cer
として保存します。 AlphaSSL CA-SHA256-G2でも同じことを行い、issuing.cer
として保存します。 2つを1つのファイル(chain.cer
など)に結合し、-cacert
の引数として使用します。
@ A.Bが親切に指摘したとおり。不足している証明書も見つかります here 。
ブラウザは、CA証明書をキャッシュするため機能します。過去にサーバーの証明書と同じCAによって発行された証明書を使用して、正しく構成されたWebサイトにアクセスしたことがある場合、ブラウザーによってキャッシュされます。その後、誤って構成されたサイトにアクセスすると、ブラウザーはキャッシュ内のCA証明書を使用してチェーンを構築します。あなたにとっては、すべてが順調であるように見えますが、舞台裏では、サーバーが正しく構成されていません。
Windowsでは、IE/EdgeとChromeは同じキャッシュを共有しますが、Firefoxは独自のキャッシュを使用します。
上記に加えて、IE/EdgeおよびChrome(同じ暗号スタックを共有するため))は、AuthorityInformationAccessと呼ばれる証明書内の拡張を使用します。これには、エンドエンティティ証明書のCA証明書をダウンロードできるURLを提供するcaIssuerオプションがあります。したがって、これらのブラウザーのいずれかが欠落している証明書をキャッシュしていなくても以前のブラウジングから、必要に応じてそれを取得できます。Firefoxはこれを実行しないため、IE/EdgeとChromeが機能しているように見える場合に、Firefoxが証明書エラーを表示することがあります。