CUrl с взаимной аутентификацией

Я пытаюсь сделать cUrl для стороннего сервера. Они предоставили мне файл p12, который я установил в своем браузере. При использовании браузера я получаю ответ от сервера. При выполнении cUrl с терминала Linux я получаю ошибки рукопожатия.

Я извлек .p12 в ключ и сертификат, а затем выполнил следующую команду:

curl --key client.key --cert client.crt -X GET -v https://x.x.x.x:xxxx/folder/endpoint

И получите следующий ответ:

Note: Unnecessary use of -X or --request, GET is already inferred.
*   Trying x.x.x.x...
* TCP_NODELAY set
* Connected to x.x.x.x (x.x.x.x) port xxxx (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Нужно ли где-то добавлять самозаверяющий сертификат? Я чувствую, что что-то упускаю. Как было сказано ранее, он работает из моего браузера, в который был импортирован сертификат, поэтому я уверен, что с их сертификатом нет проблем. Я знаю, что что-то упускаю.

Спасибо,

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
3
0
10 156
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваше сообщение об ошибке:

unable to get local issuer certificate

Это означает, что curl не может найти сертификат эмитента (ЦС, подписавший сертификат сервера) в хранилище доверенных сертификатов:

/etc/ssl/certs/ca-certificates.crt

Все, что вам нужно сделать, это загрузить сертификат ЦС и добавить его в хранилище доверенных сертификатов.

Ответ принят как подходящий

Да, вам нужно добавить опцию --cacert в команду curl, если она у вас загружена, или самозаверяющий сертификат (в моем случае)

curl --key client.key --cert client.crt --cacert bundle.pem -X GET -v https://x.x.x.x:xxxx/folder/endpoint.

bundle.pem имеет файлы server.crt и rootCA.crt.

cat server.crt rootCA.crt >> bundle.pem

Другие вопросы по теме