偶然にも、DovecotサーバーのSSL構成のチェーンファイルの最後に、期限切れの中間証明書があります。 Android電子メールクライアントがApple Mailで許可する(??!)有効期限は数時間前に発生しました。openssl x509 -in ...
は以下を示します:
Serial Number:
13:ea:28:70:5b:f4:ec:ed:0c:36:63:09:80:61:43:36
Signature Algorithm: sha384WithRSAEncryption
Issuer: C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
Validity
Not Before: May 30 10:48:38 2000 GMT
Not After : May 30 10:48:38 2020 GMT
Subject: C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
しかし、このコマンド:
openssl s_client -showcerts -verify_return_error -connect imap.example.com:993
(有効期限が切れた証明書を出力している間!)問題のフラグ付けに失敗します。 OpenSSLパッケージのバージョンは次のとおりです:1.1.1g-1+ubuntu18.04.1+d
CONNECTED(00000003)
depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
verify return:1
depth=0 CN = imap.example.com
verify return:1
これを見つけてフラグを立てるOpenSSL検証テストを作成するにはどうすればよいですか?私はすでにかなりオンラインで検索しましたが、パブリックチェーンのいくつかのラングで期限切れに対処するものは何も見つかりませんでした。最も近い質問は次のとおりです: SSL証明書がAndroidで信頼されていないのはなぜですか? しかし、これは4証明書チェーン内の失われたリンクのみを扱います。 Apple Mailがエラーを受け入れる理由についての私の推測は、MacOSが同じ中間CAの期限切れしていない独自のバージョンをキャッシュしたことです。
[〜#〜]編集[〜#〜]
サーバーでは、次のとおりです。
/usr/share/ca-certificates/mozilla/USERTrust_RSA_Certification_Authority.crt
は現在自己署名されているので、opensslはこれを黙って置き換える必要があります(edit:この証明書を非表示にすることによってテストされます;有効期限が検出されました!)目標は、Androidの苦情を検出するのに十分な感度を持つことです。私はAndroid 10ですが、1つ(5月4日)更新が最新のものより遅れています。
すばらしい説明については SSLMate の功績です。
基本的に AddTrust外部CAルート証明書は要件に対して余剰になります 、そして2020年5月30日現在、これは期限切れになったばかりの証明書です。お持ちのメイン証明書を確認するために使用できる可能性のあるその他証明書がCAバンドルにありますが、古いソフトウェア(OpenSSL 1.0など)は失敗するのは、機能するものではなく、期限切れになったばかりの証明書チェーンを選択しているためです。解決策は、有効期限が切れた証明書を証明書ファイルから削除することですが、おそらくすでに知っています。
ただし、何が脆弱であるかを知ることが、必要なテストを作成する鍵となります。テストの一部として実行できる何かで、古い脆弱なOpenSSLバージョンをラップする必要があります。 MacOSでcurlを使用しています。これは、チェーン内のAddTrust証明書で証明書を検証することを拒否するためですが、コマンドラインopenssl
もそれを検出しました。実行しているバージョンが正確にわかりません。 。
もちろん、特にこの証明書が悪いことを知っている場合は、いつでもその署名から見つけることができます。
openssl x509 -noout -fingerprint -in ../AddTrust\ External\ CA\ Root-2020.crt`
と応答を比較する
SHA1 Fingerprint=02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68
これはこの特定の悪い証明書です。
私は期待していますこの特定の期限切れの証明書の脆弱性はまれですが、より一般的なテストを行いたい場合は、次のケースを探します複数の可能なチェーンが存在し、1つは有効ですが、もう1つは無効です。