cUrl无法从指定路径加载pem证书

时间:2017-10-17 14:37:20

标签: php ssl curl pem

这是一个奇怪的问题:尝试连接到需要本地pem文件的服务器,但是我收到了这个错误:
cURL error 58: unable to load client key: -8178 (SEC_ERROR_BAD_KEY)

奇怪的是,如果我导航到pem文件的路径,它就可以工作。如果我给出确切的路径,则会给出错误。

以下是有效的命令:
cd /path/to
curl --insecure --key key.pem --cacert ca.pem --cert client.pem:xxxxxxxxx https://server.com/action/id
(回复适当的HTML)

这些给出了错误:
cd /path/to
curl --insecure --key /path/to/key.pem --cacert /path/to/ca.pem --cert /path/to/client.pem:xxxxxxxxx https://server.com/action/file

关于如何运行命令同时给出确切路径的任何想法?我完全是竹子......

编辑:刚认识到它可能会有所帮助:

卷曲 - 版本:
curl 7.51.0 (x86_64-redhat-linux-gnu) libcurl/7.51.0 NSS/3.28.4 zlib/1.2.8 libidn2/0.16 libpsl/0.6.2 (+libicu/50.1.2) libssh2/1.4.2 nghttp2/1.21.1 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets PSL

uname -a:
4.9.20-11.31.amzn1.x86_64 #1 SMP Thu Apr 13 01:53:57 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:1)

以下是有效的解决方案:

首先将.p12文件转换为密钥& cert .pem文件:
openssl pkcs12 -in given_keystore.p12 -out key.pem -nodes
openssl pkcs12 -in given_keystore.p12 -out cert.pem -nokeys

第二次测试是否有效:
curl --cert ./cert.pem --key ./key.pem https://provider.com/service/foobar -v
→结果正确404 not found(而不是错误或403)