Gnu / LinuxをWindowsからすぐに信頼できる証明書を信頼させる方法は?


11

このSSLチェックで報告されているように、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-certificatesGlobalsign 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:同じ証明書が別のサーバーに正しくデプロイされています


どうして下票?
ウドG

1
OPが彼に影響を与えることができない何かを尋ねているので、私はこの質問を主題外として閉じることに投票します。サーバーサイドでは何も変更できないので、クライアントサイドでの解決策がない問題を説明しているため、これはおそらくスーパーユーザーのものだと彼は語った。
LinuxSecurityFreak

2
クライアント側のソリューションを具体的に求めています。サーバーに影響を与えることはできませんが、クライアントのO / S(Ubuntu)を完全に制御できます。この特定のO / Sインストールで、他のO / S(Windows)と同じように証明書を信頼します。他の人のためにHTTPSサイトを修正することではありません。
ウドG


1
サーバーを制御することはできませんが、サーバーを制御する人に問題を報告できます。
マイケルハンプトン

回答:


11

これに対する実際の修正は、サーバーがエンドエンティティ(サーバー)証明書だけでなく、チェーン内のすべての証明書を提示するようにすることです。

サーバー管理者にRFC 5246セクション7.4.2指示して、このメッセージがサーバーの証明書チェーンをクライアントに伝えることを明確に示します。


管理者が何らかの理由でこれを拒否/実行できない場合、別の選択肢としてcurl、不正な形式のハンドシェイクを試して作業することができます。

Curlメーリングリストのメッセージによると:

誰かがcURLが中間証明書をサポートしているかどうかを確認できますか?

はい、そうです。すべてのCA証明書には、ルートまでの証明書チェーンがあります。curlで使用するcaバンドルは、チェーン全体の証明書で構成される必要があります。

/ daniel.haxx.se

ルートCAおよびすべての中間証明書をバンドルに追加curlし、--cacert <file>オプションを使用してそれを指すことができるはずです。

ブラウザが機能している場合、そこから正しいCA証明書にアクセスできます。[証明書]タブ(ブラウザーごとに異なりますが、それがわかると思います)で、証明書チェーンを表示します。最初にルートCAをダブルクリックし、Globalsign Root CA-G1をダブルクリックして、[ 詳細 ]タブで[ ファイルコピー... ]をクリックします。名前を付けて保存しますroot.cerAlphaSSL CA-SHA256-G2でも同じことを行い、名前を付けて保存しますissuing.cer。2つを1つのファイル(たとえばchain.cer)に結合し、それをの引数として使用し-cacertます。

@ABが指摘したように、不足している証明書もここにあります


ブラウザは、CA証明書をキャッシュするため機能します。過去のある時点で正しく構成されたWebサイトに移動し、その証明書がサーバーの証明書と同じCAによって発行された場合、ブラウザーによってキャッシュされます。その後、誤って構成されたサイトにアクセスすると、ブラウザーはキャッシュ内のCA証明書を使用してチェーンを構築します。あなたにとっては、すべてが順調に進んでいるように見えますが、舞台裏ではサーバーが正しく構成されていません。

Windowsでは、IE / EdgeとChromeは同じキャッシュを共有しますが、Firefoxは独自のキャッシュを使用します。

上記に加えて、IE / EdgeとChrome(同じ暗号スタックを共有するため)は、AuthorityInformationAccessと呼ばれる証明書内の拡張を使用します。これには、エンドエンティティ証明書のCA証明書をダウンロードできるURLを提供するcaIssuerオプションがあります。したがって、これらのブラウザーのいずれかが以前のブラウジングで不足している証明書をキャッシュしていない場合でも、必要に応じてそれをフェッチできます。Firefoxはこれを行わないことに注意してください。これは、IE / EdgeとChromeが機能しているように見える場合に、Firefoxが証明書エラーを表示することがあります。


1
それは私のサーバーではないので、サーバー側では何も変更できません。(Firefoxは証明書を信頼するため)curl.haxx.se/docs/caextract.htmlからCAバンドルを使用して渡そうとしました--cacert cacert.pemが、CURLはまだ証明書を受け入れません。
Udo G

1
それあなたのサーバーです。実行するecho q | openssl s_client -showcerts -connect betriebsheft.vog.it:443と、サーバーから提示された証明書が1つだけ表示されます。エンドエンティティ証明書(提示されている)と発行元のCA-Alpha SSL-SHA256-G2証明書の2つが必要です。後者はサーバーによって送信されていませんが、送信する必要があります。
garethTheRed 2018

2
@garethTheRed:サーバーがすべての証明書を提示するわけではないことを理解していますが、サーバーは私の制御下にありません(それは「サーバーではない」という意味でした)。外部サーバーのAPIにアクセスしようとしています。Windowsでは、私のブラウザはどれも証明書について不満を言っていません。Linux/ Debian / Ubuntuだけが不満を持っています。
Udo G

@AB:どうもありがとう!そのページからすべてのルート証明書をインストールすると、問題が解決しました。ただし、その手動の手順が必要な理由を理解したいと思います。
Udo G

2
不足している中間証明書(@garethTheRedが言及)は、support.globalsign.com / customer / portal / articles /…にあります。OPは当初、おそらくすでに配置されているルート証明書を追加することのみを試みたため、何も達成されませんでした。
AB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.