PowerProtect: Verificatie mislukt via Active Directory na een upgrade naar versie 19.19
Summary: Gebruikers kunnen zich niet aanmelden bij PowerProtect Data Manager met Active Directory-referenties.
Symptoms
Gebruikers kunnen zich niet verifiëren met hun Microsoft Active Directory (AD)-referenties na het upgraden van PowerProtect naar versie 19.19.0-15.
Er wordt een foutmelding weergegeven die lijkt op het volgende:
"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."
Foutmeldingen zoals het volgende zijn aanwezig in het keycloak.log-bestand op het PowerProtect-apparaat:
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
Dit gedrag wordt waargenomen wanneer hoge beschikbaarheid is geconfigureerd voor domeincontrollers. In PowerProtect Data Manager 19.19 is er een grote architectuurwijziging met betrekking tot de manier waarop authenticatie en gebruikersbeheer werken. Als onderdeel van de upgrade wordt de bestaande configuratie gemigreerd naar de nieuwe architectuur. Na de migratie, bij afwezigheid van het basis-CA-certificaat dat wordt gebruikt voor domeincontrollers van de PowerProtect Data Manager-vertrouwensketenbreuk
Validatie mislukt bij het wijzigen van de Active Directory-verbinding om automatisch het basis-CA-certificaat naar de vertrouwensketen te halen.
Resolution
In de PowerProtect Data Manager-releases na 19.19.0-15 zijn de architecturale wijzigingen van invloed op de validatie van de certificaatketen. Voer de volgende stappen uit om een basis-CA-certificaat toe te voegen aan de vertrouwensketen:
- Zorg ervoor dat het basis-CA-certificaatbestand dat wordt gebruikt op domeincontrollers beschikbaar is.
- Verwijder de bestaande verbinding met Active Directory.
- Selecteer de knop Toevoegen onder de pagina Directory-instellingen.
- Selecteer AD, vink het selectievakje Beveiligde verbinding aan en vul de gegevens van Active Directory in.
- Selecteer in het gedeelte Certificaat de optie Certificaat uploaden.
- Als u de optie Upload Certificate selecteert, kunt u het root- of hostcertificaat uploaden of plakken.
- Selecteer de optie Certificaatbestand uploaden.
- Selecteer het certificeringstype, of dit nu Host, ICA of Root is. Als u een Root CA-certificaat moet uploaden, selecteert u de optie Root.
- Klik op Certificaatbestand uploaden en selecteer het certificaat op uw systeem/server.
- Selecteer de optie "Paste Certificate".
- Selecteer het certificeringstype, of dit nu Host, ICA of Root is. Als er een basis-CA-certificaat wordt toegevoegd, selecteert u de optie Root.
- Plak het certificaat in het lege veld.
- Controleer de informatie onder Geavanceerde instellingen weergeven en selecteer de knop Toepassen.
- Ga naar het menu Beheer , selecteer Certificaten gevolgd door het tabblad Externe servers . Controleer of u een basiscertificeringscertificaat kunt vinden met de status Goedgekeurd voor het gebruikte poortnummer (636 is de standaardpoort).
- Ga naar de pagina Gebruikersgroepen onder het gedeelte Toegangsbeheer om gebruikers en groepen toe te voegen vanuit Active Directory.
- Test door authenticatie met behulp van Active Directory-referenties. Gebruikers moeten userPrincipalName (UPN) gebruiken bij het toevoegen van de gebruikersnaam op de aanmeldingspagina.
De PowerProtect Data Manager beveiligingsconfiguratiehandleiding bevat meer opties voor LDAP- (Lightweight Directory Access Protocol) of AD-verbindingen.
Additional Information
Vanaf PowerProtect Data Manager 19.19 wordt aanbevolen om in de gebruikersnaam userPrincipalName (UPN) te gebruiken die is ingesteld in de Active Directory. De domeinnaam die in UPN wordt gebruikt, kan verschillen van de naam die wordt gebruikt bij het toevoegen van domein aan de PowerProtect Data Manager. In eerdere versies moesten gebruikers een domeinnaam toevoegen die was toegevoegd aan PowerProtect Data Manager.
Tijdelijke oplossing
De bestaande Microsoft Active Directory-verbinding kan worden verwijderd en toegevoegd als LDAP zonder gebruik te maken van SSL (Secure Sockets Layer). Hierdoor kunnen de gebruikers zich verifiëren zonder de certificaatketen te gebruiken.