curl" Peer的公钥无效。"无法加载客户端密钥:-8178(SEC_ERROR_BAD_KEY)

时间:2016-12-15 17:43:47

标签: php ssl curl nss

我尝试将我的PHP应用程序连接到服务器,该服务器需要私钥验证,并且公共服务器上没有证书。

API位置:https://b2b.postaonline.cz/

要从浏览器访问API,我已安装以下证书:http://www.postsignum.cz/certifikaty_autorit.html(PEM)

然后我能够连接我从PostSignum检索到的.pfx证书。

但是,我无法使用curl从Linux服务器连接。 Ofc,我已经搜索并测试了几个小时 - 比如将私有转换为RSA等等。

所以目前的状态是,我使用了收到的.pfx并提取了这样的东西:

 openssl pkcs12 -in certificate.pfx -out ca.pem -cacerts -nokeys
 openssl pkcs12 -in certificate.pfx -out client.pem -clcerts -nokeys
 openssl pkcs12 -in certificate.pfx -out key.pem -nocerts

之后,我使用curl连接:

$ curl -v  --key ./key.pem --cacert ./ca.pem --cert ./client.pem https://b2b.postaonline.cz/
*   Trying 193.150.24.113...
* Connected to b2b.postaonline.cz (193.150.24.113) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: ./ca.pem
  CApath: none
* unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
* NSS error -8178 (SEC_ERROR_BAD_KEY)
* Peer's public key is invalid.
* Closing connection 0
curl: (58) unable to load client key: -8178 (SEC_ERROR_BAD_KEY)

这是我所有变化的结果。

注意:当我将certificate.pfx加载到浏览器时,连接仍然不安全。所以我从PostSignum证书站点下载了以下内容并将它们加载到浏览器中

Postsignum Root QCA 2
Postsignum Public CA 2

之后我才能从浏览器连接。

我认为这是一件事,我也需要在卷曲中做,但我不知道如何。使用ca.pem和client.pem,它们只是从certificate.pfx中提取的 - 我认为curl在加载额外的Authoritiy证书之前遇到了与browaser相同的问题。知道怎么用吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

共有2个问题合并,现在已经修复 - 感谢strace。

1)我必须提供RSA私钥,如其他帖子中所述 2)当使用带密码的本地私钥文件时,我们可以将它作为./key:pass提供,但是使用--pass {phrase}选项