まず、チェックするのは、問題のパスに対してクライアントから証明書を要求するようにTomcatが正しく設定されているかどうかです。Tomcat 6では、conf/serverでコネクタを設定する必要がありますこのような.xmlの何か:
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${user.home}/.keystore" keystorePass="password"
truststoreFile="conf/truststore" truststorePass="password"
clientAuth="true" sslProtocol="TLS" />
truststoreFile & truststorePassが重要である - あなただけのこれら2つのパラメータを含めずに「真CLIENTAUTH =」を追加した場合、あなたは奇妙な行動のすべての種類を見ていない(と警告しますよ何か間違っていました)truststoreFileは、クライアント証明書に署名するために信頼するCAをリストアップした正当なJKSファイルを指していなければなりません。ブラウザーにインポートされたすべての証明書のリストと共に「Webサイトにはクライアント証明書が必要です」という行に沿ってユーザーにダイアログをポップアップ表示します。これが表示されない場合は、Tomcatのセットアップに問題があります。
正しくセットアップされているように聞こえますが、二重チェックの価値があります。また、正しく設定した場合、wiresharkで接続をトレースして、信頼できるCAを識別名でリストすると、「証明書要求」ハンドシェイクメッセージが表示されます。この場合も、Tomcatの設定と最も重要なトラストストアを確認してください。
次は、PKCS12ファイル自体をチェックすることです。あなたがこれを行うことができます。
openssl pkcs12 -in [path-to-pkcs12-file] -nokeys | openssl x509 -noout -subject -issuer
発行者の識別名はあなたの信頼ストアのtrustedCaCertエントリの1つに一致することを確認してください。これは、Javaのkeytoolを行うには手間の一種ですが、使用して二重にチェックすることができます
keytool -exportcert -keystore conf/truststore -alias [alias of trusted cert] | openssl x509 -noout -subject -inform der
このすべてがチェックアウトし、それはまだ働いていない場合、それはあなたのために、トラブルシューティングするためのopensslのs_clientを使用して価値があります通常、そこから多くのトラブルシューティング情報を取得します。そのためには、あなたがPKCS12ファイル内の証明書からキーを分離する必要があります:opensslのはスマートであるため、
openssl pkcs12 -in [PKCS12 file] -out [whatever].key
openssl s_client -tls1 -connect localhost:443 -cert [whatever].key -key [whatever].key
(あなたは「-cert」と「-key」引数に同じファイルを使用することができますソースファイルの "BEGIN CERTIFICATE"と "BEGIN RSA PRIVATE KEY"区切り文字を十分に探します)。私はs_clientを使用してクライアント証明書が期限切れになったことを知らせるまでログアウトしていなかったり、他の場所に出力したりするまで、クライアント証明書には不満がありました。
また、あなたは強くTomcatの上にApacheを使用するように設定を移行する検討する必要があります - Apacheはたくさんより柔軟性があり、そしてそれはTomcatがあるよりも、SSLのconfifgurationに来るときあなたたくさんより多くのフィードバックを提供します。
クライアント認証用のサーバーをセットアップ済みですか?コネクタにはどのような種類のキーストアがありますか? – Cratylus
jks、私はそれ自身の生成されたキーで動作し、pfxキーでopenssl s_clientを使って動作するため、問題はないと思います。 firefoxを使ってpfxで作業しています(Windowsストアのキー付き)またはjava-appでp12キーストアを指しています – Deo
pfxを記述する方法が空であるか破損しています。その内容を表示しようとしましたか? – Cratylus