在代理后面使用Maven和SSL的问题


133

我刚刚下载了Maven,并试图运行在“五分钟内的Maven”页面(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证书错误,并且无法从中央Maven存储库下载https://repo.maven.apache.org/maven2。错误为“ SunCertPathBuilderException:无法找到到所请求目标的有效证书路径”。

我正坐在公司防火墙后面,并且已经正确配置了两者的代理设置httphttps可以通过settings.xml文件进行访问。我怀疑每个下载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

2
我按照rec的答案来解决它,以忽略SSL证书检查。
Evin1_

Answers:


182

事实是您的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>

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


2
感谢快速,准确的响应,它为我工作,可能会帮助很多在2014年8月之后开始使用maven的人:-)同时,我弄清楚了如何使其与SSL一起使用。我将其发布为下面的答案,以帮助他人,但是您的答案将是官方接受的答案。谢谢
安迪

谢谢Andy;)两种解决方案都对您有用吗?还是其他选择?
bio.info 2014年

4
是的,我尝试过了,而且效果很好。但是,在第一个代码块中,我必须将两个存储库URL都从https更改为http,否则我将得到与以前相同的错误消息。此外,对于任何尝试此操作的人,请不要忘记<activeProfiles>标记。
安迪

1
刚刚尝试了第二种替代的简单溶液,它对我有用...谢谢。
Blue Diamond

7
从2020年1月15日开始,中央存储库不再支持通过纯HTTP进行的不安全通信,并且要求对存储库的所有请求都通过HTTPS进行加密。
Ahmad Alkhatib

183

上面的答案是一个很好的解决方案,但是如果您想使用SSL存储库,请按以下步骤操作:

  • 使用浏览器(我使用IE)访问https://repo.maven.apache.org/
    • 单击锁图标,然后选择“查看证书”
    • 转到“详细信息”选项卡,然后选择“保存到文件”
    • 选择类型“ Base 64 X.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

可选的:

您可以使用MAVEN_OPTS环境变量,因此您不必再担心它。在此处查看有关MAVEN_OPTS变量的更多信息:


15
这应该被接受为正确答案。您的ISA代理正在插入JDK不信任的中间证书。
哥顿

2
我让Maven通过命令行工作。我如何使其在日食中工作?
Prabodh Mhalgi 2015年

易于剪切的MAVEN_OPTS:-Xmx512m -Djavax.net.ssl.trustStore = trust.jks -Djavax.net.ssl.trustStorePassword = -Djavax.net.ssl.keyStore = / home / directory / mycertificate.p12- Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.keyStorePassword = XXXXXX
Al Lelopath

这解决了我的问题。当它询问密钥库密码时,如果尚未更改,则默认值为“ changeit”。:)
John Manko

3
另外,在Ubuntu上,您可能会像sudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko

23

更新资料

我偶然发现了这个错误报告:

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

这似乎是我们这里出现问题的原因。ca-certificates-java遇到错误,未完全填充cacerts。对我来说,这是在我升级到15.10之后开始发生的,此错误可能是在此过程中发生的。

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

须藤/var/lib/dpkg/info/ca-certificates-java.postinst配置

如果您检查密钥库的内容(如我的原始答案一样),现在将看到更多内容,包括所需的DigiCert Global RootCA。

如果您在我的原始答案中完成了该过程,则可以通过运行以下命令清理添加的密钥(假设您未指定其他别名):

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

Maven现在可以正常工作了。


原始答案

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

Andy的答案专门指定了一个带有Maven证书的新密钥库。在这里,我将进行更广泛的介绍,并将根证书添加到默认的Java信任库中。这使我无需指定密钥库就可以使用mvn(和其他Java工具)。

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

基本上,此设置中的默认Java信任库不信任Maven存储库的根证书(DigiCert全球根CA),因此需要添加它。

我在这里找到并下载:

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

然后,我找到了默认的信任库位置,该位置位于此处:

/ etc / ssl / certs / java / cacerts

通过运行以下命令,您可以查看其中当前有哪些证书:

keytool-列表-keystore / etc / ssl / certs / java / cacerts

出现提示时,默认的密钥库密码为“ changeit”(但从未有人这样做)。

在我的设置中,“ DigiCert全球根CA”的指纹不存在(在上面的链接中DigiCert称其为“缩略图”)。因此,这是添加方法:

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

如果您信任证书,这将提示您,请说是。

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

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

然后,我可以正常运行mvn命令,无需指定密钥库。


感谢安迪。并转发给Leeland,后者重新发布了他的博客。 nodsw.com/blog/leeland/2006/12/… 对你来说,@ Luke。
ajoshi

13

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


11

您可以手动导入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


首先,您仍然必须按照Andy's answer中所述保存证书。因此,扩展名将为“ .cer”。
sjngm

9

这可能不是最佳解决方案。我将maven从3.3.x更改为3.2.x。这个问题不见了。


我尝试安装证书两个小时而没有运气,这个解决方案终于奏效了!我上班的Maven的最新版本是3.2.2。
jlars62

3.3.3和3.2.5不适用于我,但3.0.5
可行

我最终来自搜索引擎,但我使用的是Gradle而不是Maven。更新我的较旧版本的Gradle也为我解决了这些怪异的SSL问题。
Nik Reiman

6

我实际上有同样的问题。

当我跑步时

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

如果询问密码,只需按Enter。

该命令应该列出Java接受的所有ssl证书。例如,当我运行此命令时,我得到了93个证书。

现在,通过运行以下命令将下载的文件.cer添加到cacerts文件:

sudo keytool -importcert-文件/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

再次以我为例,我得到了94个cacerts文件的内容

这表示已成功添加。


2

一个快速的解决方案是在您的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>

从来没有避免搜索认证的地方。


1
值得在答案线程中向下滚动。这很简单!

1

当Maven尝试自动下载必要的模块时,我也遇到了关于SSL证书的相同错误。
作为补救措施,我试图实现上述卢克的答案,但发现DigiCert全球根CA证书已经在Java的受信任密钥库中。

帮助我的是添加%JAVA_HOME%\bin到Path变量中(我正在运行Windows)。这%JAVA_HOME%是一个JDK位置,而不仅仅是JRE位置,因为Maven需要一个JDK。
我不确定为什么有帮助,但确实有帮助。我绝对确定这是我唯一更改的内容。



1

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

步骤2:将整个内容(包括BEGIN CERTIFICATE和END CERTIFICATE行,在这种情况下很重要)另存为godaddyg2.pem,并通过以下方式将其导入到我的信任存储中:

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

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

1

对我有用的是:

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

(注意:对于其他用户,配置时可以使用${user.home}/.m2/settings.xml。如果user.home中没有settings.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代理。对于VSCode settings.json

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

对于Win10:开始/搜索>网络代理设置>脚本地址 在此处输入图片说明

资料来源:


0

在相同的情况下,我也遇到了这个问题,并且针对堆栈溢出的相关问题写了详细的答案,解释了如何使用GUI工具更轻松地修改系统的证书。我认为这比为特定项目使用一次性密钥库或修改Maven的设置(这可能会带来麻烦)要好一些。


0

即使我将证书放入cacerts中,我仍然遇到错误。轮到我们将它们放在jre中,而不是jdk / jre中。

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


0

我遇到的问题是,之前,我使用的是安装了证书的jdk 1.8.0_31。我切换到jdk 1.8.0_191,但未安装证书。

但是,我的项目运行良好,我意识到它们的依赖项已经下载。因此,他们只会编译和打包那些项目。但是,这对于新的Maven项目不起作用,因为它们的依赖项没有较早下载。

解::

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

0

创建@Andy提到的密钥库之后。在Eclipse中,我添加了jvm args,并且可以正常工作。

在此处输入图片说明

在此处输入图片说明


0

我在SSL和Maven上也遇到了同样的问题。我公司的IT策略限制了我对计算机配置进行任何更改,因此我从另一台计算机复制了整个.m2并将其粘贴到.m2文件夹中,然后它可以正常工作。

.m2文件夹通常位于c \ user \ admin下


-1

另一个原因:如果打开Charles,您也​​可能会遇到此问题,在这种情况下,请退出Charles。


-1

我只是使用了新的Java版本,它对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.