使用CURL传递SSL证书和密码

27

我需要使用CURL指定一个证书,我已经尝试使用--cert选项,但它无法工作。

请问在调用curl时如何指定密钥库和密码?

3个回答

42

应该是:

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

6
我可以使用这个选项指定一个JKS文件吗? - Adam
3
你无法使用cURL与Java KeyStore。这是一篇很好的SO Answer,详细介绍了如何进行转换:https://dev59.com/9nRB5IYBdhLWcg3wWF8H - Welsh

9
我曾经在尝试从密钥库中获取客户端证书和私钥时遇到过这个问题。上面Welsh发布的链接很好,但是在我的Redhat发行版上还需要一个额外的步骤。如果使用NSS构建了curl(运行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,则我无法从文件中获取客户端证书。


pks12util命令不存在,应该是pk12util。我还必须通过以下方式设置nss位置:export SSL_DIR=~/nss - Marcel

5
除了上一个回答中提到的内容,确保您的curl安装支持https。 您可以使用curl --version获取有关支持的协议的信息。
如果您的curl支持https,请按照上一个回答操作。

curl --cert certificate_path:password https://www.example.com

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接