我尝试将我的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相同的问题。知道怎么用吗?
谢谢。
答案 0 :(得分:0)
共有2个问题合并,现在已经修复 - 感谢strace。
1)我必须提供RSA私钥,如其他帖子中所述 2)当使用带密码的本地私钥文件时,我们可以将它作为./key:pass提供,但是使用--pass {phrase}选项