我遇到curl
命令的SSL问题。我想使用我的SSL客户端证书和私钥来访问URL。
这是我的命令:
$ curl -k -v "https://myurl.com/" --cert ./certificate.pem --key ./private.key
* About to connect() to xx.xx.xx.xx port 23444 (#0)
* Trying xx.xx.xx.xx... connected
* Connected to xx.xx.xx.xx (xx.xx.xx.xx) port 23444 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* Unable to load client key -8178.
* NSS error -8178
* Closing connection #0
curl: (58) Unable to load client key -8178.
密钥受密码保护,curl
不要求我输入密码,这很奇怪。即使我使用--pass
传递密码,我仍然会收到相同的错误。
似乎没有考虑参数--key
,因为如果我替换为我的文件系统中不存在的foo.key
,我仍会得到相同的错误。
但是,如果使用:
$ wget --certificate=./certificate.pem --private-key=private.key "https://myurl.com/" --no-check-certificate
我可以访问我的网址。
你有什么想法吗?
答案 0 :(得分:19)
我遇到了同样的问题,最后找到了解决方案,也许它可以帮助你。
失败是由PKCS#8格式的私钥引起的:
PKCS#8私钥以
-----BEGIN ENCRYPTED PRIVATE KEY-----
标题
或
-----BEGIN PRIVATE KEY-----
标题
使用此键curl
+ openssl
可行,但curl
+ nss
+ libnsspem.so
不会。
使用以ASCII开头的RSA私钥
-----BEGIN RSA PRIVATE KEY-----
标题
curl
+ openssl
和curl
+ nss
+ libnsspem.so
都可以。
所以使用这个命令
openssl pkcs8 -in path/to/your/pkcs8/key -out path/to/rsa/key
将PKCS#8密钥转换为传统的RSA密钥。
答案 1 :(得分:2)
如果您的证书有密码短语,则应在证书名称后添加:
curl -k -v "https://myurl.com/" --cert ./certificate.pem:passphrase --key ./private.key