背景:
- aws.amazon.com/ec2 上の Ubuntu Server 14.10 64 ビット
- COMODO の安価な PositiveSSL サーバー証明書
- COMODO からの ZIP アーカイブとして、1 つのサーバー証明書、2 つの中間 CA 証明書、および 1 つのルート CA 証明書
- シタデルのWebCit httpsd
問題:
連結された証明書チェーンは正しいようですが、検証は失敗します。
openssl s_client myhost:port
証明書チェーンと発行者とサブジェクトのペアがチェーン全体で正しく並んでいることを示していますが、次のようになります。
verify error:num=19:self signed certificate in certificate chain
ルート CA 証明書は、Ubuntu サーバーの信頼ストアにデフォルトで存在しますが、openssl では受け入れられません。
具体的には、
AddTrustExternalCARoot.crt
COMODO から電子メールで受信され、
/etc/ssl/certs/AddTrust_External_Root.pem
リンクは
/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
同一です。
ここで何が問題なのでしょうか?
答え1
OpenSSLは少なくとも現在のバージョン(1.0.2a)ではバグs_client
引数なし-CA{path,file}
実際にはデフォルトのトラストストアは使用されない本来そうであるべきであり、そのためそのトラストストアに従って有効な証明書を検証できません。(およびですs_server
がs_time
、それらの検証を気にすることはまれです。) を参照してください。https://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-ca。 修正は開発版で発表されていますが、リリースおよび配布にはしばらく時間がかかる可能性があります。 それまでの間、-CA*
引数を明示的に指定する必要があります。 にはこのバグがないため、証明書/チェーンが有効であると正しく報告されていることに注意してくださいopenssl verify
。
アップデート2015/08/26:修正がリリースされました2015/06/12 1.0.1oと1.0.2c。また、他のことを調査しているときに、RedHatパッケージは問題なかったかもしれないより具体的には、CentOS ソース RPM はopenssl-1.0.1e-30.el6.11
RedHat のコピーであると理解していますが (簡単には確認できません)、 2012/12/06 日付openssl-1.0.1c-default-paths.patch
の変更が含まれておりs_client.c s_server.c s_time.c
、これは 2015/06/12 のアップストリーム修正と同等 (ただし、テキストは同じではありません) のようです。このパッチが RedHat および CentOS パッケージに適用されたと仮定すると (簡単に戻って確認することはできません)、期待どおりに動作するはずです。
答え2
最近、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の記事。
どの証明書であるかを決定したら、その証明書をローカル証明書ストアに追加できるようになります。Ubuntuの詳細については、こちらをご覧ください、次のような内容です。
/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
答え3
Comodo ルート証明書は信頼されなくなりました。理由が分からない場合は、「Comodo 盗難証明書」を Google で検索してください。
Comodo 証明書は安価かもしれませんが、その価値はその価格よりもはるかに低くなります。つまり、事実上価値がなく、信頼の連鎖が壊れているのです。