2016-12-15 1020 views
0

我想連接我的PHP應用程序到服務器,這需要通過私鑰授權並且沒有公共服務器上的證書。curl「對方的公鑰無效」。無法加載客戶端密鑰:-8178(SEC_ERROR_BAD_KEY)

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 -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證書之前就遇到了同樣的麻煩。任何想法如何使用?

謝謝。

+0

另請參見[使用OpenSSL生成的SSL證書在NSS上不起作用](http://stackoverflow.com/q/22499425),[捲曲+ nss問題](https://curl.haxx.se/ mail/archive-2010-07/0009.html),[NSS和SSL錯誤代碼](http://www-archive.mozilla.org/projects/security/pki/nss/ref/ssl/) sslerr.html)在Mozilla的網站上等 – jww

+0

已經看到他們,這些都不適合我 – Ivan

+0

請將答案放在答案塊。經過一段時間後,您將能夠接受您自己的答案。使用Answer模塊就是Stack Overflow的工作方式,它可以讓未來的訪問者輕鬆地評估答案。另請參閱[如何接受答案?](http://meta.stackexchange.com/q/5234/173448) – jww

回答

0

有兩個問題合併在一起,現在修復了 - 謝謝strace。 2)在使用帶密碼的本地私鑰文件時,我們可以提供它作爲./key:pass,但是通過使用--pass {phrase }選項