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
- 任意のヘルプ/アイデアがはるかに高く評価されるだろう!
スタックトレースから、 'TrustManagerFactoryImpl.getCacertsKeyStore()'の中で失敗しているように見えます。 '%JAVA_HOME%\あなたが 'cacerts'という名前のファイルをそこに見ることができますか? –
' cacerts'ファイルがある場合、おそらくそのパスワードはデフォルト以外のもの、「changeit」です。 –
はい私(新しいJavaのインストール後でも) 'cacerts'や' jssecacerts'を使用させようとしましたが、常に同じエラーで失敗します。これはカスタムストアを使用しようとした理由です(okをロードするキーストアと同じです) – gezzahead