curl:(58)无法加载客户端密钥-8178

时间:2014-01-07 10:27:54

标签: curl ssl client-server

我遇到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

我可以访问我的网址。

你有什么想法吗?

2 个答案:

答案 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 + opensslcurl + 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