AC + SSLHandshakeException + ValidatorException + PKIX chemin de bâtiment échoué + impossible de trouver le chemin de certification valide à la demande de la cible
Je suis en train de travailler sur la Centrale Système d'Authentification (jasig.org) pour la mise en œuvre de l'authentification Unique Sur featute
pour mon intranet de l'application web. J'ai deux tomcat instance en cours d'exécution dans ma machine(windows).
Tomcat exemple, avoir été configuré pour utiliser SSL et ont utilisé l'auto-signé sertificate (créé à l'aide de java keytool).
Tomcat1
Serveur Cas.
server.xml
<Connector port="8443" maxHttpHeaderSize="8192" SSLEnabled="true"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:/Users/sandip.paul/.keystore"
keystorePass="changeit"
truststoreFile="C:/Program Files/Java/jdk1.6.0_20/jre/lib/security/cacerts" />
Tomcat2
myWebApp(à l'aide de spring security)
server.xml
<Connector port="8663" maxHttpHeaderSize="8192" SSLEnabled="true"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
ci-dessous est la applicationContext-security.xml fichier de la myWebApp
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:security="http://www.springframework.org/schema/security"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<!--
Enable security, let the casAuthenticationEntryPoint handle all intercepted urls.
The CAS_FILTER needs to be in the right position within the filter chain.
-->
<security:http entry-point-ref="casProcessingFilterEntryPoint" auto-config="true">
<security:intercept-url pattern="/protected/**" access="IS_AUTHENTICATED_FULLY" />
</security:http>
<!--
Required for the casProcessingFilter, so define it explicitly set and
specify an Id Even though the authenticationManager is created by
default when namespace based config is used.
-->
<security:authentication-manager alias="authenticationManager" />
<!--
This section is used to configure CAS. The service is the
actual redirect Client URL that will be triggered after the CAS login sequence.
-->
<bean id="serviceProperties" class="org.springframework.security.ui.cas.ServiceProperties">
<property name="service" value="https://obll1973.abc.com:8663/myWebApp/j_spring_cas_security_check"/>
<property name="sendRenew" value="false"/>
</bean>
<!--
The customUserDetailsService provides ROLE & other Details and
create an object of UserDetail for this application.
-->
<bean id="customUserDetailsService"
class="edu.sandip.cas.client.authentication.CustomUserDetailsService">
</bean>
<!--
The CasProcessingFilter has very similar properties to the
AuthenticationProcessingFilter (used for form-based logins).
The CAS Processing filter handles the redirect from the CAS server
and starts the ticket validation.
-->
<bean id="casProcessingFilter" class="org.springframework.security.ui.cas.CasProcessingFilter">
<security:custom-filter after="CAS_PROCESSING_FILTER"/>
<property name="authenticationManager" ref="authenticationManager"/>
<property name="authenticationFailureUrl" value="/casfailed.jsp"/>
<property name="defaultTargetUrl" value="/"/>
</bean>
<!--
The entryPoint intercepts all the CAS authentication requests.
It redirects to the CAS loginUrl for the CAS login page.
-->
<bean id="casProcessingFilterEntryPoint"
class="org.springframework.security.ui.cas.CasProcessingFilterEntryPoint">
<property name="loginUrl" value="https://obll1973.abc.com:8443/cas/login"/>
<property name="serviceProperties" ref="serviceProperties"/>
</bean>
<!--
Handles the CAS ticket processing.
-->
<bean id="casAuthenticationProvider"
class="org.springframework.security.providers.cas.CasAuthenticationProvider">
<security:custom-authentication-provider />
<property name="userDetailsService" ref="customUserDetailsService" />
<property name="serviceProperties" ref="serviceProperties" />
<property name="ticketValidator">
<bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
<constructor-arg index="0" value="https://obll1973.abc.com:8443/cas" />
</bean>
</property>
<property name="key" value="an_id_for_this_auth_provider_only"/>
</bean>
<!--
To access request.getRemoteUser() from client application
-->
<bean id="wrappingFilter" class="org.jasig.cas.client.util.HttpServletRequestWrapperFilter" />
</beans>
La question que je pose est la ci-dessous exception:
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:341)
org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305)
org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
org.springframework.security.providers.cas.CasAuthenticationProvider.authenticateNow(CasAuthenticationProvider.java:145)
org.springframework.security.providers.cas.CasAuthenticationProvider.authenticate(CasAuthenticationProvider.java:131)
org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:188)
org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46)
org.springframework.security.ui.cas.CasProcessingFilter.attemptAuthentication(CasProcessingFilter.java:94)
org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:258)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
Étapes pour reproduire l'exception ci-dessus:
1) j'ai essayé d'accéder myWebApp à l'aide de https://obll1973.abc.com:8663/myWebApp/protected/
2) Il est redirigé vers serveur cas c'est à dire https://obll1973.abc.com:8443/cas/login et après la fourniture de nom d'utilisateur/mot de passe
Ici, l'exception pris une fois myWebApp à nouveau d'envoyer la requête au serveur cas pour valider le Jeton généré.
Toute suggestion/aide serait très appriciated.
OriginalL'auteur Sandy | 2012-10-29
Vous devez vous connecter pour publier un commentaire.
Votre Printemps-CAS de la configuration a l'air bien.
La seule et unique raison SSLHandshakeException apparaît est dû à la mauvaise importation de la clé SSL dans ce fichier de clés ou de la JVM de magasin de clés.
Cours de création de la clé avez-vous suivi les suivantes
Remarque : le nom d'alias qui est le CN (ici c'est le cas) doit être au même nom que la machine hôte.
pour trouver le nom d'hôte de la machine, dans la console de commande ou de promt il suffit de taper "nom d'hôte" sans les guillemets.
Créer un répertoire sous la racine nommée app
Et à l'Intérieur de votre tomcat server.xml vous pouvez également utiliser le connecteur https comme suit
La clé ci-dessus a été pour le Serveur CAS.
Vous pouvez créer votre propre clé séparée pour l'application.
Mais les deux clés doivent être importés à la JVM cacerts fichier de clés (Comment : est mentionné ci-dessous)
Maintenant la partie la plus importante :
supposons que votre Serveur CAS le nom de l'alias est le cas
et votre Serveur d'application nom de l'alias est myapp
de conserver à la fois les clés d'ac.crt et myapp.crt dans les deux serveurs à l'importation dans la JVM
Effectuer les opérations suivantes dans les deux serveur :
Pour vérifier utilisez les commandes suivantes --
Être sûr de la JRE Java----LIB--SÉCURITÉ--fichier CACERTS si vous utilisez plusieurs versions de java
Cela permettra d'éliminer de votre erreur.
Remarque :
Si après avoir donné la bonne identification d'utilisateur du navigateur montrant le vide de la page blanche,
modifier le système de fichier d'hôte (/etc/hosts sous linux et c:\windows\system32\driver\etc\hosts dans windows)
ajouter le tas ip du serveur il y
par exemple.
162.25.250.60 myapp
162.25.250.81 cas
Aucun doute peut être clarifiée.
Vous pouvez consulter la suivante :
https://wiki.jasig.org/display/CASUM/SSL+Dépannage+et+Référence+Guide
merci, bien que la question est posée dernièrement, pensé qu'il pourrait aider d'autres personnes qui recherchent la même chose .
Salut Imdad, je suis également confronté à la même question pour jboss, j'ai essayé beaucoup de choses, mais pas d'utilisation. voir [1]: stackoverflow.com/questions/20369726/... et plz m'aider sur ce point...
veuillez vérifier si le nouveau certificat vraiment eu ajouté à cacert. commande pour vérifier : C:\keytool -list-keystore "c:\Program Files\Java\jdk1.7.0_02\jre\lib\security\cacerts" -alias yourCertificateAliasHere si vous obtenez cette erreur msg keytool erreur: java.lang.Exception: Alias <yourCertificateAliasHere> n'existe pas cela signifie que le certificat n'est pas ajouté à la cacert.
également double-cliquez sur le fichier de certificat et aller à thirt onglet "Chemin d'accès de Certification". Si une marque de la croix rouge qui est vu et le certificat de statut indique que "Cette autorité de certification Racine de certificat n'est pas approuvé, car il n'est pas dans la Racine de Confiance magasin d'Autorités de Certification", Puis aller à generel onglet et installer le certificat en vertu de Certification Racine de Confiance.
OriginalL'auteur Imdad Areeph