証明書の検証に通常使用される標準は、RFC 5280:インターネットX.509公開鍵インフラストラクチャ証明書および証明書失効リスト(CRL)プロファイルにあります。証明書には、(少なくとも)使用法に関する2つの拡張機能(キー使用法と拡張キー使用法)を含めることができます。
Key Usage拡張機能は、クライアント証明書について具体的に説明していません。ただし、この拡張機能が存在する場合はdigitalSignature
、SSL / TLSハンドシェイク中に、CertificateVerify
TLSメッセージがこの証明書の秘密鍵で署名されるため、フラグを設定する必要があります。これは、RFC5280のこのセクションに従って必要です。
digitalSignatureビットは、エンティティ認証サービス、データ発信元認証サービス、および/または整合性サービス。
(ほとんどの暗号スイートも必要になりkeyAgreement
ます。)
これは、クライアント証明書についてより具体的な場合(拡張機能が存在する場合、推奨されますが、常にそうであるとは限りません):
id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
-- TLS WWW client authentication
-- Key usage bits that may be consistent: digitalSignature
-- and/or keyAgreement
これについての詳細は、このNSSテクニカルノートに記載されています(これは他の製品にも当てはまります)。
「セキュリティ:KeyUsageはデジタル署名を許可しません」を取得すると、クライアント証明書として使用しようとしている証明書に(拡張されていない)キー使用法が存在することを示しているようですが、それdigitalSignature
は有効になっていません。(これは、これらの証明書を発行したCAが行うべきことです。)
これはアプレットとは関係ありません。ただし、アプレット自体のURLがクライアント証明書認証で保護されている可能性があります。これは、これらの拡張機能が原因で失敗します。
サーバー側の1つは、これをIISの背後で実行しているため、TLS/SSL証明書の検証を処理するのはIISです。Apache Tomcatは、証明書をどこから取得したかを実際に気にする必要はありません。(Javaでは、カスタムを構成することで証明書の検証方法を微調整できますTrustManager
が、これはJava(JSSE)がSSL/TLS接続自体を処理している場合にのみ適用されます。Tomcatが遅れている場合は適用されません。 IIS、Apache Httpd、またはAPRを使用する場合でも。)IISでこれを構成する方法はわかりませんが、netsh httpaddsslcertというオプションがあり[ usagecheck= ] enable | disable
ます。しかし、それは寛大すぎるかもしれません。(注意して使用してください。)
そうは言っても、証明書が送信される前に、クライアント側でエラーが発生するようです。私は試したことがないことを認めなければなりませんがKeyManager
、その証明書の使用を強制する特定のものを使用できる可能性があります。これがうまくいくかどうかは完全にはわかりません。
補足として、アプレットへの署名は別の問題です。アプレットに署名するには、証明書にanyExtendedKeyUsageまたはid-kp-codeSigningの拡張キー使用法が必要です。(それ以外の場合、署名は機能しますが、アプレットの実行は機能しません。)詳細については、http://bugs.sun.com/bugdatabase/view_bug.do ?bug_id=5056088を参照してください。