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

时间:2014-09-18 11:36:15

标签: java maven ssl proxy

我刚刚下载了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:无法找到所请求目标的有效证书路径"。

我坐在公司防火墙后面,并通过http文件正确配置了httpssettings.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版本: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   username = *****,密码= ***       正在下载: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或其中一个   无法解析依赖项:无法读取工件描述符   for org.apache.maven.plugins:maven-clean-plugin:jar:2.5       org.apache.maven.plugin.PluginResolutionException:插件org.apache.maven.plugins:maven-clean-plugin:2.5或其中一个   无法解析依赖项:无法读取工件描述符   for 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.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220)               在org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)               at org.apache.maven.lifecycle.internal.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)               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)               在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)               在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)               在org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)               在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)       引起:org.eclipse.aether.resolution.ArtifactDescriptorException:失败   读取工件描述符   org.apache.maven.plugins:Maven的清理插件:罐子: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)               在org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)               ......还有23个       引起:org.eclipse.aether.resolution.ArtifactResolutionException:不能   传输工件org.apache.maven.plugins:maven-clean-plugin:pom:2.5   从/到中央(https://repo.maven.apache.org/maven2):   sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径               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)               在org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)               ......还有26个       引起:org.eclipse.aether.transfer.ArtifactTransferException:无法传输工件   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)               在org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap(WagonRepositoryConnector.java:1004)               at 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)               at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)               在java.lang.Thread.run(Thread.java:744)       引起:org.apache.maven.wagon.TransferFailedException:sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径               在org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)               在org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)               在org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)               在org.apache.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:无法   找到所请求目标的有效证书路径               at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)               at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)               在sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)               在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)               在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)               在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)               在org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)               在org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)               在org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)               在org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)               在org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)               ......还有8个       引起:sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径               在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个       引起:sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径               at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)               在java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)               at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)               ......还有33个

21 个答案:

答案 0 :(得分:166)

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

如果我的解决方案有效,请告诉我。)

学家

答案 1 :(得分:151)

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

  • 使用浏览器(我使用IE)转到https://repo.maven.apache.org/
    • 点击锁定图标,然后选择&#34;查看证书&#34;
    • 转到&#34;细节&#34;选项卡,然后选择&#34;保存到文件&#34;
    • 选择类型&#34; Base 64 X.509(.CER)&#34;并将其保存在某个地方
  • 现在打开命令提示符并键入(使用您自己的路径):

    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

    否则this将会发生

  • 喜欢这样:

    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变量here的更多信息:

答案 2 :(得分:22)

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

答案 3 :(得分: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东西)。

作为参考,我的操作系统是带有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

出现提示时,默认密钥库密码为&#34; changeit&#34; (但没人做过)。

在我的设置中,&#34; DigiCert Global Root CA&#34;不存在(DigiCert称之为&#34;指纹&#34;在上面的链接中)。所以在这里添加它:

  

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore   的/ etc / SSL /证书/ 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命令,无需指定密钥库。

答案 4 :(得分:9)

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

答案 5 :(得分:8)

这可能不是最好的解决方案。我将我的maven从3.3.x改为3.2.x.这个问题消失了。

答案 6 :(得分:4)

我实际上遇到了同样的问题。

当我跑

  

mvn clean package

在我的maven项目中,我通过maven工具获得了此证书错误。

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

之后,其余的答案对我不起作用,但我做了以下(我在Linux Debian机器上运行)

首先,运行:

  

keytool -list -keystore“Java path +”/ 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 -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个内容

这意味着,它已成功添加。

答案 7 :(得分:1)

当Maven尝试自动下载必要的模块时,我收到了与SSL证书相同的错误。
作为补救措施,我试图在上面实施Luke的答案,但发现DigiCert全局根CA证书已经存在于Java的可信密钥库中。

帮助我的是将%JAVA_HOME%\bin添加到Path变量(我正在运行Windows)。 %JAVA_HOME%是一个JDK位置,而不仅仅是一个JRE位置,因为Maven需要一个JDK 我不确定它为什么会有所帮助,但确实如此。我绝对相信这是我唯一改变的事情。

答案 8 :(得分:1)

如果 HTTPS 存储库出现此问题,请执行此操作。 https://repo.spring.io/milestone您可以尝试使用非安全替代http://repo.spring.io/milestone。 这就是它

答案 9 :(得分: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代理。对于settings.json中的VSCode:

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

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

来源:

答案 10 :(得分:0)

只是稍微超出了安迪推出的内容。

如果您碰巧找到链,您需要获取最顶层(根)证书。

我花了一天时间才弄明白。

答案 11 :(得分:0)

发生这种情况是因为您的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”。

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

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

enter image description here

enter image description here

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

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

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

解决方案::

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

答案 17 :(得分:0)

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

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

答案 20 :(得分:-1)

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