2012-05-07 24 views
14

Tomcat 6上で動作するアプリケーションをSSL経由でLDAPサーバーに接続しようとしています。Javaキーストアに証明書をインポートしましたが、JVMは新しい証明書を無視します

私が使用してキーストアにサーバーの証明書をインポート:

C:\Program Files\Java\jdk1.6.0_32\jre\lib\security>keytool -importcert -trustcacerts -file mycert -alias ca_alias -keystore "c:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts" 

私はSSLのデバッグでTomcatを起動Tomcatが正しい証明書ファイルを使用して、ログによると、オン:

trustStore is: C:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts 

しかし、 cacertsファイル内の他のすべての本命がログに出力されている - - 、Tomcatは、私はちょうど輸入証明書を追加しないと、接続は失敗します。

handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

Tomcatを再起動することは役に立ちません。 keytool -listコマンドを使って新しい証明書が実際にファイルに存在することを確認しました。

なぜTomcatは新しい証明書を無視し続けるのですか?

EDIT:

は、問題は、Windows 7 VirtualStoreによって引き起こされたものと思われます。 Keytoolはcacertファイルの新しいコピーを作成し、Tomcatは元のファイルを使用しました。

+0

ファイル 'mycert'には証明書チェーン全体が含まれていますか? Javaは、信頼パス全体がストア内に存在することを望んでいます。 – Romain

+0

あなたの 'C:\ Users \ YourAccountName'に行くと、ファイル名' .keystore'がそこにあり、それを開いて前のファイルを削除してから、もう一度やりました。うまくいけばそれはあなたのために物事を並べ替えるでしょう:-) –

+1

@Romainいいえ、信頼できる証明書はチェーンとは関係ありません。信頼できる証明書としてインポートされた証明書は、信頼されたルート証明書のように扱われます。 – emboss

答えて

4

同じCN情報で別名が異なるキーがあるかどうかを確認します。

私は、証明書の新しいバージョンをインポートしようとしましたが、キーストア内の古いバージョンを去ったとき、前に同様の問題がありました。私のJavaプログラムでは、キーストア内の最初に一致するCNキー(古い有効期限切れのキー)が見つかるだけで、CNにもマッチした新しいキーがあったとしても、そのキーを使用しようとします。

また、キーストアに認証ルート証明書(および該当する場合は中間証明書)が存在することを確認してください。 VerisignやGlobalsignなどの主要セキュリティプロバイダの1つに対して認証を行っている場合は、通常、ルート証明書と中間証明書を提供します。これらの証明書がすでにキーストアに存在する場合は、それらがまだ有効であることを確認してください。証明書の検証方法を理解できるように、個人証明書からすべての証明書を認証チェーンのルートまで、キーストアに存在する必要があります。あなたは説明何

+0

それは問題ではないようですが、提案に感謝 – tputkonen

+0

私は私の答えを編集しました。証明機関のルート証明書がキ​​ーストアに存在することを確認しましたか? – wattostudios

+1

すでにトラストストアにある証明書の上に証明書を追加する必要はありません。ストア内のすべての証明書は、それ以上検証することなく信頼されます。しかし、エイリアスの良いアドバイス! – emboss

0

はI'veがcmd.exeを使用するときに取得およびWindows Serverの管理者グループのメンバーであるが通常のユーザーされて正確に何です。変更モードをcacertsファイルに適用するには、管理モードでcmd.exeを起動する必要があります。少なくともWin2k8 OSでは。

あなたは、このキャレットがkeytool.exe -listにあなたが表示されます実行しない場合は、新たに追加されたcertsのを見るが、Tomcatはwon'tそれらを参照してください。なぜそうそうだ。しかし、管理者として起動したcmd.exeを追加すると、Tomcatは新しく追加された証明書を使っても問題ありません。

また、Tomcatがcacertsファイルから読み込むかを確認するDjavax.net.debug="ssl,handshake"を使用することができます。

14

証明書をキーストアにインポートした後、JVMを再起動する必要があります。

関連する問題