【问题标题】:curl: (58) Unable to load client key -8178curl:(58)无法加载客户端密钥-8178
【发布时间】:2014-01-24 23:52:17
【问题描述】:

我遇到了curlcommand 的 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

我可以访问我的网址。

你有什么想法吗?

【问题讨论】:

  • 关于什么的权限问题?
  • 一种解决方法是将您的证书导入 NSS 数据库,如下所示:stackoverflow.com/questions/15773806/… 我在您之前搜索了另一个解决方案,但没有找到。如果你这样做,请发布它

标签: curl ssl client-server


【解决方案1】:

我也遇到过同样的问题,终于找到了解决办法,或许能帮到你。

失败是由于PKCS#8格式的私钥:

  • PKCS#8 私钥以 -----BEGIN ENCRYPTED PRIVATE KEY----- 标头

    -----BEGIN PRIVATE KEY----- 标头

    使用此键 curl + openssl 将起作用,但 curl + nss + libnsspem.so 不会。

  • 使用以
    -----BEGIN RSA PRIVATE KEY----- 标头开头的 RSA 私钥

    curl + opensslcurl + nss + libnsspem.so 都可以。

所以使用这个命令

openssl pkcs8 -in path/to/your/pkcs8/key -out path/to/rsa/key

将 PKCS#8 密钥转换为传统的 RSA 密钥。

【讨论】:

  • 感谢您的回答。它在理论上可能有效,我不能使用它,因为在我的用例中,我不允许为数据库中的每个密钥生成一个新密钥,甚至是临时密钥等等......最后我不得不改用 wget......我刚刚发布它以了解答案并与面临相同问题的人分享;-)
  • 为了完整起见,curl 的正确参数为:--cert ./certificate.pem --key ./newkey.pem 其中 newkey.pem 是使用 openssl 创建的密钥的新 RSA 副本。
  • 我有同样的问题,但我不想存储未加密的密钥文件。 CURL 没有办法提示我输入密码并使用加密密钥吗?
  • @Brad 只需将密码短语添加到 RSA 私钥:openssl rsa -des3 -in your.key -out your.encrypted.key-des3表示加密算法,你可以使用其他的,比如aes128,aes192。
  • 显然这是一个已知的错误,报告于 2016 年。nss-pem 不支持使用除 des 之外的加密的密钥。 -- bugzilla.redhat.com/show_bug.cgi?id=1369251
【解决方案2】:

如果您的证书有密码,您应该在证书名称之后添加它:

curl -k -v "https://myurl.com/" --cert ./certificate.pem:passphrase --key ./private.key

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 2013-02-28
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2019-07-09
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多