【问题标题】:Using a keystore with curl使用带有 curl 的密钥库
【发布时间】:2021-03-27 17:12:56
【问题描述】:

我想执行下面的 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?)

【问题讨论】:

    标签: shell curl openshift redhat


    【解决方案1】:

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

    来自docs

    --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 证书而不是单个文件的目录。

    【讨论】:

    • Java cacerts 文件,但不是 PEM 格式。
    【解决方案2】:

    正如 Amit 所引用的,curl --cacert 需要一个 PEM 格式的文件——但 Java cacerts 文件是 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
    

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

    但对于 RedHat(已标记),这不是必需的。在 RedHat(和基于 RH)中,Open JDK 包 JRE/lib/security/cacerts 实际上是 /etc/pki/java/cacerts 的符号链接,它由另一个包 ca-certificates.noarch 提供——它还提供 PEM 中已有的 same 证书/etc/pki/tls/cert.pem 中的格式,因此您可以直接使用它(尽管名称看起来是单数,但它实际上包含,或者更确切地说是链接到包含 许多 证书的文件)和 /etc/pki/nssdb/* 中的 NSS 格式是curl的RH包默认使用的。因此,您的 curl 默认使用的证书与您可以从 Java cacerts 文件中获得的证书相同,因此这项工作根本没有取得任何成果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-26
      • 2016-09-29
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多