Я пытаюсь подключить мое PHP-приложение к серверу, который требует авторизации с помощью закрытого ключа и не имеет сертификатов на публичных серверах.
Расположение API: https://b2b.postaonline.cz/
Чтобы получить доступ к API из браузера, я установил следующие сертификаты: http://www.postsignum.cz/certifikaty_autorit.html (ПЭМ)
затем я смог соединиться с моим сертификатом .pfx, полученным из PostSignum.
Однако я не могу подключиться с сервера Linux, используя curl. Ofc, я искал и тестировал материал несколько часов — например, преобразование private в 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)
Это то, что я получаю со всеми вариациями.
Примечания: когда я загрузил свой сертификат.pfx в браузер, соединение все еще было небезопасным. Итак, я скачал следующее с сайта сертификации PostSignum и загрузил их в браузер
Postsignum Root QCA 2
Postsignum Public CA 2
только после этого я смог подключиться из браузера.
Я думаю, что это что-то, мне нужно сделать также в завитке, но я понятия не имею, как. С ca.pem и client.pem, которые извлекаются только из certificate.pfx — я думаю, что curl сталкивается с той же проблемой, что и браузер, до загрузки дополнительных сертификатов Authoritiy. Есть идеи, как это использовать?
Спасибо.
было объединено 2 проблемы, теперь исправлено — благодаря strace.
1) Я должен предоставить закрытый ключ RSA, как упоминалось в других сообщениях
2) при использовании локального файла закрытого ключа с парольной фразой мы можем предоставить его как ./key:pass, но с помощью опции —pass {фраза}
Других решений пока нет …