PowerProtect: Authentifizierung schlägt mit Active Directory nach dem Upgrade auf Version 19.19 fehl
Summary: Nutzer können sich nicht mit Active Directory-Zugangsdaten beim PowerProtect Data Manager anmelden.
Symptoms
Nutzer können sich nach dem Upgrade von PowerProtect auf Version 19.19.0-15 nicht mit ihren Microsoft Active Directory (AD)-Zugangsdaten authentifizieren.
Es wird eine Fehlermeldung ähnlich der folgenden angezeigt:
"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."
Eine Fehlermeldung ähnlich der folgenden ist in der keycloak.log Datei auf der PowerProtect Appliance vorhanden:
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
Dieses Verhalten tritt auf, wenn Hochverfügbarkeit für Domänencontroller konfiguriert ist. In PowerProtect Data Manager 19.19 gibt es eine wichtige Architekturänderung in Bezug auf die Funktionsweise der Authentifizierung und des Nutzermanagements. Im Rahmen des Upgrades wird die vorhandene Konfiguration zur neuen Architektur migriert. Wenn nach der Migration das Root-CA-Zertifikat, das für Domain-Controller aus der PowerProtect Data Manager-Instanz verwendet wird, nicht vorhanden ist, wird
die Validierung unterbrochen, wenn die Active Directory-Verbindung so geändert wird, dass das Zertifikat der Stammzertifizierungsstelle automatisch in die Vertrauenskette übertragen wird.
Resolution
In den PowerProtect Data Manager-Versionen nach 19.19.0-15 wirken sich die Änderungen an der Architektur auf die Validierung der Zertifikatskette aus. Führen Sie die folgenden Schritte aus, um der Vertrauenskette ein Stammzertifizierungsstellenzertifikat hinzuzufügen:
- Stellen Sie sicher, dass die auf Domänencontrollern verwendete Root-CA-Zertifikatdatei verfügbar ist.
- Entfernen Sie die vorhandene Verbindung zum Active Directory.
- Wählen Sie die Schaltfläche Hinzufügen auf der Seite "Verzeichniseinstellungen" aus.
- Wählen Sie AD aus, aktivieren Sie das Kontrollkästchen Secure Connection und geben Sie die Active Directory-Details ein.
- Wählen Sie im Abschnitt Zertifikat die Option Zertifikat hochladen aus.
- Wenn Sie die Option Zertifikat hochladen auswählen, können Sie das Stammzertifikat oder das Hostzertifikat hochladen oder einfügen.
- Wählen Sie die Option Zertifikatdatei hochladen aus.
- Wählen Sie den Zertifizierungstyp aus: Host, ICA oder Root. Wenn ein Root-CA-Zertifikat hochgeladen werden soll, wählen Sie die Option Root aus.
- Klicken Sie auf Zertifikatdatei hochladen und wählen Sie das Zertifikat von Ihrem System/Server aus.
- Wählen Sie die Option "Zertifikat einfügen" aus.
- Wählen Sie den Zertifizierungstyp aus: Host, ICA oder Root. Wenn ein Stammzertifizierungsstellenzertifikat hinzugefügt wird, wählen Sie die Option Stamm aus.
- Fügen Sie das Zertifikat in das leere Feld ein.
- Überprüfen Sie die Informationen unter Erweiterte Einstellungen anzeigen und wählen Sie die Schaltfläche Anwenden aus.
- Navigieren Sie zum Menü Administration und wählen Sie Zertifikate gefolgt von der Registerkarte Externe Server . Überprüfen Sie, ob ein Stamm-CA-Zertifikat mit dem Status "Approved" für die verwendete Portnummer aufgeführt ist (636 ist der Standardport).
- Navigieren Sie zur Seite Users Groups im Abschnitt Access Control, um Nutzer und Gruppen aus Active Directory hinzuzufügen.
- Testen Sie durch Authentifizierung mit Active Directory-Anmeldeinformationen. Nutzer sollten userPrincipalName (UPN) verwenden, während sie den Nutzernamen auf der Anmeldeseite hinzufügen.
Der PowerProtect Data Manager – Sicherheitskonfigurationsleitfaden enthält weitere Optionen für LDAP (Lightweight Directory Access Protocol) oder AD-Verbindungen.
Additional Information
Ab PowerProtect Data Manager 19.19 wird empfohlen, im Nutzernamen userPrincipalName (UPN) zu verwenden, der im Active Directory festgelegt ist. Der im UPN verwendete Domainname kann sich von dem Namen unterscheiden, der beim Hinzufügen der Domain zu PowerProtect Data Manager verwendet wird. In früheren Versionen mussten NutzerInnen einen Domainnamen hinzufügen, der zu PowerProtect Data Manager hinzugefügt wurde.
Problemumgehung
: Die vorhandene Microsoft Active Directory-Verbindung kann entfernt und als LDAP ohne Verwendung von SSL (Secure Sockets Layer) hinzugefügt werden. Dies ermöglicht es den Nutzern, sich zu authentifizieren, ohne die Zertifikatkette zu verwenden.