Problemas al usar Maven y SSL detrás del proxy

Acabo de descargar Maven y estaba intentando ejecutar el comando simple que se encuentra en la página “Maven en cinco minutos” ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Este es el comando:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

Cuando lo ejecuto, recibo un error con el certificado SSL y no puedo descargarlo desde el repository central de Maven en https://repo.maven.apache.org/maven2 . El error es “SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el objective solicitado”.

Estoy sentado detrás de un firewall corporativo y he configurado correctamente la configuración del proxy para el acceso http y https a través del archivo settings.xml . Dudo que todos los que descarguen Maven y lo ejecuten por primera vez tengan que importar el certificado SSL del repository Maven, por lo que el problema debe ser con el proxy. ¿Alguien tiene alguna experiencia con esto?

Aquí está el seguimiento de la stack en el modo de depuración completo (-X):

  mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22: 58: 10 + 02: 00) Inicio de Maven: C: \ Projects \ maven \ bin. Versión de Java: 1.7.0_45, proveedor: Oracle Corporation Inicio de Java: C : \ Archivos de progtwig \ Java \ jdk1.7.0_45 \ jre Configuración regional predeterminada: it_IT, encoding de la plataforma: Cp1252 Nombre del SO: “windows 7”, versión: “6.1”, arch: “amd64”, familia: “windows” [DEBUG] Uso del conector WagonRepositoryConnector con prioridad 0.0 para https://repo.maven.apache.org/maven2 a través de *****: 8080 con nombre de usuario = *****, contraseña = *** Descarga: https: // repo. maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom [ADVERTENCIA] Error al recuperar el descriptor de plugin para org.apache.maven.plugins: maven-clean-plugin: 2.5: Plugin org.apache.maven.plugins: maven-clean-plugin: 2.5 o una de sus dependencias no se pudo resolver: Error al leer el descriptor de artefactos para org.apache.maven.plugins: maven- clean-plugin: jar: 2.5 org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.pl ugins: maven-clean-plugin: 2.5 o una de sus dependencias no se pudo resolver: Error al leer el descriptor de artefactos para org.apache.maven.plugins: maven-clean-plugin: jar: 2.5 en org.apache.maven.plugin .internal.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java:122) en org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.java:148) en org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin (DefaultBuildPluginManager.java) : 81) en org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:138) en org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:121) en org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve (DefaultPluginPrefixResolver.java:85) en org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix (MojoDescriptorCreator.java:260) en org .apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor (MojoDescriptorCreator.java:220) en org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java:103) en org.apache.maven.lifecycle.internal .DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java:83) en org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:85) en org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:347) en org.apache.maven.DefaultMaven.execute (DefaultMaven.java:154) en org.apache.maven.cli.MavenCli.execute (MavenCli.java:582) en org.apache.maven.cli.MavenCli.doMain (MavenCli. java: 214) en org.apache.maven.cli.MavenCli.main (MavenCli.java:158) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingM) ethodAccessorImpl.java:43) en java.lang.reflect.Method.invoke (Method.java:606) en org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289) en org.codehaus.plexus .classworlds.launcher.Launcher.launch (Launcher.java:229) en org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415) en org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356) Causado por: org.eclipse.aether.resolution.ArtifactDescriptorException: Error al leer el descriptor de artefactos para org.apache.maven.plugins: maven-clean-plugin: jar: 2.5 en org.apache.maven. repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:349) en org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java:231) en org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor ( DefaultRepositorySystem.java:288) en org.apache.maven.plugin.internal.DefaultPluginDep endenciesResolver.resolve (DefaultPluginDependenciesResolver.java:108) … 23 más Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: No se pudo transferir el artefacto org.apache.maven.plugins: maven-clean-plugin: pom: 2.5 from / to central ( https://repo.maven.apache.org/maven2 ): sun.security.validator.ValidatorException: construcción de rutas PKIX fallida: sun.security.provider.certpath.SunCertPathBuilderException: no se puede encontrar la ruta de certificación válida solicitada segmente en org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:459) en org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:262) en org.eclipse.aether. internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:239) en org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:334) … 26 más Causado por: org.eclipse.aether.transfer .ArtifactTransferExceptio n: No se pudo transferir el artefacto org.apache.maven.plugins: maven-clean-plugin: pom: 2.5 from / to central ( https://repo.maven.apache.org/maven2 ): sun.security.validator.ValidatorException : Falló la construcción de rutas PKIX: sun.security.provider.certpath.SunCertPathBuilderException: no se pudo encontrar una ruta de certificación válida para el destino solicitado en org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap (WagonRepositoryConnector.java:1016) en org. eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap (WagonRepositoryConnector.java:1004) en org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run (WagonRepositoryConnector.java:725) en org.eclipse.aether.util .concurrency.RunnableErrorForwarder $ 1.run (RunnableErrorForwarder.java:67) en java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) en java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) en java.lang.Thread.run (Thread.java:744) Causado por: org.apache.maven.wagon.Transf erFailedException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el destino solicitado en org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:935) en org.apache.maven.wagon.StreamWagon.getInputStream (StreamWagon.java:116) en org.apache.maven.wagon.StreamWagon.getIfNewer (StreamWagon.java:88) en org.apache. maven.wagon.StreamWagon.get (StreamWagon.java:61) en org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run (WagonRepositoryConnector.java:660) … 4 más Causado por: javax.net.ssl .SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el objective solicitado en sun.security.ssl.Alerts.getSSLException (Alerts.java: 192) en sun.security.ssl.SSLSocketImpl.fatal (SSLSocketIm) pl.java:1884) en sun.security.ssl.Handshaker.fatalSE (Handshaker.java:276) en sun.security.ssl.Handshaker.fatalSE (Handshaker.java:270) en sun.security.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:1341) en sun.security.ssl.ClientHandshaker.processMessage (ClientHandshaker.java:153) en sun.security.ssl.Handshaker.processLoop (Handshaker.java:868) en sun.security.ssl.Handshaker. process_record (Handshaker.java:804) en sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:1016) en sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1312) en sun.security.ssl.SSLSocketImpl .startHandshake (SSLSocketImpl.java:1339) en sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1323) en org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket (SSLConnectionSocketFactory .java: 280) en org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade (HttpClientConnectionOperator .java: 167) en org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade (PoolingHttpClientConnectionManager.java:329) en org.apache.maven.wagon.products.http.httpclient.impl .execchain.MainClientExec.establishRoute (MainClientExec.java:392) en org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute (MainClientExec.java:218) en org.apache.maven.wagon .providers.http.httpclient.impl.execchain.ProtocolExec.execute (ProtocolExec.java:194) en org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute (RetryExec.java:85) en org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute (RedirectExec.java:108) en org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient. doExecute (InternalHttpClient.java:186) en org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:82) en org.apache.maven.wagon.provide rs.http.AbstractHttpClientWagon.execute (AbstractHttpClientWagon.java:756) en org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:854) … 8 más Causado por: sun.security.validator .ValidatorException: construcción de rutas PKIX fallida: sun.security.provider.certpath.SunCertPathBuilderException: no se pudo encontrar una ruta de certificación válida para el objective solicitado en sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:385) en sun.security.validator .PKIXValidator.engineValidate (PKIXValidator.java:292) en sun.security.validator.Validator.validate (Validator.java:260) en sun.security.ssl.X509TrustManagerImpl.validate (X509TrustManagerImpl.java:326) en sun.security. ssl.X509TrustManagerImpl.checkTrusted (X509TrustManagerImpl.java:231) en sun.security.ssl.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:126) en sun.security.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:1323) … 27 más Causado por: sun.security.provider. certpath.SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el destino solicitado en sun.security.provider.certpath.SunCertPathBuilder.engineBuild (SunCertPathBuilder.java:196) en java.security.cert.CertPathBuilder.build (CertPathBuilder.java:268) en sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:380) … 33 más

El hecho es que su plugin maven intenta conectarse a un repository remoto https
(ej. https://repo.maven.apache.org/maven2/ )

¡Esta es una nueva conectividad SSL para Maven Central que se puso a disposición en agosto de 2014!

Entonces, por favor, puede verificar que su settings.xml tenga la configuración correcta.

     securecentral    securecentral    central http://repo1.maven.org/maven2  true      central http://repo1.maven.org/maven2  true       

Alternativamente, puede utilizar el repository http maven simple como este

    central Maven Plugin Repository http://repo1.maven.org/maven2 default  false   never    

Por favor, avíseme si mi solución funciona;)

J.

La respuesta anterior es una buena solución de trabajo, pero esta es la forma de hacerlo si desea utilizar el repository SSL:

  • Use un navegador (utilicé IE) para ir a https://repo.maven.apache.org/
    • Haga clic en el ícono de candado y elija “Ver certificado”
    • Vaya a la pestaña “Detalles” y elija “Guardar en archivo”
    • Elija el tipo “Base 64 X.509 (.CER)” y guárdelo en algún lugar
  • Ahora abra un símbolo del sistema y escriba (use sus propios caminos):

    keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore

  • Ahora puede ejecutar el comando nuevamente con el parámetro

    -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

  • En Linux, use la ruta absoluta

    -Djavax.net.ssl.trustStore=/tmp/mavenKeystore

    de lo contrario, esto sucederá

  • Me gusta esto:

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

Opcional:

Puede usar la variable de entorno MAVEN_OPTS para que no tenga que preocuparse por ello nuevamente. Ver más información sobre la variable MAVEN_OPTS aquí :

Actualizar

Acabo de tropezar con este informe de error:

https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760

Parece ser la causa de nuestros problemas aquí. Algo con ca-certificates-java que encuentra un error y no llena completamente los cacerts. Para mí, esto comenzó a suceder después de que actualicé a 15.10 y este error probablemente ocurrió durante ese proceso.

La solución alternativa es ejecutar el siguiente comando:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

Si revisas el contenido del almacén de claves (como en mi respuesta original), ahora verás un montón más, incluida la necesaria Root CA de DigiCert.

Si realizó el proceso en mi respuesta original, puede limpiar la clave que agregamos ejecutando este comando (suponiendo que no haya especificado un alias diferente):

sudo keytool -delete -alias mykey -keystore / etc / ssl / certs / java / cacerts

Maven ahora funcionará bien.


Respuesta original

Me gustaría ampliar la respuesta de Andy sobre cómo agregar el certificado y especificar un almacén de claves. Eso me ayudó a comenzar, y combinado con información en otro lugar, pude entender el problema y encontrar otra (¿mejor?) Solución.

La respuesta de Andy especifica un nuevo almacén de claves con el certificado Maven específicamente. Aquí, voy un poco más amplio y agrego el certificado raíz al almacén de confianza de java predeterminado. Esto me permite usar mvn (y otras cosas java) sin especificar un almacén de claves.

Como referencia, mi sistema operativo es Ubuntu 15.10 con Maven 3.3.3.

Básicamente, el almacén de confianza de java predeterminado en esta configuración no confía en el certificado raíz del repository de Maven (DigiCert Global Root CA), por lo que debe agregarse.

Lo encontré aquí y lo descargué:

https://www.digicert.com/digicert-root-certificates.htm

Luego encontré la ubicación predeterminada del almacén de confianza, que se encuentra aquí:

/ etc / ssl / certs / java / cacerts

Puedes ver qué certs están actualmente allí ejecutando este comando:

keytool -list -keystore / etc / ssl / certs / java / cacerts

Cuando se le solicita, la contraseña predeterminada del almacén de claves es “changeit” (pero nadie lo hace).

En mi configuración, la huella digital de “DigiCert Global Root CA” no existía (DigiCert lo llama “huella digital” en el enlace de arriba). Así que aquí está cómo agregarlo:

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore / etc / ssl / certs / java / cacerts

Esto debería indicar si confías en el certificado, di que sí.

Use keytool -list nuevamente para verificar que la clave existe. No me molesté en especificar un alias (-alias), así que terminó así:

mykey, 2 de diciembre de 2015, trustedCertEntry, Certificado de huella digital (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

Luego pude ejecutar comandos mvn de forma normal, sin necesidad de especificar keystore.

Esta puede no ser la mejor solución. Cambié mi versión de 3.3.x a 3.2.x. Y este problema se ha ido.

Puede importar el certificado SSL manualmente y simplemente agregarlo al almacén de claves.

Para usuarios de Linux,

Sintaxis:

keytool -trustcacerts -keystore / jre / lib / security / cacerts -storepass changeit -importcert -alias nexus -file

Ejemplo:

keytool -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -importcert -alias nexus -file ~ / Downloads / abc.com-ssl. crt

De hecho, tuve el mismo problema.

cuando corro

mvn paquete limpio

en mi proyecto de maven, recibo este error de certificado con la herramienta de maven.

Seguí la respuesta de @Andy hasta el momento en que descargué el archivo .cer

después de eso, el rest de la respuesta no funcionó para mí, pero hice lo siguiente (me estoy ejecutando en la máquina Linux Debian)

antes que nada, ejecuta:

keytool -list -keystore “Java path +” / jre / lib / security / cacerts “”

por ejemplo en mi caso es:

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

si pregunta sobre la contraseña, simplemente presiona enter.

Se supone que este comando enumera todos los certificados ssl aceptados por Java. cuando ejecuté este comando, en mi caso obtuve 93 certificados, por ejemplo.

Ahora agregue el archivo descargado .cer al archivo cacerts ejecutando el siguiente comando:

sudo keytool -importcert -file /home/hal/Public/certificate_file_downloaded.cer -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / security / cacerts

escribe tu contraseña de sudo y luego te preguntará sobre la contraseña del almacén de claves

el predeterminado es changeit

luego di que confías en este certificado.

si ejecuta el comando

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

una vez más, en mi caso, obtuve 94 contenidos del archivo cacerts

es decir, se agregó con éxito.

Si este problema ocurre para el repository HTTPS , fe https://repo.spring.io/milestone puede intentar reemplazarlo con no asegurado: http://repo.spring.io/milestone . Y eso es

Obtuve el mismo error sobre el certificado SSL cuando Maven intentó descargar los módulos necesarios automáticamente.
Como remedio, estaba intentando implementar la respuesta de Luke anterior, pero descubrí que el certificado DigiCert Global Root CA ya se encuentra en el almacén de claves de confianza de Java.

Lo que me ayudó fue agregar %JAVA_HOME%\bin a la variable Path (estoy ejecutando Windows). Y %JAVA_HOME% es una ubicación JDK, no solo una ubicación JRE, ya que Maven necesita un JDK.
No estoy seguro de por qué ayudó, pero lo hizo. Estoy absolutamente seguro de que esto fue lo único que cambié.