使用带有卷曲的密钥库



我想执行下面的curl命令并指定我自己的密钥存储。

我尝试使用 --cacert 选项并指定了 cacert jks 的路径。

curl --ssl-reqd --url 'smtp://mailhost.myorg.com:587' --user 'usrid:pwd' --mail-from 'fromaddr@myorg.com' --mail-rcpt 'toaddr@myorg.com' --upload-file mail.txt -vv --cacert /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre/lib/security/cacerts

但它导致了一个错误。

curl: (77) Problem with the SSL CA cert (path? access rights?)

正如Amit所引用的,curl --cacert需要一个PEM格式的文件 - 但Javacacerts文件是JKS格式,这是巨大的不同。

您可以使用脚本将证书从 JKS 格式转换为 PEM 格式,如下所示:

jks=/usr/lib/jvm/$javaversion/jre/lib/security/cacerts
for c in $(keytool -keystore $jks -storepass changeit -list | awk -F, '/trustedCert/{print $1}'); do 
keytool -keystore $jks -storepass changeit -exportcert -alias $c -rfc
done >pemfile
# for Java9 up use -cacerts instead of -keystore $jks

这可能使这成为SO的话题,因为你的Q根本不是关于编程的。您可以执行要建立和验证的连接所需的一个或几个选定的证书,而不是执行所有证书。

但是对于RedHat(如标记的那样),这不是必需的。在 RedHat(和基于 RH 的)Open JDK 软件包中,JRE/lib/security/cacerts实际上是指向/etc/pki/java/cacerts的符号链接,该符号链接由不同的软件包ca-certificates.noarch提供 - 它还提供已经以 PEM 格式提供的相同证书/etc/pki/tls/cert.pem因此您可以直接使用它(尽管名称看起来是单数的,它实际上包含,或者更确切地说是指向包含的文件的链接,许多证书)和/etc/pki/nssdb/*中的 NSS 格式,这是curl的 RH 包默认使用的。因此,默认情况下,您的curl已经使用您可以从 Javacacerts文件中获取的相同证书,因此此努力根本无法完成任何操作。

使用--cacert时,您需要指定证书 - 例如 -/tmp/ca.crt

从文档中:

-

-cacert (HTTPS) 告诉 curl 使用指定的证书文件来验证对等方。该文件可能包含多个 CA 证书。这 证书必须采用 PEM 格式。如果使用此选项,则多个 次,将使用最后一个。

--capath (HTTPS) 告诉 curl 使用指定的证书目录来验证对等方。证书必须采用 PEM 格式,并且 目录必须已使用提供的c_rehash实用程序进行处理 与OpenSSL。证书目录在 Windows 下不受支持 (因为c_rehash使用符号墨水链接来创建它们)。使用 --capath 可以让 curl 比 https 连接更有效 如果 --cacert 文件包含许多 CA 证书,则使用 --cacert。如果 此选项使用多次,将使用最后一个。

因此,如果指定--cacert,CA 证书将存储在指定的文件中。这些 CA 证书用于验证 cURL 连接到的远程服务器的证书。

--capath选项用于指定包含 CA 证书的目录,而不是单个文件。

相关内容

  • 没有找到相关文章

最新更新