2017-12-15 10 views
0

WebアプリケーションでLDAPSを使用できるようにTomcatを設定しようとしています。 UATサーバー上ではすべて正常に動作しますが、何らかの理由で本番サーバーがトラストストアを初期化できません。 私は(-Djavax.net.debug=all経由)のデバッグをオンにしているとエラーがある:失敗したのinitTrustStoreはinitに失敗しますが、KeyStoreは成功しません。

デフォルトコンテキスト:にjava.io.IOException:キーストアが改ざん、またはパスワードが

間違ってあった私は100です私がkeytoolを実行し、トラストストアの内容を列挙していると同時に、動作中のUATサーバから同じファイルを取得したので、パスワードが正しいことを確認してください。

私は、Tomcatがキーストアとトラストストアの両方に同じストアファイルを使用するように設定しました(これは典型的な設定ではありませんが、私の理解からファイルフォーマットなどは同じなので両方ロードする必要があります)。

-Djavax.net.ssl.trustStorePassword=xxx -Djavax.net.ssl.trustStore=C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin\.keystore -Djavax.net.ssl.keyStorePassword=xxx -Djavax.net.ssl.keyStore=C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin\.keystore

とキーストアは動作します:

キーストアがあります。C:\ Program Files \ Apache Software Foundationの\ Tomcatを7.0 \ bin.keystore
キーストアのタイプがある:JKSトラストストアが失敗しながら同じファイルおよびパスワードの.. Tomcatの

: キーストアプロバイダは、次のとおりです。タイプてSunX509 の
のinitストア
のinitのKeyManager ***
はのためのキーを見つけました!

トラストストアはC:\ Program Files \ Apache Software Foundationの\ Tomcatの7.0 \ bin.keystore
trustStoreにタイプがある:
trustStoreにプロバイダがあるJKS:
は のinitトラスト
デフォルトのコンテキストinitに失敗しました:java.io.IOException:キーストアが改ざんされたか、パスワードが間違っていた

Webアプリケーションから、スタックトレースには詳細がいくつかあります。私は完全に途方に暮れてよJavaのTrustManagerFactoryImplのソースとログとそれにマッチしたが、それは動作を説明していない)

javax.naming.CommunicationException: <ldap url>:636 [Root exception is java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)] 
    at com.sun.jndi.ldap.Connection.<init>(Unknown Source) 
    at com.sun.jndi.ldap.LdapClient.<init>(Unknown Source) 
    at com.sun.jndi.ldap.LdapClient.getInstance(Unknown Source) 
    at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source) 
    at com.sun.jndi.ldap.LdapCtx.<init>(Unknown Source) 
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source) 
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source) 
    at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source) 
    at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source) 
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) 
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) 
    at javax.naming.InitialContext.init(Unknown Source) 
    at javax.naming.InitialContext.<init>(Unknown Source) 
    at javax.naming.directory.InitialDirContext.<init>(Unknown Source) 
    at com.mycompany.fde.util.LDAPHelper.initialBindSSL(LDAPHelper.java:116) 
    at com.mycompany.fde.util.LDAPHelper.<init>(LDAPHelper.java:91) 
    at com.mycompany.fde.util.LDAPHelper.getInstance(LDAPHelper.java:58) 
    at com.mycompany.fde.server.work.StartupWork.startupStage1(StartupWork.java:224) 
    at com.mycompany.fde.server.work.StartupWork.call(StartupWork.java:121) 
    at com.mycompany.fde.server.work.StartupWork.call(StartupWork.java:47) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext) 
    at javax.net.ssl.DefaultSSLSocketFactory.throwException(Unknown Source) 
    at javax.net.ssl.DefaultSSLSocketFactory.createSocket(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.sun.jndi.ldap.Connection.createSocket(Unknown Source) 
    ... 24 more 
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext) 
    at java.security.Provider$Service.newInstance(Unknown Source) 
    at sun.security.jca.GetInstance.getInstance(Unknown Source) 
    at sun.security.jca.GetInstance.getInstance(Unknown Source) 
    at javax.net.ssl.SSLContext.getInstance(Unknown Source) 
    at javax.net.ssl.SSLContext.getDefault(Unknown Source) 
    at javax.net.ssl.SSLSocketFactory.getDefault(Unknown Source) 
    ... 29 more 
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect 
    at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source) 
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source) 
    at java.security.KeyStore.load(Unknown Source) 
    at sun.security.ssl.TrustManagerFactoryImpl.getCacertsKeyStore(Unknown Source) 
    at sun.security.ssl.SSLContextImpl$DefaultSSLContext.getDefaultTrustManager(Unknown Source) 
    at sun.security.ssl.SSLContextImpl$DefaultSSLContext.<init>(Unknown Source) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    ... 35 more 
Caused by: java.security.UnrecoverableKeyException: Password verification failed 
    ... 45 more 

- 任意のヘルプ/アイデアがはるかに高く評価されるだろう!

+0

スタックトレースから、 'TrustManagerFactoryImpl.getCacertsKeyStore()'の中で失敗しているように見えます。 '%JAVA_HOME%\あなたが 'cacerts'という名前のファイルをそこに見ることができますか? –

+0

' cacerts'ファイルがある場合、おそらくそのパスワードはデフォルト以外のもの、「changeit」です。 –

+0

はい私(新しいJavaのインストール後でも) 'cacerts'や' jssecacerts'を使用させようとしましたが、常に同じエラーで失敗します。これはカスタムストアを使用しようとした理由です(okをロードするキーストアと同じです) – gezzahead

答えて

1

皆さん、ありがとうございました。私はいくつかの未知の理由で、誰かが実際にCatalina.properties(trust経由のパスワードをjavax.net.ssl.trustStorePassword経由で設定していたことがわかりました。これは、Tomcat UIで設定されたjava変数よりも優先されているようです:(

-1

トラストストアのパスワードを入力する必要はありません。だから、しないでください。

NB keytool -listパスワードはまったく必要ありません。正しいパスワードを知っていることを証明するものではありません。一方、エラーは、ですパスワードが間違っている証拠です。

キーストアとトラストストアの両方に同じファイルを使用しないでください。

+1

あなたのコードが 'KeyStore.load'を呼び出すときにパスワードを省略することができますが、' SSLContext'がデフォルトのコンテキストを作成するときはそうではありません。あなたの唯一の選択はpwを指定するか、またはデフォルトを使用させることです。同じファイルを使うのは悪い考えですが、ここではデバッグのためだけに見えます。 –

関連する問題