PowerProtect: L'autenticazione ha esito negativo quando si utilizza Active Directory dopo l'aggiornamento alla versione 19.19
Summary: Gli utenti non sono in grado di accedere a PowerProtect Data Manager utilizzando le credenziali di Active Directory.
Symptoms
Gli utenti non possono eseguire l'autenticazione utilizzando le credenziali Microsoft Active Directory (AD) dopo l'aggiornamento di PowerProtect alla versione 19.19.0-15.
Viene visualizzato un messaggio di errore simile al seguente:
"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."
Nel file keycloak.log sull'appliance PowerProtect è presente un messaggio di errore simile al seguente:
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
Questo comportamento si verifica quando la disponibilità elevata è configurata per i controller di dominio. In PowerProtect Data Manager 19.19 è stata apportata un'importante modifica all'architettura relativa al funzionamento dell'autenticazione e della gestione degli utenti. Nell'ambito dell'aggiornamento, la configurazione esistente viene migrata alla nuova architettura. Dopo la migrazione, in assenza del certificato CA radice utilizzato per i controller di dominio dalla catena di attendibilità di PowerProtect Data Manager, la convalida ha esito negativo
quando si modifica la connessione Active Directory per eseguire automaticamente il pull del certificato CA radice nella catena di attendibilità.
Resolution
Nelle versioni di PowerProtect Data Manager successive alla 19.19.0-15, le modifiche all'architettura influiscono sulla convalida della catena di certificati. Attenersi alla seguente procedura per aggiungere un certificato CA radice alla catena di attendibilità:
- Verificare che sia disponibile il file di certificato CA radice utilizzato sui controller di dominio.
- Rimuovere la connessione esistente ad Active Directory.
- Selezionare il pulsante Aggiungi nella pagina Impostazioni directory.
- Selezionare AD, selezionare la casella di controllo Secure Connection e compilare i dettagli di Active Directory.
- Nella sezione Certificato, selezionare l'opzione Carica certificato.
- Selezionando l'opzione Carica certificato è possibile caricare o incollare il certificato root o host.
- Selezionare l'opzione Upload Certificate File.
- Selezionare il tipo di certificazione: Host, ICA o Root. Se è necessario caricare un certificato CA radice, selezionare l'opzione Radice.
- Cliccare su Upload Certificate File e selezionare il certificato dal sistema/server.
- Selezionare l'opzione "Incolla certificato".
- Selezionare il tipo di certificazione: Host, ICA o Root. Se è in corso l'aggiunta di un certificato CA radice, selezionare l'opzione Radice.
- Incollare il certificato nel campo vuoto.
- Rivedere le informazioni in Show Advanced Settings e selezionare il pulsante Apply.
- Passare al menu Administration e selezionare Certificates seguito dalla scheda External Servers . Verificare che sia possibile trovare un certificato CA radice elencato con stato Approvato per il numero di porta utilizzato (636 è la porta predefinita).
- Per aggiungere utenti e gruppi da Active Directory, accedere alla pagina Gruppi di utenti nella sezione Controllo di accesso.
- Eseguire un test autenticando utilizzando le credenziali di Active Directory. Gli utenti devono utilizzare userPrincipalName (UPN) durante l'aggiunta del nome utente nella pagina di accesso.
La Guida alla configurazione della sicurezza di PowerProtect Data Manager contiene ulteriori opzioni per LDAP (Lightweight Directory Access Protocol) o connessioni AD.
Additional Information
Da PowerProtect Data Manager 19.19 in poi, nel nome utente si consiglia di utilizzare userPrincipalName (UPN) impostato in Active Directory. Il nome di dominio utilizzato in UPN può essere diverso dal nome utilizzato durante l'aggiunta di un dominio a PowerProtect Data Manager. Nelle versioni precedenti, gli utenti dovevano aggiungere un nome di dominio a PowerProtect Data Manager.
Soluzione alternativa
: la connessione esistente a Microsoft Active Directory può essere rimossa e aggiunta come LDAP senza utilizzare SSL (Secure Sockets Layer). Ciò consente agli utenti di eseguire l'autenticazione senza utilizzare la catena di certificati.