PowerProtect: Todennus epäonnistuu Active Directoryn käytössä versioon 19.19 päivittämisen jälkeen
Summary: Käyttäjät eivät voi kirjautua PowerProtect Data Manageriin Active Directory -tunnistetiedoilla.
Symptoms
Käyttäjät eivät voi suorittaa todennusta Microsoft Active Directory (AD) -tunnistetiedoillaan PowerProtectin päivittämisen jälkeen versioon 19.19.0-15.
Näyttöön tulee seuraavankaltainen virheilmoitus:
"Failed to authenticate the user with identity provider. Please check for any network connectivity issues with the external identity provider if configured. Also check for expired certificates or credential issues with the configured provider."
PowerProtect-laitteen keycloak.log tiedostossa on seuraavankaltainen virheilmoitus:
2025-04-02 01:11:20,715 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (executor-thread-23) Uncaught server error: org.keycloak.models.ModelException: LDAP Query failed at org.keycloak.storage.ldap.idm.query.internal.LDAPQuery.getResultList(LDAPQuery.java:178) at org.keycloak.storage.ldap.idm.query.internal.LDAPQuery.getFirstResult(LDAPQuery.java:185) at org.keycloak.storage.ldap.LDAPStorageProvider.loadLDAPUserByUsername(LDAPStorageProvider.java:1052) at org.keycloak.storage.ldap.LDAPStorageProvider.getUserByUsername(LDAPStorageProvider.java:649) at org.keycloak.storage.ldap.LDAPStorageProvider.getUserById(LDAPStorageProvider.java:373) at org.keycloak.storage.UserStorageManager.getUserById(UserStorageManager.java:395) at org.keycloak.models.cache.infinispan.UserCacheSession.getUserById(UserCacheSession.java:222) at org.keycloak.models.sessions.infinispan.PersistentUserSessionProvider.wrap(PersistentUserSessionProvider.java:642) at org.keycloak.models.sessions.infinispan.PersistentUserSessionProvider.getUserSession(PersistentUserSessionProvider.java:287) at org.keycloak.models.sessions.infinispan.PersistentUserSessionProvider.getUserSession(PersistentUserSessionProvider.java:282) at org.keycloak.services.managers.AuthenticationManager.verifyIdentityToken(AuthenticationManager.java:1493) at org.keycloak.services.managers.AuthenticationManager.authenticateIdentityCookie(AuthenticationManager.java:862) at org.keycloak.services.managers.AuthenticationSessionManager.getUserSessionFromAuthenticationCookie(AuthenticationSessionManager.java:259) at org.keycloak.protocol.AuthorizationEndpointBase.createAuthenticationSession(AuthorizationEndpointBase.java:184) at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.process(AuthorizationEndpoint.java:193) at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.buildGet(AuthorizationEndpoint.java:115) at org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint$quarkusrestinvoker$buildGet_4b690b27439f19dd29733dc5fd4004f24de0adb6.invoke(Unknown Source) at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29) at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141) at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147) at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:635) at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516) at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11) at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.keycloak.models.ModelException: Querying of LDAP failed org.keycloak.storage.ldap.idm.query.internal.LDAPQuery@29377815 at org.keycloak.storage.ldap.idm.store.ldap.LDAPIdentityStore.fetchQueryResults(LDAPIdentityStore.java:294) at org.keycloak.storage.ldap.idm.query.internal.LDAPQuery.getResultList(LDAPQuery.java:174) ... 27 more Caused by: javax.naming.CommunicationException: yourcompany.com:636 [Root exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] at java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:251) at java.naming/com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:141) at java.naming/com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1620) at java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2848) at java.naming/com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:349) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxFromUrl(LdapCtxFactory.java:229) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:189) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:247) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84) at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:520) at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) at java.naming/javax.naming.InitialContext.init(InitialContext.java:236) at java.naming/javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154) at org.keycloak.storage.ldap.idm.store.ldap.LDAPContextManager.createLdapContext(LDAPContextManager.java:74) at org.keycloak.storage.ldap.idm.store.ldap.LDAPContextManager.getLdapContext(LDAPContextManager.java:93) at org.keycloak.storage.ldap.idm.store.ldap.LDAPOperationManager.execute(LDAPOperationManager.java:709) at org.keycloak.storage.ldap.idm.store.ldap.LDAPOperationManager.execute(LDAPOperationManager.java:704) at org.keycloak.storage.ldap.idm.store.ldap.LDAPOperationManager.search(LDAPOperationManager.java:255) at org.keycloak.storage.ldap.idm.store.ldap.LDAPIdentityStore.fetchQueryResults(LDAPIdentityStore.java:278) ... 28 more Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:130) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:378) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:316) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:647) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:467) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:363) at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:393) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:476) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:447) at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:201) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426) at java.naming/com.sun.jndi.ldap.Connection.initialSSLHandshake(Connection.java:370) at java.naming/com.sun.jndi.ldap.Connection.createSocket(Connection.java:288) at java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:230) ... 47 more Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:388) at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:271) at java.base/sun.security.validator.Validator.validate(Validator.java:256) at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:230) at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:132) at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:631) ... 61 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:148) at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:129) at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:383) ... 66 more
Cause
Tämä ongelma näkyy, kun toimialueen ohjauskoneille on määritetty High Availability. PowerProtect Data Manager 19.19 -version todennukseen ja käyttäjien hallintaan on tehty merkittävä arkkitehtuurimuutos. Aiemmin luotu kokoonpano siirretään uuteen arkkitehtuuriin päivityksen yhteydessä. Siirron jälkeen vahvistus epäonnistuu, kun toimialueen ohjauskoneille PowerProtect Data Managerin ohjauskoneessa käytettyä päävarmennetta ei ole
, ja vahvistus epäonnistuu, kun Active Directory -yhteyttä muokataan niin, että päävarmenne vedetään automaattisesti luottamusketjuun.
Resolution
PowerProtect Data Manager -versioissa versioiden 19.19.0-15 jälkeen arkkitehtuurimuutokset vaikuttavat varmenneketjun validointiin. Lisää varmenteiden päämyöntäjän varmenne luottamusketjuun seuraavasti:
- Varmista, että toimialueen ohjauskoneissa käytettävä CA-juurivarmennetiedosto on käytettävissä.
- Poista olemassa oleva yhteys Active Directoryyn.
- Valitse Hakemistoasetukset-sivullaLisää-painike.
- Valitse AD, valitse Suojattu yhteys -valintaneliö ja täytä Active Directoryn tiedot.
- Valitse Certificate-osassaUpload Certificate.
- Kun valitset Lataa varmenne -vaihtoehdon, voit ladata tai liittää pää- tai isäntävarmenteen.
- Valitse Lataa varmennetiedosto -vaihtoehto.
- Valitse varmenteen tyyppi, onko se Host, ICA vai Root. Jos varmenteen päävarmenne ladataan, valitse Root-vaihtoehto.
- Valitse Lataa varmennetiedosto ja valitse varmenne järjestelmästäsi/palvelimestasi.
- Valitse "Liitä varmenne" -vaihtoehto.
- Valitse varmenteen tyyppi, onko se Host, ICA vai Root. Jos varmenteen päävarmenne lisätään, valitse root-vaihtoehto.
- Liitä varmenne tyhjään kenttään.
- Tarkista tiedot Näytä lisäasetukset -kohdasta ja valitse Käytä-painike.
- Siirry Hallinta-valikkoon ja valitse ensin Varmenteet ja sitten Ulkoiset palvelimet -välilehti. Varmista, että löydät käytetyn porttinumeron kohdalla näkyvän päävarmenteen CA-varmenteen tilan (oletusportti on 636).
- Siirry Käytönvalvonta-osion Käyttäjäryhmät-sivulle lisätäksesi käyttäjiä ja ryhmiä Active Directorysta.
- Testaa todentamalla Active Directory -tunnistetiedoilla. Käyttäjien tulee käyttää täydellistä käyttäjätunnusta (UPN) lisätessään käyttäjänimeä kirjautumissivulla.
PowerProtect Data Manager Security Configuration Guide sisältää lisää vaihtoehtoja LDAP (Lightweight Directory Access Protocol)- tai AD-yhteyksille.
Additional Information
PowerProtect Data Manager 19.19 -versiosta alkaen käyttäjänimessä suositellaan käytettäväksi täydellistä käyttäjätunnusta (UPN), joka on määritetty Active Directoryssa. UPN:ssä käytettävä toimialuenimi voi olla eri kuin nimi, jota käytetään lisättäessä toimialuetta PowerProtect Data Manageriin. Aiemmissa versioissa käyttäjien oli lisättävä toimialuenimi, joka lisättiin PowerProtect Data Manageriin.
Vaihtoehtoinen menetelmä
Nykyinen Microsoft Active Directory -yhteys voidaan poistaa ja lisätä LDAP:nä ilman SSL (Secure Sockets Layer) -suojausta. Näin käyttäjät voivat suorittaa todennuksen käyttämättä varmenneketjua.