代理后使用 Maven 和 SSL 的问题

我刚刚下载了 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

当我运行它时,我得到了一个 SSL 证书错误,无法从 https://repo.maven.apache.org/maven2的中央 Maven 存储库下载。错误是“ SunCertPathBuilderException: 无法找到到所请求目标的有效证书路径”。

我坐在公司的防火墙后面,并且已经正确地配置了通过 settings.xml文件进行 httphttps访问的代理设置。我怀疑下载 Maven 并首次运行它的每个人都必须导入 Maven 存储库的 SSL 证书,所以问题一定是代理。有人有这方面的经验吗?

下面是完全调试模式下的堆栈跟踪(- 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)
Maven home: C:\Projects\maven\bin\..
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_45\jre
Default locale: it_IT, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
[DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for https://repo.maven.apache.org/maven2 via *****:8080 with username=*****, password=***
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)
at org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java:81)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:288)
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)
... 23 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)
... 26 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1016)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1004)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:725)
at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.maven.wagon.TransferFailedException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)
at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:660)
... 4 more
Caused by: 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 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.java: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 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)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:392)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
at 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.doExecute(InternalHttpClient.java:186)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)
... 8 more
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:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 27 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:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 33 more
407188 次浏览

事实上,您的 maven 插件尝试连接到 https 远程存储库
(例如 https://repo.maven.apache.org/maven2/)

这是一个新的 SSL 连接为 MavenCentral 提供了在2014年8月!

所以,请验证 setings.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>

您也可以像这样使用简单的 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>

请让我知道我的解决方案是否有效;)

J.

上面的答案是一个很好的工作解决方案,但是如果你想使用 SSL 回购,这里有一些方法:

  • 使用浏览器(我使用 IE)访问 < a href = “ https://repo.maven.apache.org/”rel = “ norefrer”> https://repo.maven.apache.org/
    • 点击锁定图标,选择“查看证书”
    • 进入“详细信息”选项卡,选择“保存到文件”
    • 选择类型“ Base64X.509(. CER)”并将其保存到某个位置
  • 现在打开命令提示符并键入(使用您自己的路径) :

    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

可选项:

你可以使用 ABc0环境变量,这样你就不用再担心了。查看更多关于 MAVEN_OPTS变量 给你的信息:

这可能不是最好的解决方案,我把我的专家从3.3. x 改成了3.2. x,这个问题就消失了。

更新

我无意中发现了这个漏洞报告:

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

这似乎就是我们这里出问题的原因。一些使用 ca- 证书-java 遇到错误并且没有完全填充 ccerts 的东西。对我来说,这是在我升级到15.10之后才开始发生的,这个 bug 可能是在升级过程中发生的。

解决办法是执行以下命令:

Sudo/var/lib/dpkg/info/ca-securities-java. postinst configure

如果检查密钥存储库的内容(就像我最初的答案一样) ,您现在将看到更多内容,包括所需的 DigiCert 全局根 CA。

如果您在我最初的回答中经历了这个过程,那么您可以通过运行这个命令来清除我们添加的密钥(假设您没有指定其他别名) :

Sudo keytool-delete-alias mykey-keystore/etc/ssl/certs/java/ccerts

Maven 现在可以正常工作了。


原始答案

我想详细介绍一下 Andy 关于添加证书和指定密钥存储库的回答。这让我开始,并结合其他地方的信息,我能够理解问题,并找到另一个(更好?)解决方案。

Andy 的回答特别指定了一个具有 Maven 证书的新密钥存储库。在这里,我将进一步扩展并将根证书添加到默认的 java 信任存储中。这允许我在不指定密钥库的情况下使用 mvn (和其他 java 内容)。

作为参考,我的操作系统是 Ubuntu 15.10和 Maven 3.3.3。

基本上,这个设置中的默认 java 信任库不信任 Maven repo (DigiCert Global Root CA)的根证书,所以需要添加它。

我在这里找到并下载了:

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

然后我找到了默认的信任库位置,它位于这里:

/etc/ssl/certs/java/ccerts

您可以通过运行以下命令查看当前的 certs:

Keytool-list-keystore/etc/ssl/certs/java/ccerts

当出现提示时,默认的密钥存储密码是“ changeit”(但从来没有人这样做)。

在我的设置中,“ DigiCert 全球根 CA”的指纹不存在(DigiCert 在上面的链接中称之为“拇指指纹”)。下面是如何添加它:

Sudo keytool-import-file DigiCertGlobalRootCA.crt-keystore /etc/ssl/certs/java/ccerts

如果您信任该证书,那么这将提示您,说 yes。

再次使用 keytool-list 验证密钥是否存在。我没有麻烦指定别名(- alias) ,所以结果是这样的:

Mykey,2015年12月2日,受托人 CertEntry,证书指纹(SHA1) : A8:98:5 D: 3A: 65: E5: E5: C4: B2: D7: D6: D: 40: C6: DD: 2F: B1:9C: 54:36

然后我可以像平常一样运行 mvn 命令,不需要指定 keystore。

当 Maven 试图自动下载必要的模块时,我在 SSL 证书方面遇到了同样的错误。
作为补救措施,我试图实现 Luke 上面的答案,但是发现 DigiCert Global Root CA 证书已经在 Java 的可信密钥存储库中了。< br > < br > 帮助我的是将 %JAVA_HOME%\bin添加到 Path 变量(我正在运行 Windows)。而且 %JAVA_HOME%是一个 JDK 位置,而不仅仅是一个 JRE 位置,因为 Maven 需要一个 JDK。
我不知道为什么它有帮助,但它做到了。我很确定这是我唯一改变的东西。

其实我也有同样的问题。

当我跑的时候

干净包装

在我的 maven 项目中,我通过 maven 工具得到了这个证书错误。

我一直跟着@Andy 的答案,直到我下载了 。 cer文件

在那之后,剩下的答案对我来说不起作用,但是我做了下面的事情(我在 Linux Debian 机器上运行)

首先,跑步:

Keytool-list-keystore“ Java path +”/jre/lib/security/ccerts”

例如,在我的例子中,它是:

Keytool-list-keystore/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security/ccerts

如果它询问密码,只需按回车键。

这个命令应该列出 java 接受的所有 ssl 证书。 当我运行这个命令时,在我的例子中我得到了93个证书。

现在,通过运行以下命令将下载的文件 。 cer添加到 恶性肿瘤文件:

Sudo keytool-import cert-file/home/hal/Public/certificate _ file _ download. cer-keystore/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/security/ccerts

写你的 sudo 密码,然后它会问你关于 密钥存储库密码

默认值是 改变

然后说 表示您信任此证书。

如果你运行命令

Keytool-list-keystore/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security/ccerts

同样,在我的例子中,我得到了 恶性肿瘤文件的94个内容

它的意思是,它被成功地添加了。

如果这个问题发生在 HTTPS存储库上,比如说 https://repo.spring.io/milestone,那么您可以尝试使用不安全的: http://repo.spring.io/milestone来替换它。 就是这样

您可以手动导入 SSL 证书并将其添加到密钥存储库。

对于 linux 用户,

句法:

Keytool-trust ccerts-keystore/jre/lib/security/ccerts - storepass changeit-import-alias nexus-file

例如:

密钥库 /Library/Java/JavaVirtualMachines/jdk1.8.0 _ 144. jdk/content/Home/jre/lib/security/ccerts - storepass changeit-import cert-alias nexus-file ~/Downloads/abc.com-ssl. crt

在同样的情况下,我遇到了这个问题,我写了一个关于堆栈溢出的相关问题的 详细的答案,解释了如何使用 GUI 工具更容易地修改系统的 ccerts。我认为这比为特定项目使用一次性密钥存储库或修改 maven 的设置(这可能会导致麻烦)要好一些。

步骤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.

第二步: 保存整个代码(包括 BEGIN CERTIFICATE 和 END CERTIFICATE 行,这在本例中是非常重要的) ,并通过以下方式将其导入到我的信任存储中:

步骤3: 导入密钥存储库中的证书(java 受信任的密钥存储库)

$ keytool -importcert -file ./godaddyg2.pem -keystore $JRE_LIB/lib/security/cacerts

即使我把证书放进了卡塞尔,我还是得到了错误。 结果我把它们放在了 Jre 里,而不是 JDK/Jre 里。

有两个密钥库,记住! ! !

问题是 之前,我使用的是安装了证书的 jdk 1.8.0 _ 31。 我切换到 jdk 1.8.0 _ 191,但没有安装证书。

但是,我的项目运行良好,我意识到他们的依赖已经下载。因此,他们只会编译和打包这些项目。 但是,这并不适用于新的 maven 项目,因为它们的依赖关系没有在早些时候下载。

解决方案:

  1. 切换到新项目的早期 jdk 版本(已经安装了证书) ,并进行干净安装
  2. 再次下载您最近切换到的新 jdk 版本的证书,然后进行干净安装

一个快速的解决方案是在 pom.xml 中添加这段代码:

<repositories>
<repository>
<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>
</repository>
</repositories>

为避免查册,。

对我有效的方法是:

${MAVEN_HOME}/conf/settings.xml中配置 <proxy>设置:

(注意: 对于其他人来说,它在配置 ${user.home}/.m2/settings.xml时工作。如果 user.home 中没有 setings.xml,只需将其从 maven 目录中的 conf/复制过来。)

  <!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->


<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<username></username>
<password></password>
<host>my.proxy.host.com</host>
<port>8080</port>
<nonProxyHosts></nonProxyHosts>
</proxy>


</proxies>

然后指向 pom.xml,从 http://maven central repo 下载:

<project>
...
<repositories>
<repository>
<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>
</repository>
</repositories>
...
</project>

您可能还需要在 IDE 中配置 http 代理:

{
...
"http.proxy": "http://my/proxy/script/address/my-proxy.pac",
...
}

对于 Win10: 开始/搜索 > 网络代理设置 > 脚本地址 enter image description here

资料来源:

只是另一个原因: 如果你打开查尔斯,你也可能会遇到这个问题,在这种情况下只是退出查尔斯。

在创建了@Andy 提到的密钥存储库之后。 在 Eclipse 中,我添加了 jvm args,它工作正常。

enter image description here

enter image description here

您可以使用 -Dmaven.wagon.http.ssl.insecure=true选项

SSL 和 Maven 也有同样的问题。我的公司 IT 政策限制我对计算机配置进行任何更改,所以我复制了整个。从我的另一台电脑,并粘贴它 m2。M2文件夹,它工作。

. m2文件夹通常位于 c 用户管理员下

我只是简单地使用了新的 java 版本,它对我很有效。

之所以会发生这种情况,是因为您的 maven 插件试图连接到 HTTPS远程存储库 (https://repo.maven.apache.org/maven2)或(https://repo1.maven.apache.org)。

一段时间以前,您可以改变这些 URL 的使用 HTTP 而不是使用 HTTPS,但自从 2020年1月15日,这些 URL 的不再工作,只有 HTTPS 的。

作为修复此问题的一种简单方法,您可以在 setings.xml 文件中使用 没有安全感 Maven URL。因此,您需要将上面提到的所有参考文献更改为: http://insecure.repo1.maven.org/maven2/

提示: 您的 JAVA _ HOME 变量总是需要指向您的 JDK 路径,而不是您的 JRE 路径,例如: “ C: Program Files JAVA jdk1.7.0 _ 80”。

Ymptom: 在配置 Nexus 为 SSL 服务之后,使用 peer not authenticatedPKIX path building failed的 maven 构建失败。

这通常是由于在 Nexus 上使用自签名的 SSL 证书造成的。Java 不认为这些是有效的证书,默认情况下不允许连接到运行它们的服务器。

你有几个选择来解决这个问题:

  1. 将 Nexus 服务器的公共证书添加到运行 Maven 的 Java 的信任存储中
  2. 在 Nexus 上获得由 Verisign 这样的根证书机构签署的证书
  3. 告诉 Maven 接受证书,即使它没有签名

对于选项1,您可以使用 keytool命令并遵循下面文章中的步骤。

在基于 Java 的客户端中显式信任自签名或私有证书

对于选项3,使用 -Dmaven.wagon.http.ssl.insecure=true调用 Maven。如果在证书中配置的主机名与运行 Nexus 的主机名不匹配,您可能还需要添加 -Dmaven.wagon.http.ssl.allowall=true

注意 : 这些附加参数以静态方式初始化 初始化程序,因此它们必须通过 MAVEN_OPTS传入 环境变量。将它们在命令行上传递给 Maven will 不是工作。

有关更多信息,请参见 给你:

只比安迪出的多一点点。

如果您碰巧发现了一个链,那么您需要获取最上面的(根)证书。

我花了一天才想明白。

如果这种情况是由公司防火墙引起的,并且您正在使用 Windows,则 Windows 证书存储可能配置为信任防火墙。您可以通过在命令行中添加选项 -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT或 MAVEN _ OPTS 来告诉 Java 依赖于 Windows 证书。

如果你没有 * . crt 文件并且可以访问 maven web 应用(nexus 等) , 解决方案是(对于 Firefox 浏览器) :

  1. 打开浏览器进入 themavenrepo.com
  2. 单击顶部栏中的锁图标
  3. 单击“连接安全”,然后单击“更多信息”
  4. 单击“安全”选项卡,然后单击“查看证书”
  5. 在「杂项」部分,按「 pem (cert)」下载
  6. 转到终端并运行: openssl x509-outform der-in downloaded.pem-out whatevernameyouwant. crt
  7. Sudo keytool-import cert-file whatevernameyouwan.crt-alias Random aliasname-keystore { your _ java _ install _ dir }/jre/lib/security/ccerts-storepass changeit