これに対する実際の修正は、サーバーがエンドエンティティ(サーバー)証明書だけでなく、チェーン内のすべての証明書を提示するようにすることです。
サーバー管理者に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.cer。AlphaSSL 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が証明書エラーを表示することがあります。