SSLルートCA証明書は、トラストストアに存在しますが、認識されません。どうして?
バックグラウンド:
- Ubuntu Server 14.1064ビット(aws.Amazon.com/ec2)
- COMODOからの安価なPositiveSSLサーバー証明書
- COMODOからのZipアーカイブとしての1つのサーバー証明書、2つの中間CA証明書、および1つのルートCA証明書
- シタデルのWebCithttpsd
問題:
連結された証明書チェーンは正しいようですが、検証は失敗します。
openssl s_client myhost:port
は、証明書チェーンと発行者とサブジェクトのペアがチェーン全体で正しく整列していることを示していますが、次のとおりです。
verify error:num=19:self signed certificate in certificate chain
ルートCA証明書はopensslによって受け入れられませんが、デフォルトではUbuntuサーバーのトラストストアにあります。
具体的には、COMODOから電子メールごとに受信したAddTrustExternalCARoot.crt
と/etc/ssl/certs/AddTrust_External_Root.pem
にリンクする/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
は同一です。
ここで何が問題になっていますか?
少なくとも現在の(1.0.2a)までのOpenSSLにはバグがあります。ここでs_client
と-CA{path,file}
引数はありません実際にはデフォルトのトラストストアを適切に使用しないため、そのトラストストアに従って有効な証明書の検証に失敗します。 (s_server
およびs_time
もありますが、これらの検証を気にすることはまれです。) https://serverfault.com/questions/607233/how-to-make-openssl-s)を参照してください。 -client-using-default-ca 。修正はdevで発表されますが、リリースされて配布されるまでに時間がかかる場合があります。それまでの間、-CA*
引数を明示的に指定する必要があります。 openssl verify
にはこのバグがないため、証明書/チェーンが有効であると正しく報告されていることに注意してください。
[〜#〜]更新[〜#〜]2015/08/26:修正がリリースされました2015/06/12 in1.0.1oおよび1.0.2c。また、他の何かを調査しているときに、RedHatパッケージは大丈夫だったかもしれないことがわかりました。より具体的には、私が理解しているopenssl-1.0.1e-30.el6.11
のCentOSソースRPMは、RedHatのコピーです(ただし、簡単には確認できません)。openssl-1.0.1c-default-paths.patch
には、2012/12 /日付のs_client.c s_server.c s_time.c
への変更が含まれています。 06は、2015/06/12アップストリーム修正と同等に見えます(テキストは同じではありませんが)。このパッチがRedHatおよびCentOSパッケージに適用されていると仮定すると、簡単に戻って確認することはできませんが、期待どおりに機能します。
最近、Rubyを使用してスクリプトを開発するときに、Comodo証明書で同様の問題に直面しました。結局、OpenSSLは、そのように見えたとしても、ストアにそれを持っていなかったのです。
これをテストするには、すべてのComodo中間証明書をダウンロードし、次のような証明書バンドルを作成します(ダウンロードしたものに応じて異なる証明書名を使用する必要があります)。
cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle
完了したら、OpenSSLを使用して証明書を再度確認し、コマンドラインで証明書ストアを指定してみてください。
openssl verify -untrusted yourDomain.ca-bundle cert.pem
その例は このUnixおよびLinux StackExchangeの記事 から適応されました。
それがどの証明書であるかを決定したら、その証明書をローカルの証明書ストアに追加できるはずです buntuについてはここで詳しく説明します 、次のようになります。
/ usr/share/ca-certificatesに追加のCA証明書用のディレクトリを作成します
Sudo mkdir /usr/share/ca-certificates/extra
'.crt'ファイルをディレクトリにコピーします
Sudo cp foo.crt /usr/share/ca-certificates/extra/foo.crt
Ubuntuに/ usr/share/ca-certificatesからの相対的な「.crt」ファイルのパスを/etc/ca-certificates.confに追加させます
Sudo dpkg-reconfigure ca-certificates
コモドルート証明書は信頼されなくなりました-理由がわからない場合は、「コモド盗まれた証明書」をグーグルで検索してください。
コモド証明書は安いかもしれませんが、その価値はその価格よりはるかに低いです。それは事実上価値がなく、信頼の連鎖が壊れています。