web-dev-qa-db-fra.com

gradlew.bat (et gradlew) SSLHandShakeException

Je suis nouveau à Gradle et je passais par ce tutoriel de printemps trouvé ici:

http://spring.io/guides/gs/gradle/

J'arrive à la partie où il me dit d'ajouter cette tâche:

task wrapper(type: Wrapper) {
     gradleVersion = '2.3'
}

Je lance gradle wrapper qui crée les fichiers gradlew et gradlew.bat.

En essayant d'exécuter les deux, j'obtiens cette exception:

Downloading https://services.gradle.org/distributions/gradle-2.3-bin.Zip

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Sun.security.val
idator.ValidatorException: PKIX path building failed: Sun.security.provider.cert
path.SunCertPathBuilderException: unable to find valid certification path to req
uested target
        at Sun.security.ssl.Alerts.getSSLException(Alerts.Java:192)
        at Sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.Java:1884)
        at Sun.security.ssl.Handshaker.fatalSE(Handshaker.Java:276)
        at Sun.security.ssl.Handshaker.fatalSE(Handshaker.Java:270)
        at Sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.
Java:1341)
        at Sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.jav
a:153)
        at Sun.security.ssl.Handshaker.processLoop(Handshaker.Java:868)
        at Sun.security.ssl.Handshaker.process_record(Handshaker.Java:804)
        at Sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.Java:1016)
        at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.
Java:1312)
        at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1339
)
        at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1323
)
        at Sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.Java:
563)
        at Sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect
(AbstractDelegateHttpsURLConnection.Java:185)
        at Sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
nection.Java:1300)
        at Sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Http
sURLConnectionImpl.Java:254)
        at org.gradle.wrapper.Download.downloadInternal(Download.Java:56)
        at org.gradle.wrapper.Download.download(Download.Java:42)
        at org.gradle.wrapper.Install$1.call(Install.Java:57)
        at org.gradle.wrapper.Install$1.call(Install.Java:44)
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAcc
essManager.Java:65)
        at org.gradle.wrapper.Install.createDist(Install.Java:44)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.Java:126)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.Java:56)
Caused by: Sun.security.validator.ValidatorException: PKIX path building failed:
 Sun.security.provider.certpath.SunCertPathBuilderException: unable to find vali
d certification path to requested target
        at Sun.security.validator.PKIXValidator.doBuild(PKIXValidator.Java:385)
        at Sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.jav
a:292)
        at Sun.security.validator.Validator.validate(Validator.Java:260)
        at Sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.j
ava:326)
        at Sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerIm
pl.Java:231)
        at Sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustMan
agerImpl.Java:126)
        at Sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.
Java:1323)
        ... 19 more
Caused by: Sun.security.provider.certpath.SunCertPathBuilderException: unable to
 find valid certification path to requested target
        at Sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCert
PathBuilder.Java:196)
        at Java.security.cert.CertPathBuilder.build(CertPathBuilder.Java:268)
        at Sun.security.validator.PKIXValidator.doBuild(PKIXValidator.Java:380)
        ... 25 more

J'essaie de consulter le serveur Web à https://services.gradle.org/distributions/gradle-2.3-bin.Zip et je ne reçois aucune erreur. Il me manque une sorte de config? Toute aide serait appréciée. Merci!

18
MrRoboto

J'ai rencontré le même problème, mais certains de mes symptômes étaient que ma machine Ubuntu ne pouvait résoudre aucun hôte SSL à moins que je ne les ajoute spécifiquement au fichier (autorité de certification) de Java (cacert).

Je suis tombé sur ce bogue Debian et ai trouvé une résolution assez simple: supprimez ca-certificates-Java et réinstallez-le:

Sudo dpkg --purge --force-depends ca-certificates-Java
Sudo apt-get install ca-certificates-Java

J'ai fait un ./gradlew clean pour faire bonne mesure, et tout est revenu à la vie.

18
Paul Lammertsma

si vous ne pouviez pas réparer quand même. et si vous êtes à l'intérieur du pare-feu.
puis.
vous ne pouvez pas télécharger https.

devrait corriger ce fichier Edit gradle-wrapper.properties.

vi [project]/gradle/wrapper/gradle-wrapper.properties

#distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-bin.Zip 
distributionUrl=http\://services.gradle.org/distributions/gradle-2.8-bin.Zip

passer de https à http ...

http://blog.cjred.net/gradlew-bat-and-gradlew-sslhandshakeexception/

28
Jeonggeun Lee

Il semble que les certificats pour le site Gradle aient été foirés. Faire un gradlew clean devrait résoudre ce problème. Voir ce fil sur le forum Gradle: http://discuss.gradle.org/t/urgent-ssl-Apache-configuration-for-services-gradle-org-is-bad/8808/4

3
dunni

Dans mon cas, le problème était dû à une version obsolète (7 ans) de Java. Même gradlew clean a échoué. Après une mise à jour Java, cela a bien fonctionné.

1
ohaleck

Dans mon cas, j'étais sur un réseau d'entreprise et derrière un proxy qui, si j'ai bien compris, réécrit les certificats SSL, de sorte que l'installation de Java ne fait confiance à aucun d'eux. 

Pour le résoudre, je devais créer un fichier gradle.properties dans mon répertoire personnel sous .gradle (~/.gradle/gradle.properties) et ajouter la ligne suivante:

org.gradle.jvmargs=-DsystemProp.https.proxyHost=<myProxyHost> -DsystemProp.https.proxyPort=<myProxyPort> -DsystemProp.https.proxyUser=<myProxyUsername> -DsystemProp.https.proxyPassword=<myProxyPassword>

Cette solution était basée sur cette réponse SO: Gradle utilise l'authentification par certificat pour le référentiel

0
Hervian

En effet, Gradle essaie de trouver le package installé sur votre ordinateur local . Si vous avez l'emplacement d'installation: 

D:\apps\gradle-3.3

Suivez ces étapes dans Eclipse: 

  1. Nouveau projet
  2. Projet Gradle
  3. Entrez le nom du projet
  4. Répertoire d'installation local 
  5. Cliquez sur Terminer.

Tu es prêt.

0
Karthik M