And*_*ndy 119 java ssl proxy maven
我刚刚下载了Maven,并试图运行"Maven in Five Minutes"页面(http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html)上发现的简单命令.这是命令:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到SSL证书的错误,无法从https://repo.maven.apache.org/maven2的中央Maven存储库下载.错误是"SunCertPathBuilderException:无法找到请求目标的有效证书路径".
我坐在公司防火墙后面并正确配置了两者的代理设置http并https通过该settings.xml文件进行访问.我怀疑所有下载Maven并且第一次运行它的人都必须导入Maven存储库的SSL证书,所以问题必须在于代理.有人对这个有经验么?
这是完全调试模式(-X)中的堆栈跟踪:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Run Code Online (Sandbox Code Playgroud)
Apache Maven 3.2.3(33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22:58:10 + 02:00)Maven home:C:\ Projects\maven\bin .. Java版本:1.7.0_45,供应商:Oracle Corporation Java home:C :\ Program Files\Java\jdk1.7.0_45\jre默认语言环境:it_IT,平台编码:Cp1252操作系统名称:"windows 7",版本:"6.1",arch:"amd64",系列:"windows"[DEBUG]使用连接器WagonRepositoryConnector优先级为0.0表示https://repo.maven.apache.org/maven2通过*****:8080表示用户名=*****,密码=***下载:https:// repo. maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom [警告]无法检索org.apache.maven.plugins的插件描述符: maven-clean-plugin:2.5:插件org.apache.maven.plugins:maven-clean-plugin:2.5或其中一个依赖项无法解析:无法读取org.apache.maven.plugins的工件描述符:maven- clean-plugin:jar:2.5 org.apache.maven.plugin.PluginResolutionException:插件org.apache.maven.pl ugins:maven-clean-plugin:2.5或其中一个依赖项无法解析:无法读取org.apache.maven.plugins的工件描述符:maven-clean-plugin:jar:2.5 org.apache.maven.plugin .internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)在org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)在org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java :81)在org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)在org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)在org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)在org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)在组织 位于org.apache.maven.lifecycle.internal的org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)中的.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220) .DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)org.apache.maven.cli.MavenCli.doMain(MavenCli.的java:214)在org.apache.maven.cli.MavenCli.main(MavenCli.java:158)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingM ethodAccessorImpl.java:43)在org.codehaus.plexus的org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)的java.lang.reflect.Method.invoke(Method.java:606) .classworlds.launcher.Launcher.launch(Launcher.java:229)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)引起:org.eclipse.aether.resolution.ArtifactDescriptorException:无法读取org.apache.maven.plugins的工件描述符:maven-clean-plugin:jar:2.5 atg.apache.maven. repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)位于org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor的org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231) DefaultRepositorySystem.java:288)org.apache.maven.plugin.internal.DefaultPluginDep endenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)... 23更多引起:org.eclipse.aether.resolution.ArtifactResolutionException:无法传输工件org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central(https://repo.maven.apache.org/maven2):sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到要求的有效证书路径在org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)处org.eclipse.aether org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)靶. org.eclipse.aether.transfer:internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)在org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)...... 26多所致.ArtifactTransferExceptio n:无法传输工件org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central(https://repo.maven.apache.org/maven2):sun.security.validator.ValidatorException :PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap(WagonRepositoryConnector.java:1016)上找到请求目标的有效证书路径. eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap(WagonRepositoryConnector.java:1004)在org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run(WagonRepositoryConnector.java:725)在org.eclipse.aether.util .concurrency.RunnableErrorForwarder $ 1.run(RunnableErrorForwarder.java:67)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)引起:org.apache.maven.wagon.Transf erFailedException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData有效的认证路径请求的目标(AbstractHttpClientWagon.java:935)位于org.apache的org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88). maven.wagon.StreamWagon.get(StreamWagon.java:61)at org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run(WagonRepositoryConnector.java:660)... 4更多引起:javax.net.ssl .SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.ssl.Alerts.getSSLException找到所请求目标的有效证书路径(Alerts.java: 192)在sun.security.ssl.SSLSocketImpl.fatal(SSLSocketIm pl.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)sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)sun.security.ssl.Handshaker. process_record(Handshaker.java:804)在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)在sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)在sun.security.ssl.SSLSocketImpl .startHandshake(SSLSocketImpl.java:1339)在sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)在org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory .java:280)at org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator)的.java:167)在org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)在org.apache.maven.wagon.providers.http.httpclient.impl .execchain.MainClientExec.establishRoute(MainClientExec.java:392)在org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:218)在org.apache.maven.wagon .providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)在org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:85) at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient. doOecute(InternalHttpClient.java:186)位于org.apache.maven.wagon.provide的org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)sun.security.validator:rs.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)在org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)... 8个所致.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.validBuild(PKIXValidator.java:385)的sun.security.validator处找到所请求目标的有效证书路径.PKIXValidator.engineValidate(PKIXValidator.java:292)在sun.security.validator.Validator.validate(Validator.java:260)在sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)在sun.security. ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)在sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)在sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)... 27更多引起:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)的java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)处找到所请求目标的有效证书路径sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)... 33更多
bio*_*nfo 174
事实是您的maven插件尝试连接到https远程存储库
(例如https://repo.maven.apache.org/maven2/)
这是Maven Central的新SSL连接,于2014年8月推出!
所以,请您验证您的settings.xml是否具有正确的配置.
<settings>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>securecentral</activeProfile>
</activeProfiles>
<profiles>
<profile>
<id>securecentral</id>
<!--Override the repository (and pluginRepository) "central" from the
Maven Super POM -->
<repositories>
<repository>
<id>central</id>
<url>http://repo1.maven.org/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://repo1.maven.org/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
Run Code Online (Sandbox Code Playgroud)
您也可以像这样使用简单的http maven存储库
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
Run Code Online (Sandbox Code Playgroud)
如果我的解决方案有效,请告诉我;)
J.
And*_*ndy 161
上面的答案是一个很好的工作解决方案,但如果你想使用SSL仓库,这里有如何做到这一点:
现在打开命令提示符并键入(使用您自己的路径):
keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore
现在,您可以使用参数再次运行该命令
-Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
在linux下使用绝对路径
-Djavax.net.ssl.trustStore=/tmp/mavenKeystore
否则会发生这种情况
像这样:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
可选的:
您可以使用MAVEN_OPTS环境变量,因此您不必再担心它.在此处查看有关MAVEN_OPTS变量的更多信息:
Luk*_*uke 21
我偶然发现了这个错误报告:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
它似乎是我们这里问题的原因.有ca-certificates-java的东西遇到错误而没有完全填充cacerts.对我来说,这是在我升级到15.10之后开始发生的,这个错误可能发生在那个过程中.
解决方法是执行以下命令:
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
如果您检查密钥库的内容(如我原来的答案),您现在将看到更多,包括所需的DigiCert全局根CA.
如果您在我的原始答案中完成了该过程,则可以通过运行此命令来清理我们添加的密钥(假设您未指定其他别名):
sudo keytool -delete -alias mykey -keystore/etc/ssl/certs/java/cacerts
Maven现在可以正常工作了.
我只想扩展Andy关于添加证书和指定密钥库的答案.这让我开始,并结合其他地方的信息,我能够理解问题,找到另一个(更好的?)解决方案.
Andy的答案指定了一个具有Maven证书的新密钥库.在这里,我将更广泛地将根证书添加到默认的java信任库.这允许我在不指定密钥库的情况下使用mvn(和其他java东西).
作为参考,我的OS是带有Maven 3.3.3的Ubuntu 15.10.
基本上,此设置中的默认Java信任库不信任Maven仓库(DigiCert全局根CA)的根证书,因此需要添加它.
我在这里找到并下载:
https://www.digicert.com/digicert-root-certificates.htm
然后我找到了默认的信任库位置,它位于此处:
的/ etc/SSL /证书/ JAVA/cacerts中
您可以通过运行此命令来查看当前所在的证书:
keytool -list -keystore/etc/ssl/certs/java/cacerts
出现提示时,默认密钥库密码为"changeit"(但没人做过).
在我的设置中,"DigiCert Global Root CA"的指纹不存在(DigiCert在上面的链接中将其称为"指纹").所以这是添加它的方法:
sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore/etc/ssl/certs/java/cacerts
如果你信任证书,这应该提示,说是.
再次使用keytool -list验证密钥是否存在.我没有费心去指定一个别名(-alias),所以它最终是这样的:
mykey,2015年12月2日,trustedCertEntry,证书指纹(SHA1):A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C :54:36
然后我就能正常运行mvn命令,无需指定keystore.
Mit*_*n.O 12
如果这种情况是由公司防火墙引起的,并且您使用的是 Windows,则您的 Windows 证书存储可能配置为信任防火墙。-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT您可以通过将选项添加到命令行或 MAVEN_OPTS 来告诉 Java 依赖 Windows 证书。
小智 10
我实际上遇到了同样的问题。
当我跑
mvn 清洁包
在我的 Maven 项目中,我通过 Maven 工具收到此证书错误。
我一直跟着@Andy 的回答直到我下载了.cer文件
之后,其余的答案对我不起作用,但我做了以下操作(我在 Linux Debian 机器上运行)
首先,运行:
keytool -list -keystore "Java 路径+"/jre/lib/security/cacerts""
例如在我的情况下是:
keytool -list -keystore /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security/cacerts
如果它询问密码,只需按回车键。
此命令应该列出 java 接受的所有 ssl 证书。例如,当我运行此命令时,我获得了 93 个证书。
现在将下载的文件.cer添加到cacerts通过运行以下命令文件中:
sudo keytool -importcert -file /home/hal/Public/certificate_file_downloaded.cer -keystore /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/security/cacerts
写下您的 sudo 密码,然后它会询问您 密钥库密码的信息
默认的一个是 changeit
然后说y你信任这个证书。
如果你运行命令
keytool -list -keystore /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security/cacerts
再一次,就我而言,我得到了cacerts 的94 个内容文件的
这意味着,它已成功添加。
Bal*_*yan 10
您可以手动导入SSL证书,只需将其添加到密钥库即可.
对于linux用户,
句法:
keytool -trustcacerts -keystore/jre/lib/security/cacerts -storepass changeit -importcert -alias nexus -file
示例:
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
步骤1:获取网站证书的内容(您希望将其作为受信任的根导入)
$ keytool -printcert -rfc -sslserver maven.2xoffice.com*
-----BEGIN CERTIFICATE-----
MIIFNTCCBB2gAwIBAgIHJ73QrVnyJjANBgkqhkiG9w0BAQsFADCBtDELMAkGA1UEBhMCVVMxEDAO
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMxITAfBgNVBAoT
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
...
-----END CERTIFICATE-----
The -rfc option outputs the certificate chain in PEM-encoded format for easy import back into a keystore.
Run Code Online (Sandbox Code Playgroud)
第 2 步:将整个内容(包括 BEGIN CERTIFICATE 和 END CERTIFICATE 行,在本例中很重要)保存为 Godaddyg2.pem 并通过以下方式将其导入我的信任存储:
第三步:在keystore(java可信密钥库)中导入证书
$ keytool -importcert -file ./godaddyg2.pem -keystore $JRE_LIB/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)
小智 6
发生这种情况是因为您的 Maven 插件尝试连接到HTTPS远程存储库 ( https://repo.maven.apache.org/maven2 ) 或 ( https://repo1.maven.apache.org )。
不久前,您可以将这些 URL 更改为使用 HTTP,而不是使用 HTTPS,但自2020 年 1 月 15 日起,这些 URL 不再有效,只能使用 HTTPS URL。
作为解决此问题的简单方法,您可以在 settings.xml 文件中使用不安全的Maven URL。因此,您需要将上面提到的所有引用更改为:http://insecure.repo1.maven.org/maven2/
提示:您的 JAVA_HOME 变量始终需要指向 JDK 路径,而不是 JRE 路径,例如:“C:\Program Files\Java\jdk1.7.0_80”。
| 归档时间: |
|
| 查看次数: |
218140 次 |
| 最近记录: |