PowerProtect: Godkendelse mislykkes ved brug af Active Directory efter opgradering til version 19.19
Summary: Brugere kan ikke logge på PowerProtect Data Manager med Active Directory-legitimationsoplysninger.
Symptoms
Brugere kan ikke godkende ved hjælp af deres Microsoft Active Directory-legitimationsoplysninger (AD) efter opgradering af PowerProtect til version 19.19.0-15.
Der vises en fejlmeddelelse i stil med følgende:
"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."
Fejlmeddelelse i stil med følgende findes i keycloak.log-filen på PowerProtect-enheden:
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
Denne funktionsmåde ses, når høj tilgængelighed er konfigureret for domænecontrollere. I PowerProtect Data Manager 19.19 er der en større arkitekturændring med hensyn til, hvordan godkendelse og brugeradministration fungerer. Som en del af opgraderingen overføres den eksisterende konfiguration til den nye arkitektur. I mangel af det Root CA-certifikat, der bruges til domænecontrollere fra PowerProtect Data Manager-tillidskæden, afbrydes
valideringen efter migreringen, når Active Directory-forbindelsen ændres, så CA-rodcertifikatet automatisk trækkes ind i tillidskæden.
Resolution
I PowerProtect Data Manager-versionerne efter 19.19.0-15 påvirker de arkitektoniske ændringer valideringen af certifikatkæden. Udfør følgende trin for at føje et rodnøglecentercertifikat til tillidskæden:
- Sørg for, at den CA-rodcertifikatfil, der bruges på domænecontrollere, er tilgængelig.
- Fjern den eksisterende forbindelse til Active Directory.
- Vælg knappen Tilføj på siden Biblioteksindstillinger.
- Vælg AD, marker afkrydsningsfeltet Sikker forbindelse, og udfyld Active Directory-detaljer.
- Under afsnittet Certifikat skal du vælge indstillingen Upload certifikat.
- Hvis du vælger indstillingen Overfør certifikat , kan du uploade eller indsætte roden eller værtscertifikatet.
- Vælg indstillingen Upload certifikatfil.
- Vælg certificeringstypen, uanset om det er Host, ICA eller Root. Hvis et Root CA-certifikat skal uploades, skal du vælge Root option.
- Klik på Upload certifikatfil, og vælg certifikatet fra dit system/din server.
- Vælg indstillingen "Indsæt certifikat".
- Vælg certificeringstypen, uanset om det er Host, ICA eller Root. Hvis der tilføjes et rodnøglecenter, skal du vælge indstillingen Rod.
- Indsæt certifikatet i det tomme felt.
- Gennemse oplysningerne under Vis avancerede indstillinger, og vælg knappen Anvend.
- Gå til menuen Administration , vælg Certifikater efterfulgt af fanen Eksterne servere . Bekræft, at du kan finde et rodnøglecentercertifikat angivet med tilstanden Godkendt for det anvendte portnummer (636 er standardporten).
- Gå til siden Brugergrupper under afsnittet Adgangskontrol for at tilføje brugere og grupper fra Active Directory.
- Test ved hjælp af godkendelse ved hjælp af Active Directory-legitimationsoplysninger. Brugere skal bruge userPrincipalName (UPN), mens de tilføjer brugernavn på loginsiden.
Sikkerhedskonfigurationsvejledningen til PowerProtect Data Manager indeholder flere indstillinger for LDAP- (Lightweight Directory Access Protocol) eller AD-forbindelser.
Additional Information
Fra og med PowerProtect Data Manager 19.19 anbefales det i brugernavnet at bruge userPrincipalName (UPN), der er angivet i Active Directory. Det domænenavn, der bruges i UPN, kan være forskelligt fra det navn, der blev brugt under tilføjelse af domæne til PowerProtect Data Manager. I tidligere versioner skulle brugerne tilføje et domænenavn, der blev føjet til PowerProtect Data Manager.
Løsning
Den eksisterende Microsoft Active Directory-forbindelse kan fjernes og tilføjes som LDAP uden brug af SSL (Secure Sockets Layer). Dette giver brugerne mulighed for at godkende uden at bruge certifikatkæden.