私のアプリは SSL を使用してサーバーと安全に通信していますが、証明書チェーンの検証に問題があります。チェーンは次のようになります。
Entrust.net セキュア サーバー認証局 -> DigiCert グローバル CA -> *.ourdomain.com
Mozilla から取得した証明書ストアを使用しています。これには Entrust.net 証明書が含まれていますが、DigiCert グローバル CA 証明書は含まれていません。
私の理解では、ルート機関が信頼されている限り、中間機関を信頼する必要はありませんが、検証は失敗します。
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
検証をパスするには、DigiCert グローバル CA を明示的に信頼する必要がありますか? それは間違っているようです。しかし、あなたは私に教えてください!
編集: 証明書ファイルを事前に OpenSSL で使用できるようにする必要があることを理解しました。このようなものは動作します:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
これにより、「信頼しています」と明示的に言わなくても DigiCert CA のコピーを提供できますが、チェーン全体を検証する必要があります。
しかし、Firefox のようなブラウザには、必要なすべての証明書のコピーが常に同梱されているわけではありません。常に新しい CA が存在するため、ポイントは、ルート証明書のセキュリティを使用して、すべての中間 CA が有効であることを確認することです。右?では、これはどのように機能するのでしょうか。見た目と同じくらい本当にばかげていますか?