PowerProtect: Uwierzytelnianie przy użyciu usługi Active Directory kończy się niepowodzeniem po uaktualnieniu do wersji 19.19
Summary: Użytkownicy nie mogą zalogować się do programu PowerProtect Data Manager przy użyciu poświadczeń usługi Active Directory.
Symptoms
Po uaktualnieniu programu PowerProtect do wersji 19.19.0-15
użytkownicy nie mogą uwierzytelniać się przy użyciu poświadczeń usługi Microsoft Active Directory (AD).Zostanie wyświetlony komunikat o błędzie podobny do następującego:
"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."
Komunikat o błędzie podobny do następującego znajduje się w pliku keycloak.log na urządzeniu PowerProtect:
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
To zachowanie jest widoczne, gdy wysoka dostępność jest skonfigurowana dla kontrolerów domeny. W programie PowerProtect Data Manager 19.19 wprowadzono istotną zmianę w architekturze dotyczącą sposobu działania uwierzytelniania i zarządzania użytkownikami. W ramach uaktualnienia istniejąca konfiguracja zostanie zmigrowana do nowej architektury. Po migracji, w przypadku braku certyfikatu głównego urzędu certyfikacji używanego dla kontrolerów domeny z PowerProtect Data Manager, łańcuch zaufania zostaje przerwany
, weryfikacja kończy się niepowodzeniem podczas modyfikowania połączenia Active Directory w celu automatycznego ściągnięcia certyfikatu głównego urzędu certyfikacji do łańcucha zaufania.
Resolution
W wersjach PowerProtect Data Manager wcześniejszych niż 19.19.0-15 zmiany w architekturze wpływają na walidację łańcucha certyfikatów. Wykonaj następujące czynności, aby dodać certyfikat głównego urzędu certyfikacji do łańcucha zaufania:
- Upewnij się, że plik certyfikatu głównego urzędu certyfikacji używany na kontrolerach domeny jest dostępny.
- Usuń istniejące połączenie z usługą Active Directory.
- Wybierz przycisk Dodaj na stronie Ustawienia katalogu.
- Wybierz AD, zaznacz pole wyboru Bezpieczne połączenie i wypełnij szczegóły usługi Active Directory.
- W sekcji Certificate wybierz opcję Upload Certificate.
- Wybranie opcji Upload Certificate umożliwia przesłanie lub wklejenie certyfikatu głównego lub hosta.
- Wybierz opcję Upload Certificate File.
- Wybierz typ certyfikacji, czy jest to Host, ICA czy Root. Jeśli ma zostać przesłany certyfikat głównego urzędu certyfikacji, wybierz opcję Root.
- Kliknij Upload Certificate File i wybierz certyfikat z systemu/serwera.
- Wybierz opcję "Wklej certyfikat".
- Wybierz typ certyfikacji, czy jest to Host, ICA czy Root. Jeśli dodawany jest certyfikat głównego urzędu certyfikacji, wybierz opcję Root.
- Wklej certyfikat w pustym polu.
- Przejrzyj informacje w obszarze Pokaż ustawienia zaawansowane i kliknij przycisk Zastosuj.
- Przejdź do menu Administracja i wybierz opcję Certyfikaty , a następnie kartę Serwery zewnętrzne . Sprawdź, czy certyfikat głównego urzędu certyfikacji znajduje się na liście ze stanem Approved dla używanego portu (636 to port domyślny).
- Przejdź do strony Grupy użytkowników w sekcji Kontrola dostępu, aby dodać użytkowników i grupy z usługi Active Directory.
- Przetestuj uwierzytelnianie przy użyciu poświadczeń usługi Active Directory. Użytkownicy powinni użyć userPrincipalName(UPN) podczas dodawania nazwy użytkownika na stronie logowania.
Podręcznik konfiguracji zabezpieczeń PowerProtect Data Manager zawiera więcej opcji dla połączeń LDAP (Lightweight Directory Access Protocol) lub AD.
Additional Information
Począwszy od wersji PowerProtect Data Manager 19.19, w nazwie użytkownika zaleca się używanie nazwy użytkownika (UPN) ustawionej w usłudze Active Directory. Nazwa domeny używana w nazwie UPN może różnić się od nazwy użytej podczas dodawania domeny do programu PowerProtect Data Manager. We wcześniejszych wersjach użytkownicy musieli dodać nazwę domeny dodaną do programu PowerProtect Data Manager.
Obejście
Istniejące połączenie Microsoft Active Directory można usunąć i dodać jako LDAP bez korzystania z protokołu Secure Sockets Layer (SSL). Pozwala to użytkownikom na uwierzytelnianie bez korzystania z łańcucha certyfikatów.