Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误-trustAnchors参数必须为非空_Java_Hudson_Jakarta Mail_Jenkins - Fatal编程技术网

Java 错误-trustAnchors参数必须为非空

Java 错误-trustAnchors参数必须为非空,java,hudson,jakarta-mail,jenkins,Java,Hudson,Jakarta Mail,Jenkins,我试图在Jenkins/Hudson上配置我的电子邮件,但我不断收到错误: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 我在网上看到了大量关于这个错误的信息,但是我没有得到任何有用的信息。我在FedoraLinux上使用Sun的JDK,而不是OpenJDK 以下是我尝试过的几件事。我试着按照这个建议做,但是从Windows复制cacerts到

我试图在Jenkins/Hudson上配置我的电子邮件,但我不断收到错误:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
    non-empty
我在网上看到了大量关于这个错误的信息,但是我没有得到任何有用的信息。我在FedoraLinux上使用Sun的JDK,而不是OpenJDK

以下是我尝试过的几件事。我试着按照这个建议做,但是从Windows复制cacerts到我的Fedora盒托管Jenkins没有用。当我试图将Gmail配置为我的SMTP服务器时,我尝试了以下操作,但也没有成功。我还尝试手动下载和移动这些cacert文件,并使用上的各种命令将它们移到我的Java文件夹中


我愿意接受任何建议,因为我目前正陷于困境。我已经从Windows Hudson服务器上获得了它,但我在Linux上遇到了困难。

这个奇怪的消息意味着您指定的信任库是:

空的 找不到,或 无法打开 由于密码错误/丢失,或 例如,文件访问权限。
另请参见@AdamPlumb。

我从博客中找到了这个解决方案:

修复在OSX上运行OpenJDK 7时的信任锚问题。如果您在OSX上运行OpenJDK 7,并且看到此异常:

意外错误:java.security.invalidalgorithParameterException:信任锚 参数必须为非空 有一个简单的解决办法。只需在苹果JDK 1.6使用的相同cacerts文件中链接:

cd$/usr/libexec/java_home-v1.7/jre/lib/security ln-fsh/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts 您需要为已安装的每个OpenJDK版本执行此操作。只需将-v1.7更改为您想要修复的版本。运行/usr/libexec/java_home-V查看您安装的所有JRE和JDK


也许OpenJDK的伙计们可以将此添加到他们的安装脚本中。

在Quantal Quetzal或更高版本中,证书保存在包中。使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts,无论您使用的是什么JDK,都会将它们提取出来。

升级到Mavericks后,我在OSX上使用JDK1.7遇到了这个问题。对我有效的修复方法是简单地重新安装Java的Apple版本,可在上获得。

在更新OSX v10.9 Mavericks之后,当使用旧的Java 6并试图访问HTTPS URL时,我在OSX上也遇到了这种情况。修正案与彼得·克里恩斯相反;我需要将cacerts从1.7空间复制到1.6版本链接的位置:

(as root)
umask 022
mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts \
    /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security

升级到Mavericks后,我遇到了很多安全问题:

AmazonAWS的SSL问题 未使用Maven和Eclipse对对等机进行身份验证 trustAnchors参数必须为非空
我应用了这个Java更新,它解决了我所有的问题:

EJP基本上回答了这个问题,我意识到这是一个公认的答案,但我刚刚处理了这个边缘案例,我明白了,我想让我的解决方案永垂不朽

我以前为仅SSL访问设置的托管服务器上出现InvalidalgorithParameterException错误。问题是我已经用PKCS12格式设置了我的密钥库,但是我的信任库是JKS格式的


在我的例子中,我编辑了server.xml文件以将keystoreType指定给PKCS,但我没有指定truststoreType,因此它默认为keystoreType。将truststoreType显式指定为JKS为我解决了这个问题。

在Red Hat Linux上,我通过将证书导入/etc/pki/java/cacerts解决了这个问题。

这解决了我在Ubuntu上的问题:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
可在此处找到:


ca证书java在Oracle JDK/JRE中不是一个依赖项,因此必须显式安装。

我预期会出现类似的情况,因为我目前在支持中使用的替代JVM仅在JDK 1.7之前存在。为了安全起见,我使用8。。。反正

更新您的证书存储:

sudo update-ca-certificates -f
然后

在初始化参数中添加新值

sudo gedit $(path to your architecture specific ini i.e. TOS_DI...ini)

Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
对我来说,第二个条目起了作用。我认为,根据Talend Open Studio/TEnt+JVM的版本,它有不同的参数名,但它查找相同的密钥库文件。

sudo update-ca-certificates -f
要创建证书文件,请执行以下操作:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

我又开始做生意了,谢谢你们。遗憾的是,它没有包含在安装中,但我最终做到了。

在我的例子中,客户端应用程序中使用的JKS文件已损坏。我创建了一个新的,并在其中导入了目标服务器SSL证书。然后我在客户端应用程序中使用新的JKS文件作为信任存储,如:

System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);
资料来源:


我使用keystoreexplorer工具创建新的jk。您可以从该链接下载它。

错误表明系统无法在参数javax.net.ssl.truststore提供的路径中找到信任库

在Windows下,我将cacerts文件从jre/lib/security复制到Eclipse安装目录中与Eclipse.ini文件相同的位置,并添加了foll eclipse.ini中的默认设置:

我在cacerts的路径上遇到了一些问题%java_home%环境变量被覆盖了,所以我使用了这个简单的解决方案

这样做的目的是为信任库文件提供一个有效的路径——理想的情况是使用一个相对路径。也可以使用绝对路径

要确保存储类型为JKS,请运行以下命令:

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN
注意:由于证书有过期日期,或者可能因其他原因而无效,请不时检查cacerts中的证书是否仍然有效。您通常会在jdk的最新版本中找到证书的有效版本

System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\user-id\\Desktop\\tomcat\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "passwd");
您必须将以上两行添加到代码中。它无法找到信任库。

记录在案,这里没有一个答案对我有用。由于这个错误,我的Gradle构建开始神秘地失败,无法从中获取特定文件的头


事实证明,我已经将JAVA_HOME设置为我自己的OpenJDK个人版本,这是我为调试javac问题而构建的。将其设置回安装在我的系统上的JDK修复了它。

升级到Spring Boot 1.4.1或更高版本后,您也可能会遇到此错误,因为它附带了8.5.5作为其依赖项的一部分

问题在于Tomcat处理信任存储的方式。如果您碰巧在Spring引导配置中指定了与密钥库相同的信任存储位置,则在启动应用程序时可能会收到trustAnchors参数必须为非空的消息

server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks
只需删除server.ssl.trust-store配置,除非您知道需要它,在这种情况下,请参阅下面的链接

以下问题包含有关该问题的更多详细信息:

7069 7406 6703
对我来说,这是由于信任库中缺少trustedCertEntry造成的

要进行测试,请使用:

keytool -list -keystore keystore.jks
它给了我:

密钥库类型:JKS 密钥库提供程序:SUN 您的密钥库包含1个条目 证书别名,2017年7月31日,PrivateKeyEntry 即使my PrivateKeyEntry包含CA,它也需要单独导入:

keytool-import-alias root-ca1-file rootca.crt-keystore keystore.jks 它导入证书,然后重新运行keytool-list-keystore keystore.jks现在提供:

您的密钥库包含2个条目 证书别名,2017年7月31日,PrivateKeyEntry, 证书指纹SHA1: root-CA12017年8月4日,trustedCertEntry, 证书指纹SHA1:
现在它有了一个trustedCertEntry,Tomcat将成功启动。

如果您在Ubuntu上使用JDK9和Maven体验到这一点,您可以添加这个JVM选项-首先检查路径是否存在:

-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
如果文件丢失,请尝试安装ca证书,如有人所述:

sudo apt install ca-certificates-java

我在可信的Tahr上运行特定的Android套件进行测试时遇到了这个问题。正如沙欣所建议的,有两件事对我起了作用:

sudo update-ca-certificates -f

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

我在Linux上的Java9.0.1上看到了这个错误消息。这是由于JDK的一个已知错误造成的,从下载的.tar.gz二进制包中的cacerts文件是空的

请参阅的“已知问题”一段,指出TLS在OpenJDK 9上默认不工作

在Debian/Ubuntu和其他派生版本上,一个简单的解决方法是用ca证书java包中的文件替换cacerts文件:

sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts
在Red Hat Linux/CentOS上,您可以从ca证书包执行相同的操作:

sudo yum install ca-certificates
cp /etc/pki/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

我在互联网上找到的所有解决方案都不起作用,但一个改进版的似乎可以做到这一点

首先通过运行/usr/libexec/Java_home找到Java文件夹。对我来说是1.6.0.jdk版本。然后转到其lib/security子文件夹for me/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security

然后删除cacerts文件(如果已经有),并使用sudo find/-name cacerts在系统上搜索一个。它在我安装的Xcode或其他应用程序的版本中为我找到了多个项目,但也在我选择的/Library/internetplugins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts上找到了

使用该文件并在之前的Java文件夹sudo ln-fsh/Library/internetplugins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts中创建指向该文件的符号链接,它应该可以工作


我有两个-苹果2017-001下载的Java-我想这就是正确的证书来源,Oracle的证书安装在Sierra上。

我在尝试使用3时遇到了这个问题,从LTS Xenial Xerus升级到LTS Bionic Beaver

检查/usr/lib/jvm/java-8-oracle/jre/lib/security表明我的cacerts文件是指向/etc/ssl/certs/java/cacerts的符号链接

我还有一个可疑的文件名为cacerts.original


我将cacerts.original重命名为cacerts,这就解决了这个问题。

删除ca证书java包并再次安装它对我来说非常有用17.10 Artful Aardvark

sudo dpkg --purge --force-depends ca-certificates-java

sudo apt-get install ca-certificates-java
谢谢你,jdstrand:评论 1对于bug 983302,Re:ca certificates java无法在Oneiric Ocelot上安装java cacerts。

在Ubuntu 18.04中,此错误有不同的原因JEP 229,将jks密钥库默认格式切换为pkcs12格式,并使用新文件的默认格式生成Debian cacerts文件,并且:

Ubuntu 18.04和各种Docker映像,如openjdk:9-jdk,在 Java应用程序使用SSL和HTTPS,因为Java 9更改了文件格式,如果您需要的话 像Debian/Ubuntu那样从头开始创建这个文件。 在应用之前,使用Java命令行参数运行应用程序 java-Djavax.net.ssl.trustStorePassword=changeit。。。 验证此解决方案是否与您的特定问题相关。 参数本身也可以用作解决方法。 0首先,用“sudobash”让自己扎根。 1.使用Java cacerts的默认“changeit”密码保存空JKS文件。 为实现Dockerfile运行兼容性,请使用“printf”而不是“echo”。 /usr/bin/printf'\xfe\xed\xfe\xed\x00\x00\x02\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92'>/etc/ssl/certs/java/cacerts 2.将所有CA证书重新添加到以前的空文件中。 /var/lib/dpkg/info/ca-certificates-java.postinst-configure 状态2018-08-07,该漏洞已在Ubuntu仿生LTS 18.04.1和Ubuntu宇宙18.10中修复


在Ubuntu18.04上,根本原因是默认的openjdk-11-jdk与依赖它的其他软件包之间的冲突。它已经在Debian中修复,不久将包含在Ubuntu中。同时,最简单的解决方法是将java降级到版本8。其他使用java ca证书的解决方案要复杂得多

首先删除冲突包:

sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge
sudo apt-get install openjdk-8-jdk
通过以下方式检查您是否成功删除了所有相关包:

sudo update-alternatives --config java
系统将提示您没有可用于配置的Java,否则此解决方案将失败

然后重新安装所需的软件包:

sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge
sudo apt-get install openjdk-8-jdk

我在Android SDK SDK SDK管理器中遇到了这个问题。对我来说,这个解决方案奏效了:

转到/usr/lib/jvm/java-8-oracle/jre/lib/security/ 用cacert.original替换cacert
cacert文件是一个很小的22B文件。我已根据以下手册从ppa:webupd8team/java安装了oracle-java8-installer:

一些OpenJDK供应商发布的版本是由于使用二进制文件分发了一个空的cacerts文件而导致的。下面将解释该错误:

您可以将旧安装(如c:\Program Files\Java\jdk1.8.0\U 192\jre\lib\security\cacerts)中的文件复制到OpenJDK8\jre\lib\security\cacerts


采用openjdk buggy的版本在ubuntu 14.04上,使用ppa中的openjdk 11:openjdk-r/ppa这对我来说很有效:

在java.security中,将密钥库类型更改为

keystore.type=jks
然后:

当您检查它是否工作时,请确保您没有使用任何旧java仍在运行的守护程序,例如,gradle没有守护程序选项


这个bug很好地描述了一切,并将帮助您了解正在发生的事情。这很可能对任何人都有帮助,但是……对于任何使用AMD CPU在Raspberry Pi上使用Docker映像运行Java 8的人,我为我成功地构建并运行了以下Dockerfile

FROM hypriot/rpi-java
USER root

WORKDIR /usr/build/

RUN /usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
RUN update-ca-certificates -f
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

EXPOSE 8080

ARG JAR_FILE=target/app-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-Djavax.net.ssl.trustStorePassword=changeit", "-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts", "-jar", "app.jar"]

我是可移植性的粉丝,所以我不安装java,只需下载tar.gz并导出路径中的一些值,一切正常

我与这个问题斗争,没有解决方案安装或更新操作系统证书对我有效

我的例子中的错误是:jdk中的cacerts是空的

我不知道为什么,但是我的jdk.tar.gz有一个空的cacerts文件

/../some_openjdk/jre/lib/security/cacerts大小:32字节

下载地点:

修理 经过几次尝试,我找到了一个正确的jdk.tar.gz,其中包含一个大小为101 KB的cacerts文件

我从中下载了这个开放jdk

我在这个Dockerfile中找到了这个url:


答案是我如何导入它。我似乎错过了关键的一步。请参阅[Java Error InvalidalgorithParameterException][1][1]:确认此答案正确。我在Tomcat下得到了错误。我在${CATALINA_HOME}\conf中有我的信任库,但是CATALINA_HOME没有设置,所以Tomcat在\conf下查找信任库。@BubblewareTechnology否,错误在文件名中,而不是在您如何将证书导入文件中。你的博客不正确。您也不应该建议修改JRE$/cacerts文件。它将改变下一次Java升级。您需要一个进程来复制它,将您自己的证书添加到副本中,并将副本用作信任库。重复每次Java升级。你根本不需要告诉Java关于它自己的信任库,只要你自己的信任库,如果它不同的话。我要补充一点:即使信任库存在,可以访问,格式正确,如果它完全为空,这是包括Apache HttpClient.btw在内的各种库可能出现的错误。例如,当从OracleJDK8切换到OpenJDK8时,会发生这种情况,因为OpenJDK带有em

私人信托商店。从OpenJDK11复制一个修复了OSX 10.6.8上的问题my ln命令没有h选项;这意味着什么?啊,我有两个ln命令,一个在/usr/bin中是默认的,另一个在/bin中;后者有一个h选项,并且工作正常。我用这个ln技术修复了从system 1.8安装到cacerts的坏的1.6安装。谢谢对于未来的读者:您似乎还需要安全文件夹blacklisted.certs、local_policy.jar和US_export_policy.jar中的其他3个文件,以便Java感到高兴。@Peter Kriens,为什么要链接到jre目录下的cacerts?这里的命令尝试将目录复制到文件中;毫无意义。我同意使用反向解决方案的评估。我发现jdk1.6的软链接/Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/lib/security/cacerts->/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts坏了。因此,我修复了断开的软链接,然后从jdk1.7安装中复制了cacerts。注意:完成后,您应该能够对复制的cacerts文件进行cat以验证权限。此外,修复了cp以正确的方向,并添加了mkdir和cp的umask。我在OSX上Grails使用的Java 6中遇到了这一问题。我还安装了Oracle的Java7,并升级到Mavericks。从苹果网站重新安装Java6也解决了这个问题。在ubuntu云盒上安装OpenJDK6时遇到了这个问题。很高兴看到一个熟悉的面孔,BTWI发现我需要手动运行updateCA certificates-f来填充cacertsfile@Portablejim谢谢你的评论解决了我在Ubuntu 15.04测试版上构建Apache Spark时遇到的第一个问题。谢谢@Portablejim,你的评论在Ubuntu 15.04上对我有用。谢谢。这修复了我使用PhpStrom+补丁JDK的问题。我把这个密钥写到了phpstorm64.vmoptions文件中。在ubuntu 18.04和JDK是1.8.0>u62ugh中对我不起作用。Java6的公众支持已经过去了很多年,而且肯定充满了安全漏洞。苹果公司提供了可供下载的软件,以便不能使用Java 7/8运行的旧软件可以继续执行,但它不应用于与公共互联网上的服务(如1)建立SSL连接。AWS,2。马文中心,3号。还有什么。谢谢,当我在Ubuntu15.04上遇到这个问题时,它为我解决了这个问题。在Raspberry PiRan上使用Raspbian解决了这个问题,使用Debian jesse稳定的Backport和OpenJDK8解决了这个问题。在构建Docker映像时使用此选项:很遗憾,UbuntuMate18.04不起作用。我将尝试在Ubuntu18.x上重新安装Java。@codefx-我已经按照您的建议做了,但它不起作用-默认为Java 10。您从哪里获得属性javax.net.ssl.trustAnchors?JSSE文档中没有提到这一点。好吧,我帮助您将解决方案永久化到您的边缘案例中。这就是有趣的地方。这正是我的问题。我使用的是SpringBoot1.4.2.RELEASE,有一个硬件密钥库和软件信任库。我为密钥库指定了提供程序和类型,但没有指定信任库。因此,信任库使用了错误的提供程序和类型。指定那些SUN和JKS解决了这个问题。您到底是如何做到的?今天windows和我的Android grandle碰到了这个问题,我几乎明白你说的话,但你没有说如何解决它。不可帮助的回答在我的例子中,我有一个由jdk 14 keytool生成的信任库,默认为pkcs格式,试图连接到使用jks密钥库的kafka集群。我修改了创建信任库的方式,使用switch-storetype jks,并在运行sudo/var/lib/dpkg/info/ca-certificates-java.postinst configure**I get sudo:/var/lib/dpkg/info/ca-certificates-java.postinst:command not found sudo update ca certificates-f在Debian jessie上用openjdk-8-jre-headless from就足够了jessie Backport,只要安装了java ca证书。我认为ca证书之后的JRE安装顺序可能会导致这种情况,因为后者没有任何用于后端口java 8.sudo/var/lib/dpkg/info/ca-certificates-java.postinst configure without stars**update ca certificates-f的触发器。我不需要第二个指挥部为我做这项工作。您只需创建默认密钥库,检查并保存站点/主机的证书文件。。。。根据其他答案,这导致信任库找不到。是的,但是如果你不知道为什么找不到信任库,那么知道信任库找不到是完全没有帮助的。有许多可能出错的方法,当其中任何一种都不是您自己的系统发生故障的特定方法时,这就是错误。它们都“碰巧”是相同的错误:指定的信任库无法打开或为空。出现这种情况的方式有一百万种,但没有足够的篇幅来一一列举

如果您不这样做,它将使用JRE信任库,并且它肯定能够找到它。错误是由这些参数中的值不正确引起的,而不是缺少这些参数。代码中命名的文件仅适用于您的安装,而不是一般情况。设置这些属性的正确方法是在命令行上传递它们:java-Djavax.net.ssl.trustStore=/tmp/cacerts。。。或者,如果您想为使用JDK运行的所有程序全局设置它们,请将该行添加到JDK的management.properties文件中。如果您使用docker,那么您也可以尝试maven:3-JDK-9-slim image,而不是maven:3-JDK-9谢谢,这对我在ubuntu 18.04中的openjdk-8-JDK有效。这是唯一实际有效的答案。感谢@razvanoneI设法解决了一个小问题:eclipse.ini文件中的三行必须在实际的三行上。我最初把它们放在一行上,eclipse没有注意到这一点!这将节省你生命中的许多小时!非常感谢。这个答案帮助我修复了Ubuntu18.04上maven的相同错误。我必须将/etc/ssl/certs/java/cacerts文件的所有者从root更改为我自己才能写入它。然后我把它换回来。我运行sudo rm/etc/ssl/certs/java/cacerts,然后sudo更新ca证书-f,这解决了我在kubuntu 18.04中的问题。@jsn,感谢这些解决方案,也可以在基于ubuntu 18的linux mint 19上工作。04@jsn的解决方案也适用于Debian Stretch+OpenJDK8此描述实际上是不正确的,并且只在与重新安装Windows可能修复问题相同的意义上修复问题。不需要删除所有Java包。如果要这样做,只需安装openjdk-8-jdk包,删除/etc/ssl/certs/java/cacerts文件,然后运行sudo update ca certificates-f,这是从pkcs12格式的cacerts文件切换到jks格式的cacerts文件的迂回方式,正如本帖其他部分所述。@MikaelGueck虽然逻辑似乎站在你这边,但我在此向你保证,我之前确实做了你的评论和大多数其他投票答案中所述的事情,而在18.04中,这是唯一有效的答案。我认为你的反对票应该变成反对票,或者至少消失,因为这是非常不应该的。@AndreaLigios,你可以自己通读剧本,它们很短。他们有一组硬编码的JAVA_主路径,从8到10,他们一次尝试这些路径,他们调用Debian CA文件生成器,您也可以通读它,它使用现有的文件格式,因为您可以通读的JDK密钥文件处理程序代码具有兼容性回退模式。如果您的计算机以不同的方式运行此简单软件,您可能会遇到其他问题。您是否修改了java备选方案,并调用了其他JVM,因为删除可能会重置备选方案?@MikaelGueck是的,在之前的一次尝试中,我修改了java备选方案,所以可能就是这样。我是第一个喜欢钻研源代码并发现东西是如何工作的人,但这不是我今天的目标,它只是我在实现真正目标的路上遇到的5-6个不同的意想不到的障碍之一。这个答案让我在不到2分钟内解决了这个问题!我应该花多少时间研究脚本并找到更好的解决方案?为了什么,为了节省一些兆字节?这是激烈的,但工作,无论是什么问题,所以一个巨大的感谢OP为那些忙碌,因为我一直在寻找一个解决方案两天,你的回答解决了我的问题,谢谢。我刚转到Kubuntu 18.04,这就成功了。cacerts.original文件是jks格式的,是用Ubuntu16.04的Java 8生成的,默认格式是这种格式。cacerts文件是pkcs12格式的,由Ubuntu18.04的Java10生成,默认使用这种格式。正如本线程其他部分所解释的,新格式要求您将密码传递给可执行文件。但只要生成新的空jks cacerts文件或复制旧文件,下一个cacerts生成过程将清空现有文件,然后用file system.NB check baeldung教程中的CA证书重新填充它,使用一个有用的Makefile作为创建密钥库和信任库spring-security-x509项目的快捷方式。我想我也是这样。在OpenJDK 202中存在此错误,而在222中它可以正常工作。因此,如果可能,请更新您的jdk。此解决方案今天救了我的命,非常感谢。对于同一问题,我的cacert有0个条目,因此使用正确的cacert解决了我的问题