cancel
Showing results for 
Search instead for 
Did you mean: 

[SOLVED][Alfresco 4.0.a] HTTPS et keystore

deedlith
Champ in-the-making
Champ in-the-making
Bonjour a tous,

installation neuve de Alfresco 4. Je tente de configuer le https avec un succes mitige. Jusqu'ici, pour mes installations d'alfresco je generais mon certificat directement depuis l'outil "keytool". Pour ce serveur, il existait deja un certificat que j'ai du recuperer … j'ai essaye de plusieurs manieres differente, le resultat est souvent le meme.
Le HTTPS fonctionne sans erreur et le certificat est reconnu par le naviguateur mais …

voici l'erreur que j'ai dans mes logs et qui apparait 3 fois par minutes a peu pres :

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
   at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
   at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
   at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
   at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)
   at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
   at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
   at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)
   at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
   at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
   at java.io.BufferedOutputStream.write(BufferedOutputStream.java:104)
   at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
   at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90)
   at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
   at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
   at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
   at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
   at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
   at org.alfresco.httpclient.AbstractHttpClient.executeMethod(AbstractHttpClient.java:133)
   at org.alfresco.httpclient.AbstractHttpClient.sendRemoteRequest(AbstractHttpClient.java:85)
   at org.alfresco.httpclient.HttpClientFactory$HttpsClient.sendRequest(HttpClientFactory.java:307)
   at org.alfresco.solr.client.SOLRAPIClient.getModelsDiff(SOLRAPIClient.java:982)
   at org.alfresco.solr.tracker.CoreTracker.trackModels(CoreTracker.java:1405)
   at org.alfresco.solr.tracker.CoreTracker.trackRepository(CoreTracker.java:1127)
   at org.alfresco.solr.tracker.CoreTracker.updateIndex(CoreTracker.java:481)
   at org.alfresco.solr.tracker.CoreTrackerJob.execute(CoreTrackerJob.java:45)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
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 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:294)
   at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:200)
   at sun.security.validator.Validator.validate(Validator.java:218)
   at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
   at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
   at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
   at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
   … 28 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
   at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:289)
   … 34 more

Sachant que j'ai 3 fichiers au format "—–BEGIN CERTIFICATE—–/—–END CERTIFICATE—–" (server.key , server.cert, server.chain), format PEM si je ne me trompe pas.

Je suppose que mon keystore est mal cree … ou qu'il manque un bout de configuration …

Je sais que des cas similaires ont deja ete aborde mais ils n'etaient jamais exactement comme le mien ou les solutions ne fonctionnent pas dans mon cas ( comme l'ajout du certificat dans %JAVA_HOME%/jre/lib/security/cacerts)

Merci d'avance de votre aide.
4 REPLIES 4

deedlith
Champ in-the-making
Champ in-the-making
voici les operations que j'ai fait pour la creation du keystore :

# cat server.cert server.chain > cert-chain..txt
# openssl pkcs12 -export -inkey server.key -in cert-chain.txt -out server.pkcs12
# keytool -importkeystore -srckkeystore server.pkcs12 -srcstoretype PKCS12 -destkeystore mycerts.jks

j'ai aussi tente de rajouter le certificat a cacerts dans java …

# keytool -export -alias server -keystore mycerts.jks -file export.cert
# keytool -import -alias server -file export.cert -keystore %JAVA_HOME%/jre//lib/security/cacerts

mais pas de changement.

deedlith
Champ in-the-making
Champ in-the-making
Je reviens vers vous car ce problème est toujours d'actualité sur ce serveur mais maintenant sur un autre qui fonctionnait très bien jusque la …

Pour palier a un bug sur alfresco-3.4.b (ajout d'un fichier .pdf en particulier qui faisait planter net alfresco), j'ai mis un serveur a jour vers alfresco-4.0.a. J'ai bien sur change les settings de base pour coller a mon installation, recup la db et les data et hop tout fonctionne super !

Sauf que j'ai de nouveau la meme erreur dans les logs qui me flood.

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
   at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
   at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
   at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
   at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)
   at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
   at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
   at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
   at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)
   at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
   at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
   at java.io.BufferedOutputStream.write(BufferedOutputStream.java:104)
   at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
   at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90)
   at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
   at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
   at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
   at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
   at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
   at org.alfresco.httpclient.AbstractHttpClient.executeMethod(AbstractHttpClient.java:133)
   at org.alfresco.httpclient.AbstractHttpClient.sendRemoteRequest(AbstractHttpClient.java:85)
   at org.alfresco.httpclient.HttpClientFactory$HttpsClient.sendRequest(HttpClientFactory.java:307)
   at org.alfresco.solr.client.SOLRAPIClient.getModelsDiff(SOLRAPIClient.java:982)
   at org.alfresco.solr.tracker.CoreTracker.trackModels(CoreTracker.java:1405)
   at org.alfresco.solr.tracker.CoreTracker.trackRepository(CoreTracker.java:1127)
   at org.alfresco.solr.tracker.CoreTracker.updateIndex(CoreTracker.java:481)
   at org.alfresco.solr.tracker.CoreTrackerJob.execute(CoreTrackerJob.java:45)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
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 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:294)
   at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:200)
   at sun.security.validator.Validator.validate(Validator.java:218)
   at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
   at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
   at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
   at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
   … 28 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
   at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:289)
   … 34 more

Donc, j'en déduis que quelque chose dans la configuration du https a change avec Alfresco 4 … mais quoi ?

Mon keystore n'a pas change et dans tomcat_home/conf/server.xml je mets  ceci :
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               keyAlias="alfresco" keystorePass="changeit"
               keystoreFile="/opt/alfresco-4.0.a/tomcat/mycert.jks"
               maxThreads="150" connectionTimeout="240000" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

Dans le doute, j'ai ajoute le certificat dans cacerts :
# keytool -export -alias alfresco -keystore mycert.jks -file export.cert
# keytool -import -alias alfresco -file export.cert -keystore /opt/alfresco-4.0.a/java/jre/lib/security/cacerts

Je comprends pas pourquoi on peut acceder sans probleme au site en https alors que j'ai cette erreur dans les logs (d'ailleurs le fichier de logs devient vite lourd)

deedlith
Champ in-the-making
Champ in-the-making
Est-il possible que cela ait un rapport avec solr ?

Si j'ai bien compris solr est une methode d'indexation pour la recherche qui remplacera lucene. solr communique avec le repository au travers d'une connexion ssl aussi … pourtant j'ai configure pour utiliser lucene … et je vois pas ce qui empecherait solr d'utiliser le meme certificat …

Je vais un peu creuser dans ce sens

deedlith
Champ in-the-making
Champ in-the-making
Voila, j'ai sauve mon espace disque \o/ fini les logs qui frolent les 1Go

server.xml
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               keyAlias="alfresco" keystorePass="changeit"
               keystoreFile="/opt/alfresco-4.0.a/tomcat/mycert.jks"
               maxThreads="150" connectionTimeout="240000" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

    <Connector port="8444" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
               maxThreads="150" scheme="https" keystoreFile="/opt/alfresco-4.0.a/alf_data/keystore/ssl.keystore" keystorePass="changeit" keystoreType="JCEKS"
secure="true" connectionTimeout="240000" truststoreFile="/opt/alfresco-4.0.a/alf_data/keystore/ssl.truststore" truststorePass="changeit" truststoreType="JCEKS"
               clientAuth="false" sslProtocol="TLS" allowUnsafeLegacyRenegotiation="true" />

alfresco-global.properties
### Solr indexing ###
index.subsystem.name=lucene
dir.keystore=${dir.root}/keystore
solr.port=8444
sauf que apparemment "solr.port" n'est pas pris en compte donc …

alfresco-4.0.a/alf_data/solr/workspace-SpacesStore/conf/solrcore.properties et /opt/alfresco-4.0.a/alf_data/solr/archive-SpacesStore/conf/solrcore.properties
alfresco.port.ssl=8444

Voila, mon serveur https://monserveur.com:8443/share fonctionne du tonnerre et surtout, fini les erreurs dans les logs.

Par contre ca risque de poser probleme si je dois utiliser solr un jour …  :evil: