LDAP サーバーへの接続が失敗し「有効な証明書が見つかりません (Could not find a valid certificate)」が表示される。Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } インスタンスでの LDAP サーバー接続のテスト時に、テストが失敗すると、次のエラーを表示します。 ldaps://xxx.xxx.xxx.xxx:636 有効な証明書が見つかりません (ldaps://xxx.xxx.xxx.xxx:636 Could not find a valid certificate) または ldap://xxx.xxx.xxx.xxx:636 有効な証明書が見つかりません (ldap://xxx.xxx.xxx.xxx:636 Could not find a valid certificate) ノードのログに、次のエラーが表示される場合があります。 2020-12-28 07:49:51 (394) worker.6 worker.6 txid=e7ba8baa1b99 SEVERE *** ERROR *** Cannot recover keyjava.security.UnrecoverableKeyException: Cannot recover key at sun.security.provider.KeyProtector.recover(KeyProtector.java:315) at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:141) at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:56) at sun.security.provider.KeyStoreDelegator.engineGetKey(KeyStoreDelegator.java:96) at sun.security.provider.JavaKeyStore$DualFormatJKS.engineGetKey(JavaKeyStore.java:70) at java.security.KeyStore.getKey(KeyStore.java:1023) at sun.security.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:133) at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:70) at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:256) at com.glide.certificates.DBKeyStoreSocketFactory.createKeyManagers(DBKeyStoreSocketFactory.java:138) at com.glide.certificates.DBKeyStoreSocketFactory.initSSLContext(DBKeyStoreSocketFactory.java:116) at com.glide.certificates.DBKeyStoreSocketFactory.init(DBKeyStoreSocketFactory.java:106) at com.glide.certificates.DBKeyStoreSocketFactory.init(DBKeyStoreSocketFactory.java:98) at com.glide.certificates.DBKeyStoreSocketFactory.<init>(DBKeyStoreSocketFactory.java:78) at com.glide.sys.ldap.LDAP.setUseDBKeyStore(LDAP.java:109) at com.glide.sys.ldap.LDAP.setup(LDAP.java:97) at sun.reflect.GeneratedMethodAccessor710.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:138) at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:300) at org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2612) at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:85) at org.mozilla.javascript.gen._refname__1064._c_testLDAPServers_1(<refname>:17) at org.mozilla.javascript.gen._refname__1064.call(<refname>) at org.mozilla.javascript.ScriptRuntime.doCall2(ScriptRuntime.java:2678) at org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2617) at org.mozilla.javascript.optimizer.OptRuntime.callName0(OptRuntime.java:74) at org.mozilla.javascript.gen._refname__1064._c_script_0(<refname>:1) at org.mozilla.javascript.gen._refname__1064.call(<refname>) at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:563) at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3459) at org.mozilla.javascript.gen._refname__1064.call(<refname>) at org.mozilla.javascript.gen._refname__1064.exec(<refname>) at com.glide.script.ScriptEvaluator.execute(ScriptEvaluator.java:279) at com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:118) at com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:82) at com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:73) at com.glide.script.Evaluator.evaluateString(Evaluator.java:96) at com.snc.automation.ScriptJob.executeInSingleDomain(ScriptJob.java:57) at com.snc.automation.ScriptJob.execute(ScriptJob.java:41) at com.glide.schedule.JobExecutor.lambda$executeJob$0(JobExecutor.java:113) at com.glide.schedule.JobExecutor.executeJob(JobExecutor.java:116) at com.glide.schedule.JobExecutor.execute(JobExecutor.java:100) at com.glide.schedule_v2.SchedulerWorkerThread.executeJob(SchedulerWorkerThread.java:300) at com.glide.schedule_v2.SchedulerWorkerThread.lambda$process$0(SchedulerWorkerThread.java:188) at com.glide.worker.TransactionalWorkerThread.executeInTransaction(TransactionalWorkerThread.java:35) at com.glide.schedule_v2.SchedulerWorkerThread.process(SchedulerWorkerThread.java:188) at com.glide.schedule_v2.SchedulerWorkerThread.run(SchedulerWorkerThread.java:102) 2020-12-28 07:49:51 (396) worker.6 worker.6 txid=e7ba8baa1b99 WARNING *** WARNING *** LDAP API - LDAPLogger : Unable to load certificates from DB2020-12-28 07:49:51 (396) worker.6 worker.6 txid=e7ba8baa1b99 WARNING *** WARNING *** LDAP: Unable to load certificates from DB[...]2020-12-28 07:49:51 (544) worker.6 worker.6 txid=e7ba8baa1b99 LDAP API - LDAPLogger : xxx.xxx.xxx.xxx:6362020-12-28 07:49:51 (544) worker.6 worker.6 txid=e7ba8baa1b99 LDAP API - LDAPLogger : Communication error: xxx.xxx.xxx.xxx:6362020-12-28 07:49:51 (544) worker.6 worker.6 txid=e7ba8baa1b99 LDAP API - LDAPLogger : 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 target2020-12-28 07:49:51 (549) worker.6 worker.6 txid=e7ba8baa1b99 SEVERE *** ERROR *** LDAP: LDAP Server: LDAP Server URL: ldap://xxx.xxx.xxx.xxx:636/ failed scheduled connection test. ErrorCode: 10402. ErrorMessage: Could not find a valid certificate. Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 全て Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } この問題には 2 つの既知の原因があります。 原因 #1 LDAPサーバーがインスタンスに有効な証明書チェーンを提示していません。以下の原因が考えられます。 リーフ証明書または中間証明書/ルート証明書の有効期限が切れている。チェーンに中間証明書/ルート証明書がない。チェーンに不正な証明書/関連のない証明書が含まれている。チェーンに自己署名証明書が含まれており、その証明書がインスタンスで認識されない。(ただし、これはすべてを網羅したリストではありません) LDAPS接続用の証明書の設定方法については、こちらのドキュメント「証明書」をご覧ください。 原因 #2 x509 証明書モジュール (sys_certificate リスト ビュー) で無効な証明書が定義されています。LDAP サーバーレコードには「証明書リスト (Certificate List)」という関連リンクがあります。このリンクを選択すると、x509 証明書モジュール (sys_certificate リストビュー) に移動します。 これは、システムがそのリスト内のすべての証明書をチェックして、LDAP SSL 接続に有効な証明書を見つけることを意味します。証明書のリストの確認時、SSL 接続に対して有効な証明書に到達する前にシステムが無効な証明書を検出すると、エラーが発生します。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 原因 #1 の場合、この問題を解決するには次の 2 つの方法があります。 システムプロパティ com.glide.communications.httpclient.verify_hostname を false に設定し、com.glide.communications.trustmanager_trust_all プロパティは true のままにします。この設定により、システムはインスタンスに対し、証明書に関して再び認証局 CA を信頼するようになります。これにより、インスタンスは自己発行の証明書を受け入れるようになります。ただし、インスタンスのセキュリティ設定が低下するため、本番環境インスタンスではこの方法は推奨されません。推奨される方法は、証明書自体を修正することです。LDAP サーバーによって提示される証明書チェーンを確認し、問題があれば修正してください。自己署名証明書を使用している場合は、上記の証明書に関するドキュメント(証明書)に従って、中間証明書/ルート証明書をインスタンスにアップロードしてください。 原因 #2 の場合 x509 証明書モジュール (sys_certificate リストビュー) に移動します。リストで各証明書を開き、「ストア/証明書を検証 (Validate Stores/Certificates)」関連リンクを選択します。証明書の検証に失敗する場合は、Active = false に設定し、LDAP 接続を再度確認します。問題の原因となっている 1 つまたは複数の証明書が見つかるまで、各証明書を無効にします。 問題のある証明書が見つかったら、当該の証明書を非アクティブのままにするか、問題を修正して有効にします。たとえば、キーストアの正しいパスワードを入力するか、キーストアの添付ファイルを追加するか、PEM 証明書の値を有効な値 (期限切れではない値など) に更新します。証明書が検証に合格したら、再度アクティブにすることができます。 証明書の処理が完了したら、LDAP 接続をもう一度チェックして、正常に接続されていることを確認します。