curl "Peer's public key is invalid." 无法加载客户端密钥:-8178 (SEC_ERROR_BAD_KEY)
curl "Peer's public key is invalid." unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
我正在尝试将我的 PHP 应用程序连接到服务器,这需要通过私钥进行身份验证并且在 public 服务器上没有证书。
API 位置:https://b2b.postaonline.cz/
为了从浏览器访问 API,我安装了这些证书:http://www.postsignum.cz/certifikaty_autorit.html (PEM)
然后我可以连接我的 .pfx 证书,从 PostSignum 检索到。
但是,我无法使用 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
在那之后我就可以从浏览器连接了。
我想这很重要,我也需要在 curl 中做,但我不知道怎么做。使用 ca.pem 和 client.pem,它们仅从 certificate.pfx 中提取 - 我认为 curl 运行 与浏览器在加载额外的 Authoritiy 证书之前遇到的问题相同。知道如何使用它吗?
谢谢。
共有 2 个问题,现已修复 - 感谢 strace。
- 如其他帖子所述,我必须提供 RSA 私钥
- 使用带密码的本地私钥文件时,我们无法提供
它作为
./key:pass
,但通过使用 --pass {phrase}
选项
我正在尝试将我的 PHP 应用程序连接到服务器,这需要通过私钥进行身份验证并且在 public 服务器上没有证书。
API 位置:https://b2b.postaonline.cz/
为了从浏览器访问 API,我安装了这些证书:http://www.postsignum.cz/certifikaty_autorit.html (PEM)
然后我可以连接我的 .pfx 证书,从 PostSignum 检索到。
但是,我无法使用 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
在那之后我就可以从浏览器连接了。
我想这很重要,我也需要在 curl 中做,但我不知道怎么做。使用 ca.pem 和 client.pem,它们仅从 certificate.pfx 中提取 - 我认为 curl 运行 与浏览器在加载额外的 Authoritiy 证书之前遇到的问题相同。知道如何使用它吗?
谢谢。
共有 2 个问题,现已修复 - 感谢 strace。
- 如其他帖子所述,我必须提供 RSA 私钥
- 使用带密码的本地私钥文件时,我们无法提供
它作为
./key:pass
,但通过使用--pass {phrase}
选项