Вызовите REST API https с помощью сертификата, ключа и CAcertificate. - PullRequest
0 голосов
/ 08 марта 2019

Мне нужно позвонить в конечную точку REST API поставщика платежных решений с аутентификацией SSL.

Поставщик предоставляет мне следующие файлы:

  • merchantCA.crt
  • rootCA.crt
  • client.crt
  • client.key
  • client.pfx
  • кодовая фраза

Документация API гласитдля rootCA.crt, который является центром сертификации, который подписал серверы поставщиков сертификатов, которые используются для аутентификации при подключении к продавцу.

А merchantCA.crt - центр сертификации, подписавший сертификат продавца

Итак, это мой вызов CURL:

curl --cacert rootCA.crt --cert client.crt:passphrase --key client.key -X GET -H 'Content-Type: application/json' "https://provider_website/api/desired_endpoint"

Но я получил эту ошибку

curl: (58) could not load PEM client certificate, OpenSSL error error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak, (no key found, wrong pass phrase, or wrong file format?)

Понятия не имею, что происходит.

1 Ответ

0 голосов
/ 27 апреля 2019

У меня только что была похожая проблема с клиентом OpenVPN, который использует OpenSSL (точно так же, как ваш curl). Проблема может заключаться в том, что ваш клиент OpenSSL слишком новый. Вам нужен старый клиент OpenSSL.

Ваш новый клиент OpenSSL не принимает, что сервер SSL использует хешированный сертификат md5. Требуется хеширование сертификата сервера с использованием SHA256.

Таким образом, получив старый клиент OpenSSL, он примет хешированный сертификат MD5.

Вы можете найти старые выпуски OpenVPN в https://build.openvpn.net/downloads/releases/ Для Windows самый новый, принимающий MD5 - openvpn-install-2.4.3-I602.exe. Когда вы установите его, он будет установлен в C:\Program Files\OpenVPN\bin. Там вы найдете openssl.exe, который работает. Вот версия, которую он печатает мне:

> openssl version
# OpenSSL 1.0.2l  25 May 2017

Вероятно, вы можете перейти непосредственно к OpenSSL, чтобы найти его, если вы этого хотите.

OpenVPN также имеет версии для Linux и Mac. Возможно, это также нумерация версий 2.4.3 для этих платформ.

Другой вариант заключается в том, что ваш платежный провайдер устанавливает сертификат, созданный SHA256 (и также предоставляет вам новый сертификат). Видимо, сертификаты MD5 больше не защищены ...

Цитата:

Версия OpenSSL была обновлена ​​до 1.1, и я не могу подключиться к своему R7000 Маршрутизатор извне больше, потому что по соображениям безопасности OpenSSL v.1.1 не принимает сертификаты MD5, потому что имеет слабую подпись.

С https://community.netgear.com/t5/Nighthawk-WiFi-Routers/Netgear-R7000-and-OpenVPN-for-Android-App/td-p/1310857

Подробнее о сертификатах MD5: https://openvpn.net/vpn-server-resources/faq-regarding-openvpn-connect-ios/#md5-signature-algorithm-support

Это скажет вам, что вы можете проверить, что сертификат хэшируется с использованием MD5: (используйте Git Bash)

 ../bin/openssl x509 -in rootCA.crt -noout -text | grep "Signature Algorithm"
#    Signature Algorithm: md5WithRSAEncryption
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...