这是一个奇怪的问题:尝试连接到需要本地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
答案 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)