CURL 传递 SSL 证书和密码

问题描述 投票:0回答:3

我需要使用 CURL 指定证书,我尝试使用

--cert
选项,但它不起作用。

您能否让我知道在使用curl 调用时指定密钥库和密码?

java unix curl ssl-certificate
3个回答
43
投票

应该是:

curl --cert certificate_file.pem:password https://www.example.com/some_protected_page

10
投票

我在尝试从密钥库中获取客户端证书和私钥时经历过此过程。

上面威尔士发布的链接很棒,但是我的 Redhat 发行版上还有一个额外的步骤。 如果curl是使用NSS构建的(运行

curl --version
以查看是否看到列出的NSS),那么您需要将密钥导入到NSS密钥库中。 我经历了一系列复杂的步骤,所以这可能不是最干净的方法,但它让事情开始工作

因此将密钥导出到.p12

keytool -importkeystore -srckeystore $jksfile -destkeystore $p12file \
        -srcstoretype JKS -deststoretype PKCS12 \
        -srcstorepass $jkspassword -deststorepass $p12password  
        -srcalias $myalias -destalias $myalias \
        -srckeypass $keypass -destkeypass $keypass -noprompt

并生成仅保存密钥的pem文件

 echo making ${fileroot}.key.pem
 openssl pkcs12 -in $p12 -out ${fileroot}.key.pem  \
         -passin pass:$p12password  \
         -passout pass:$p12password  -nocerts
  • 创建一个空的密钥库:
mkdir ~/nss
chmod 700 ~/nss
certutil -N -d ~/nss
  • 将密钥导入密钥库
pks12util -i <mykeys>.p12 -d ~/nss -W <password for cert >

现在curl应该可以工作了。

curl --insecure --cert <client cert alias>:<password for cert> \
     --key ${fileroot}.key.pem  <URL>

正如我所提到的,可能还有其他方法可以做到这一点,但至少这对我来说是可重复的。 如果curl是使用NSS支持编译的,我无法让它从文件中提取客户端证书。


5
投票

除了之前的答案之外,请确保您的curl 安装支持https。
您可以使用

curl --version
获取有关支持协议的信息。

如果你的curl支持https,请遵循之前的答案。

curl --cert 证书路径:密码 https://www.example.com

如果不支持https,则需要安装支持https的cURL版本。

© www.soinside.com 2019 - 2024. All rights reserved.