错误 - trustAnchors参数必须为非空

时间:2011-07-22 00:35:02

标签: java hudson javamail jenkins

我正在尝试在Jenkins / Hudson上配置我的电子邮件,并且我经常收到错误:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
    non-empty

我在网上看到了大量有关错误的信息,但我还没有任何工作。我在Fedora Linux上使用Sun的JDK(而不是OpenJDK)。

以下是我尝试过的一些事情。我尝试遵循这个post的建议,但是将cacerts从Windows复制到我托管Jenkins的Fedora盒子并不起作用。我尝试将Gmail配置为我的SMTP服务器时尝试关注this guide,但它也无效。我还尝试手动下载并移动这些cacert文件,并使用this guide上的命令变体将它们移动到我的Java文件夹。

我对任何建议持开放态度,因为我现在正被困住。我已经从Windows Hudson服务器上工作了,但我在Linux上苦苦挣扎。

46 个答案:

答案 0 :(得分:452)

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

  • 空,
  • 未找到,或
  • 无法打开
  • (例如,由于访问权限)。

另见@ AdamPlumb的answer below

答案 1 :(得分:237)

Ubuntu 18.04 中,此错误的原因不同(JEP 229,从jks密钥库默认格式切换为pkcs12格式,以及Debian cacerts文件生成使用新文件的默认值)和workaround

# Ubuntu 18.04 and various Docker images such as openjdk:9-jdk throw exceptions when
# Java applications use SSL and HTTPS, because Java 9 changed a file format, if you
# create that file from scratch, like Debian / Ubuntu do.
#
# Before applying, run your application with the Java command line parameter
#  java -Djavax.net.ssl.trustStorePassword=changeit ...
# to verify that this workaround is relevant to your particular issue.
#
# The parameter by itself can be used as a workaround, as well.

# 0. First make yourself root with 'sudo bash'.

# 1. Save an empty JKS file with the default 'changeit' password for Java cacerts.
#    Use 'printf' instead of 'echo' for Dockerfile RUN compatibility.
/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

# 2. Re-add all the CA certs into the previously empty file.
/var/lib/dpkg/info/ca-certificates-java.postinst configure

https://git.mikael.io/mikaelhg/broken-docker-jdk9-cacerts

状态(2018-08-07),该错误已在Ubuntu Bionic LTS 18.04.1和Ubuntu Cosmic 18.10中修复。

Ubuntu 1770553: [SRU] backport ca-certificates-java from cosmic (20180413ubuntu1)

Ubuntu 1769013: Please merge ca-certificates-java 20180413 (main) from Debian unstable (main)

Ubuntu 1739631: Fresh install with JDK 9 can't use the generated PKCS12 cacerts keystore file

docker-library 145: 9-jdk image has SSL issues

Debian 894979: ca-certificates-java: does not work with OpenJDK 9, applications fail with InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

JDK-8044445 : JEP 229: Create PKCS12 Keystores by Default

JEP 229: Create PKCS12 Keystores by Default

如果在此变通办法之后问题仍然存在,您可能希望确保实际运行刚修复的Java发行版。

$ which java
/usr/bin/java

您可以使用以下命令将Java替代项设置为“auto”:

$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so

您可以仔细检查您正在执行的Java版本:

$ java --version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

还有其他替代方法,但这些方法有其自身的副作用,需要额外的未来维护,无论如何都无法获得回报。

下一个最佳解决方法是添加行

javax.net.ssl.trustStorePassword=changeit

到文件

/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties

无论哪个存在。

第三个问题最少的解决方法是更改​​

的值
keystore.type=pkcs12

keystore.type=jks

中的文件

/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security

以任何一个存在,然后删除cacerts文件并以前面描​​述的方式重新生成它。

答案 2 :(得分:98)

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

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

(在此处找到:https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760

ca-certificates-java不是Oracle JDK / JRE中的依赖项,因此必须明确安装。

答案 3 :(得分:59)

在Ubuntu 18.04上,根本原因是openjdk-11-jdk(默认)和其他包依赖于它之间的冲突。它已经在Debian中修复,很快就会被包含在Ubuntu中。同时,最简单的解决方法是将您的java降级为版本8.使用ca-certificates-java的其他解决方案要复杂得多。

首先删除冲突的包:

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

检查您是否已成功删除所有相关包:

sudo update-alternatives --config java

系统会提示您没有可用于配置的Java ,否则此解决方法将失败

然后重新安装所需的包:

sudo apt-get install openjdk-8-jdk

答案 4 :(得分:52)

EJP基本上回答了这个问题(我意识到这个问题已经得到了答案),但我刚刚处理了这个边缘案例,并希望将我的解决方案永久化。

我在托管的Jira服务器上遇到了InvalidAlgorithmParameterException错误,该错误是我之前为只进行SSL访问而设置的。问题是我以PKCS#12格式设置了我的密钥库,但我的信任库是JKS格式。

在我的情况下,我编辑了我的server.xml文件以将keystoreType指定为PKCS,但我没有指定truststoreType,因此它默认为keystoreType。明确地将truststoreType指定为JKS为我解决了它。

答案 5 :(得分:51)

我在博客帖子 Fixing the trustAnchors problem when running OpenJDK 7 on OS X

中遇到了这个解决方案

在OS X上运行OpenJDK 7时修复了trustAnchors问题。如果你在OS X上运行OpenJDK 7并且看到了这个例外:

Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors
    parameter must be non-empty

有一个简单的解决方法。只需链接Apple的JDK 1.6使用的相同cacerts文件:

cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

您需要为已安装的每个OpenJDK版本执行此操作。只需将-v 1.7更改为您要修复的版本即可。运行/usr/libexec/java_home -V以查看已安装的所有JRE和JDK。

也许OpenJDK的人可以将它添加到他们的安装脚本中。

答案 6 :(得分:40)

Ubuntu 12.10(Quantal Quetzal)或更高版本中,证书保存在ca-certificates-java包中。无论您使用的是什么JDK,使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts都会选择它们。

答案 7 :(得分:33)

在升级到OS X v10.9(Mavericks)后,我在OS X上使用JDK 1.7遇到了这个问题。对我有用的修复方法是简单地重新安装Apple版本的Java,可在http://support.apple.com/kb/DL1572获得。

答案 8 :(得分:25)

我跑了

sudo update-ca-certificates -f

创建证书文件,然后:

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

我回来了,谢谢你们。遗憾的是它没有包含在装置中,但我最终到达了那里。

答案 9 :(得分:12)

错误告诉系统在参数javax.net.ssl.trustStore提供的路径中找不到信任库。

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

-Djavax.net.ssl.trustStore=cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.trustStoreType=JKS

我在cacerts的路径上遇到了一些麻烦(%java_home%环境变量以某种方式被覆盖),所以我使用了这个简单的解决方案。

我们的想法是提供信任库文件的有效路径 - 理想情况下,它将使用相对文件。您也可以使用绝对路径。

要确保商店类型为JKS,您需要运行以下命令:

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN

答案 10 :(得分:10)

升级到OS X v10.9(小牛队)后,我遇到了很多安全问题:

  • Amazon AWS的SSL问题
  • Peer未通过Maven和Eclipse验证
  • trustAnchors参数必须为非空

我已应用此Java更新,它修复了我的所有问题:http://support.apple.com/kb/DL1572?viewlocale=en_US

答案 11 :(得分:9)

删除ca-certificates-java包并重新安装它对我有用(Ubuntu MATE 17.10(Artful Aardvark))。

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

sudo apt-get install ca-certificates-java

谢谢你,jdstrand:对错误983302的评论1,Re:ca-certificates-java无法在Oneiric Ocelot上安装Java cacerts

答案 12 :(得分:8)

我期待这样的事情,因为我在Talend Open Studio中使用了备用JVM(目前支持仅存在于JDK 1.7之前)。我出于安全目的使用8 ...无论如何

  • 更新证书商店:

    id someObject = [dict objectForKey:@"foo"];
    if (someObject != [NSNull null]){
       //do something
    }
    

然后

  • 在初始化参数中添加新值

    sudo update-ca-certificates -f
    

对我来说,第二个条目有效。我认为,根据Talend Open Studio / TEnt + JVM的版本,它有不同的参数名称,但它会查找相同的密钥库文件。

答案 13 :(得分:8)

对我而言,这是由信任库中缺少trustedCertEntry引起的。

要测试,请使用:

keytool -list -keystore keystore.jks

它给了我:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

cert-alias, 31-Jul-2017, PrivateKeyEntry

即使我的PrivateKeyEntry包含CA ,也需要单独导入

keytool -import -alias root-ca1 -file rootca.crt -keystore keystore.jks

它导入证书,然后重新运行keytool -list -keystore keystore.jks现在给出:

Your keystore contains 2 entries

cert-alias, 31-Jul-2017, PrivateKeyEntry,
Certificate fingerprint (SHA1):
<fingerprint>
root-ca1, 04-Aug-2017, trustedCertEntry,
Certificate fingerprint (SHA1):
<fingerprint>

现在它有一个trustedCertEntry,Tomcat将成功启动。

答案 14 :(得分:5)

如果您在使用JDK9和Maven的Ubuntu上遇到此问题,可以添加此JVM选项 - 首先检查路径是否存在:

-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts

如果文件丢失,请尝试按照某人的说法安装ca-certificates-java:

sudo apt install ca-certificates-java

答案 15 :(得分:4)

在从Maven LTS(Xenial Xerus)升级到Ubuntu 16.04 LTS(Bionic Beaver)之后尝试使用Ubuntu 18.04 3时出现此问题。

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

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

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

答案 16 :(得分:3)

升级到Spring Boot 1.4.1(或更高版本)后,您可能还会遇到此错误,因为它会将Tomcat 8.5.5作为其依赖项的一部分。

问题是由于Tomcat处理信任存储的方式。如果您恰好已将信任库位置指定为与Spring Boot配置中的密钥库相同,则在启动应用程序时可能会收到trustAnchors parameter must be non-empty消息。

server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks

除非您知道自己需要,否则只需删除server.ssl.trust-store配置,在这种情况下,请参阅以下链接。

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

答案 17 :(得分:3)

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

System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);

来源:Java SSL and certificate keystore

我使用(KeyStore Explorer)工具创建新的JKS。您可以通过此链接KeyStore Explorer下载。

答案 18 :(得分:3)

我在Linux上的Java 9.0.1上有此错误消息。这是由于JDK的已知错误,其中.tar.gz二进制包中的cacerts文件为空(从http://jdk.java.net/9/下载)。

请参阅 JDK 9.0.1 Release Notes 的“已知问题”段落,说“默认情况下,TLS在OpenJDK 9上不起作用”。

在Debian / Ubuntu(可能还有其他衍生产品)上,一个简单的解决方法是用“ca-certificates-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-certificates”包中执行相同的操作:

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

答案 19 :(得分:3)

在更新OS X v10.9(Mavericks)之后,当使用旧版Java 6并尝试访问HTTPS URL时,我在OS X上也遇到过这种情况。修正案是Peter Kriens的反面;我需要将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

答案 20 :(得分:2)

在Windows10和openjdk中,是由随二进制文件一起分发的空cacerts文件引起的。该错误的解释如下:https://github.com/AdoptOpenJDK/openjdk-build/issues/555

您可以从myData.withColumn('myColumn', blank_as_null('myColumn'))之类的旧版本复制文件到adoptOpenJdk8\jre\lib\security\cacerts

AdoptOpenJDK错误版本为https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip

答案 21 :(得分:2)

我在Android SDK sdkmanager中遇到了这个问题。对我来说,这个解决方案有效:

  1. 转至/ usr / lib / jvm / java-8-oracle / jre / lib / security /
  2. 将'cacert'替换为'cacert.original'
  3. 'cacert'文件很小(22B)。我从ppa安装了oracle-java8-installer:webupd8team / java(根据本手册:https://docs.nativescript.org/start/ns-setup-linux)。

答案 22 :(得分:2)

System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\user-id\\Desktop\\tomcat\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "passwd");

您必须在代码中添加以上两行。它无法找到信任库。

答案 23 :(得分:2)

我是可移植性的爱好者,所以我不安装Java,只需下载tar.gz并在路径中导出一些值即可。

我为这个问题而奋斗,没有解决方案(安装或更新操作系统证书)。

我的错误很明显: jdk中的空证书。

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

/../some_openjdk/jre/lib/security/cacerts:32个字节

从以下位置下载:

修复

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

我从https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries下载了这个开放的jdk

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

答案 24 :(得分:1)

在ubuntu 14.04上使用来自ppa:openjdk-r / ppa的openjdk 11,这对我有用:

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

keystore.type=jks

然后:

sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java

当您检查它是否有效时,请确保没有使用任何仍在运行旧Java的守护进程(例如gradle的--no-daemon选项)

此错误很好地描述了所有内容,将帮助您了解https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631

的情况

答案 25 :(得分:1)

这极有可能会帮助任何人,但是....对于在Raspberry Pi上使用Docker Image在Docker映像上运行Java 8的任何人(使用AMD CPU),我得到以下Dockerfile可以为我成功构建并运行

<form action="{{ route('login') }}" method="POST">
    {{ csrf_field() }}
    <div class="input-group mb-3">
        <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email"
               placeholder="Username or Email" value="{{ old('email') }}" required autofocus>
        <div class="input-group-append">
            <div class="input-group-text">
                <span class="fas fa-user"></span>
            </div>
            @if ($errors->has('email'))
                <span class="invalid-feedback" role="alert">
                       <strong>{{ $errors->first('email') }}</strong>
                </span>
            @endif
        </div>
    </div>
    <div class="input-group mb-3">
        <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}"
               placeholder="Password" name="password" required>
        <div class="input-group-append">
            <div class="input-group-append">
                <div class="input-group-text">
                    <span class="fas fa-lock"></span>
                </div>
            </div>
            @if ($errors->has('password'))
                <span class="invalid-feedback" role="alert">
                        <strong>{{ $errors->first('password') }}</strong>
                 </span>
            @endif
        </div>
    </div>
    <div class="row">
        <div class="col-8">
            <input type="checkbox" name="remember"> {{ trans('global.remember_me') }}
        </div>
        <div class="col-4">
            <button type="submit" class="btn btn-primary btn-block btn-flat">{{ trans('global.login') }}</button>
        </div>
    </div>
</form>

答案 26 :(得分:1)

使用Amazon SDK v2,Windows 10和JDK8陷入困境。 Amazon SDK抱怨凭证加载。
我通过用JDK11替换了JDK8的security/cacert文件来解决了这个问题。

答案 27 :(得分:1)

我在运行特定的Android套件以便在Ubuntu 14.04(Trusty Tahr)上进行测试时遇到了这个问题。根据shaheen的建议,有两件事对我有用:

sudo update-ca-certificates -f

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

答案 28 :(得分:1)

为了记录, none 的答案在这里为我工作。 My Gradle构建开始因此错误而神秘失败,无法从Maven central获取特定POM文件的HEAD。

事实证明,我将JAVA_HOME设置为我自己构建的OpenJDK,这是我为调试javac问题而构建的。将其设置回我系统上安装的JDK就可以修复它。

答案 29 :(得分:1)

我在互联网上找到的解决方案都没有,但Peter Kriens's answer的修改版似乎可以胜任。

首先通过运行/usr/libexec/java_home找到您的Java文件夹。对我来说这是1.6.0.jdk版本。然后转到lib/security子文件夹(对我来说/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security)。

然后删除cacerts文件(如果已存在)并使用sudo find / -name "cacerts"在系统中搜索一个文件。它为我发现了多个项目,包括我安装的Xcode或其他应用程序的版本,以及我选择的/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts

使用该文件并为其创建符号链接(在之前的Java文件夹中)sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts",它应该可以正常工作。

我有两个 - 来自Apple的2017-001下载的Java(https://support.apple.com/kb/dl1572 - 我假设正确的证书来自哪里)和Oracle的{{{} 3}}(塞拉利昂)。

答案 30 :(得分:0)

我有同样的错误,问题不在于配置JDK,而是在application.properties文件中'trust-store:'参数下的jks文件的简单错误路径,请仔细检查该路径是否正确

答案 31 :(得分:0)

就我而言,此问题的根本原因是空信任库(它是应用服务器信任库)。 当我添加任何虚拟 x.509 证书时,就停止抛出此错误。

使用 keytool 在信任库中添加证书的命令

keytool -import -alias dummy -keystore <path to keystore> -storepass <truststore password if any>

答案 32 :(得分:0)

Marquis of Lorne's answer是准确的,我添加一些信息用于调试目的:

要调试此问题(我在here中对此进行了详细介绍)并了解正在使用(或尝试使用)什么信任库,可以添加the property javax.net.debug = all然后筛选有关信任库的日志。您也可以使用属性javax.net.ssl.trustStore来指定特定的信任库。例如:


    java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/Another/path/to/cacerts -jar test_get_https-0.0.1-SNAPSHOT-jar-with-dependencies.jar https://www.calca.com.py 2>&1| grep -i truststore

答案 33 :(得分:0)

我在IntelliJ IDEA 14中导入Gradle项目时遇到了这个问题。 解决方案是使用Gradle的本地副本而不是项目目录中的包装器。

答案 34 :(得分:0)

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

答案 35 :(得分:0)

您必须将cert文件添加到Java密钥库中 进入chrom,打开网站,以txt格式保存证书

转到cmd> keytool-导入-trustcacerts -keystore $ JAVA_HOME / jre / lib / security / cacerts -storepass changeit -alias根-import -file Trustedcaroot.txt

https://knowledge.digicert.com/solution/SO4085.html

这就像一个魅力

答案 36 :(得分:0)

发送电子邮件时出现同样的错误,但始终。在我的情况下,我每次都更改了一行代码来获取一个新的Session对象:

MimeMessage message = new MimeMessage(Session.getDefaultInstance(props, authenticator));

MimeMessage message = new MimeMessage(Session.getInstance(props, authenticator));

此后每次都会发送电子邮件。

我得到的错误:

  

javax.mail.MessagingException:无法将套接字转换为TLS;
  嵌套异常是:javax.net.ssl.SSLException:
  java.lang.RuntimeException:意外错误:
  java.security.InvalidAlgorithmParameterException:trustAnchors
  在参数必须非空   com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1907)在
  com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666)
      在javax.mail.Service.connect(Service.java:317)上   javax.mail.Service.connect(Service.java:176)在   javax.mail.Service.connect(Service.java:125)在   javax.mail.Transport.send0(Transport.java:194)在   javax.mail.Transport.send(Transport.java:124)

答案 37 :(得分:0)

对于我来说,我没有完全指定VM参数。

({Run Configurations.. > (under Apache Tomcat) any server > (x)= Arguments > VM arguments:

确保正确设置了所有VM参数。

答案 38 :(得分:0)

我跑了

sudo update-ca-certificates -f 创建证书文件,然后:

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

,然后更改jar执行的命令行:

sudo java -cp xx.jar:lib / * co.com.ixxx.clixxxlarxa.Main

答案 39 :(得分:0)

我发现了此错误的另一个原因,与Ubuntu无关。

我尝试在Spring boot 2应用程序中设置双向TLS,并在使用仅具有私钥项而没有可信证书项的信任库后遇到了此问题。

这是我的Spring Boot TLS配置

server.port=8443
server.ssl.key-alias=oba-tls
server.ssl.key-password=mypw
server.ssl.key-store-password=mypw
server.ssl.key-store=classpath:keys/tls-keystore.pfx
server.ssl.key-store-type=PKCS12
server.ssl.enabled=true
server.ssl.client-auth=need

server.ssl.trust-store=classpath:keys/truststore.pfx
server.ssl.trust-store-password=mypw
server.ssl.trust-store-type=PKCS12
server.ssl.ciphers=ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA384
server.ssl.protocol=TLS
server.ssl.enabled-protocols=TLSv1.2

要生成truststore.pfx,我必须使用以下命令使其起作用。

openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -out cert.crt

keytool -importcert -alias oba-trust -file cert.crt -keystore truststore.jks

keytool -importkeystore -srckeystore truststore.jks -destkeystore truststore.pfx -srcstoretype JKS - deststoretype PKCS12 -deststorepass yourpassword

答案 40 :(得分:0)

在Ubuntu 18.04上,我需要使用OpenJDK 1.7来维护旧项目。我下载了二进制软件包。但是当我在上面执行脚本时,我遇到了同样的错误。

解决方案是在cacerts文件夹中删除已下载JDK的jre/lib/security文件,然后将其创建为与cacerts中系统/etc/ssl/certs/java/文件的符号链接:

sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts

答案 41 :(得分:0)

在Ubuntu上:

  

sudo apt install ca-certificates-java

  

sudo apt-get install ca-certificates-java

为我排序。

答案 42 :(得分:0)

另一个原因是它实际上是一个有效的错误。一些邪恶的Wi-Fi热点会破坏证书,man-in-the-middle attack你要知道什么(逃跑!)。

一些大型雇主会做同样的伎俩,特别是在敏感的网络区域,因此他们可以监控所有加密的流量(从最终用户的角度来看并不是很好,但可能有充分的理由)。

答案 43 :(得分:0)

使用信任库时遇到此错误,该信任库使用#PKCS12格式的IBM Websphere JDK keytool导出,并尝试使用Oracle JRE上的该文件通过SSL进行通信。

我的解决方案是在IBM JRE上运行或使用IBM Websphere keytool将信任库转换为JKS,因此我能够在Oracle JRE中运行它。

答案 44 :(得分:0)

对我来说,只需将Jenkins插件“Email Extension Plugin”升级到最新版本(2.61)即可解决。

这两个插件负责Jenkins中的电子邮件配置:

  • 电子邮件地址
  • 电子邮件扩展程序模板

答案 45 :(得分:-3)

实际上您只需要执行:

sudo chmod +x ./gradlew(your script)