【问题标题】:Maven Error: (repeated) java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyMaven 错误:(重复)java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须非空
【发布时间】:2016-09-30 09:35:28
【问题描述】:

不得不再次询问。有人认为它是 duplicate question 并已回答并将其从列表中删除。

我正在使用带有 windows 的 maven (mvn) 批处理命令(不是带有 eclipse 的 m2e)来运行全新安装或解决依赖关系。有时,当 pom.xml 更改时,需要从我们的 nexus 服务器下载工件。 这曾经对我有用很长时间。

但现在连接到 nexus 服务器(https,服务器使用公司拥有的证书)失败,并出现“java.security.InvalidAlgorithmParameterException: trustAnchors 参数必须为非空” 我知道,我更改了 Java 版本。但我很确定我维护 cacerts 密钥库的方式与以前版本相同。 (至少我比较了两个证书中的指纹;它们是相同的)。

运行命令时 "mvn -s -Djavax.net.debug=all -Djava.net.ssl.trustStore="C:/Programme/Java/jre1.8.0_102/lib/security/cacerts" -Djavax.net.ssl。 trustStorePassword=changeit dependency:resolve”,ssl-trace 说:

keyStore is :    
keyStore type is : jks
keyStore provider is : 
init keystore
init keymanager of type SunX509
trustStore is: No File Available, using empty keystore.
trustStore type is : jks
trustStore provider is : 
init truststore

即使在命令中指定了keystore的路径和密码,在ssl trace中的回答还是找不到。

我不知道我可能会做出什么改变来解决这个问题。我更改了 Windows PATH 语句,但这与前面描述的命令无关。 任何提示表示赞赏

【问题讨论】:

    标签: java maven ssl keystore


    【解决方案1】:

    我遇到了同样的问题,我花了一天时间才解决它。 这是一个与 java 相关的问题,您可能会在错误堆栈中看到。 签到:

    /etc/ssl/certs/java 用于 cacerts 文件。
    1) 如果您在此处没有此文件,这就是您收到此错误的原因
    2) 如果您在此处有此文件,则表示这可能不是有效的 cacerts 文件。

    如果您愿意,可以使用以下命令对其进行更新:
    sudo apt-get install --reinstall ca-certificates
    如果它现在工作,那么完美(在我的情况下它没有工作)

    所以要解决这个问题:

    1. 直接从 oracle 下载 open-jdk8(在我的例子中)
    2. 解压 tar.gz 文件
    3. 在 jre/lib/security 下找到新的有效 cacerts 文件
    4. 将此文件复制到 /etc/ssl/certs/java(如果是这种情况,请删除旧文件)

    最后运行导致这个错误的命令,希望它消失了! 希望这会有所帮助。

    干杯

    【讨论】:

    • 太棒了!我在 Maven 5.3.2 和 Oracle JDK 10.0.2 上遇到了同样的问题。我从 Oracle 网站下载了 tar.gz,并通过“cp”更新了“cacerts”。像魅力一样工作。谢谢!
    【解决方案2】:

    我手动管理我的 jdk,并且在使用 openjdk-8 时遇到此错误。 我用 openjdk-11 替换了 cacerts,它工作得很好。 如果您尝试这样做,请务必先备份您的 cacerts。

    【讨论】:

    • 这对我有用。我有两个全新的 openjdk 安装:8 和 11。我将 jdk-11 证书复制到 jdk-8(以及 /etc/ssl/certs/java 以进行良好测量)并且它工作正常。 sudo cp /space/tools/java/jdk-11/lib/security/cacerts /space/tools/java/jdk-8/jre/lib/security/cacerts(忽略我奇怪的目录结构)
    • 我想 openjdk-8 中的证书已经过时了。我用 openjdk-11 中的文件替换了证书,它起作用了。
    • 这很反直觉,但这是对我有用的解决方案
    【解决方案3】:

    今天找到原因了:

    在历史上,我曾经设置过 WINDOWS 环境变量 MAVEN_OPTS "setx MAVEN_OPTS "-Djavax.net.ssl.trustStore...."。

    此处指定的路径不再存在。

    似乎这个设置甚至取代了我的问题中显示的请求。我认为这种行为至少是出乎意料的,但无论如何。当我修复环境变量(指向新路径;但无论如何我都会删除它)时,mvn-requests 工作正常。

    【讨论】:

    • 这也解决了我的问题。与您描述的类似问题。谢谢!
    • 这解决了我的问题,干杯
    【解决方案4】:

    环境中的无效参数没有被命令行中的 trustStore 设置否决,这可能是由于您的命令行中有 typo。它说:

    -Djava.net.ssl.trustStore=...
    

    但这应该是:

    -Djavax.net.ssl.trustStore=...
    

    【讨论】:

      【解决方案5】:

      我在 Windows 上遇到了同样的问题。我安装了两个 Java。 Oracle Java 和 OpenJDK 和 Maven 是用 OpenJDK 编译的,它给出了这个问题。

      由于我想继续使用 OpenJDK 编译源代码,为了解决这个问题,我在 Maven 命令中指定了 Oracle JRE 的 cacerts 库的信任库路径,如下所示。

      mvn clean install -DskipTests -Djavax.net.ssl.trustStore=/path-to-oracle-java/jre/lib/security/cacerts
      

      【讨论】:

        【解决方案6】:

        解决此问题的更简单的方法: 1.去下载亚马逊发布的Corretto OpenJDK 2.根据它的指南安装它。 3.设置使用这个Java DK。

        问题已在我的 Ubuntu 18 中修复。

        【讨论】:

          【解决方案7】:

          对于那些在 Windows 上遇到这个问题的人,我在 Windows10 上使用 maven 编译构建时遇到了同样的错误,经过大量搜索后,我意识到 java > jdk-x.x.x 目录丢失了lib/security/cacerts。

          将 cacerts 文件从现有 jre > lib/security 目录(或下载,如果不存在)复制到 jdk > lib/security 目录后,错误消失了 p>

          【讨论】:

            猜你喜欢
            • 2014-02-13
            • 1970-01-01
            • 1970-01-01
            • 2018-06-01
            • 2018-06-03
            • 1970-01-01
            • 2013-07-28
            • 2017-12-26
            • 1970-01-01
            相关资源
            最近更新 更多