Intereting Posts
Преобразование timestamp ко времени назад в PHP, например, 1 день назад, 2 дня назад … brew install php56-mongo Команда Не работает Уведомление в корзине Woocommerce, показывающее несколько раз Почему спецификация ISO-8601 выглядит повсеместно игнорируемой, когда речь идет о десятичных знаках? Установка phpunit на windows Создать документ Word с помощью PHP в Linux Правильное формирование URL-адресов с помощью строки запроса и символа «хэштаг» Публикация на стене пользователя, не будучи онлайн / Записан – Facebook Sharing с помощью Graph API Вызов двух хранимых процедур в mysqli вызывает ошибку «Commands out of sync» ОБНОВЛЕНО: mod_rewrite и метод POST в задаче PHP, $ _POST всегда пуст Доступ к PHP-объекту со знаком доллара как имя узла Установка значения базы данных переменной в NULL вместо пустой строки Как использовать запрос async Mysql с PHP PDO Показать даты на Арабский Загрузить HTML-код, содержащий пространства имен с DOMDocument

SSL-сертификат партнера или SSH-ключ не был в порядке

Я тестирую API, который использует curl_exec php-функцию и сертификат CA, но что-то идет не так, и я немного потерялся.

Я настроил SSL на свой apache VirtualHost и выглядит нормально (открытие https:://[myVHost] … работает).

Однако вызов curl API возвращает мне это сообщение:

  • SSL peer certificate or SSH remote key was not OK

Я не очень разбираюсь в SSL, поэтому у меня мало идей о причине этого.

ОБНОВИТЬ:

Это код, который я использую в своем запросе cURL, я прокомментировал 2 строки и изменил их значение (посмотрите на строку «TODO»), и таким образом он работает, но это всего лишь работа arround …

 $opts[CURLOPT_URL] = $url; $opts[CURLOPT_RETURNTRANSFER] = true; $opts[CURLOPT_CONNECTTIMEOUT] = 50; $opts[CURLOPT_TIMEOUT] = 100; $headers = array( 'Accept: application/json', "User-Agent: APIXXX-PHP-Client"); $opts[CURLOPT_HTTPHEADER] = $headers; $opts[CURLOPT_USERPWD] = $env->getApiKey() . ':'; if (certificatePresent()) { // $opts[CURLOPT_SSL_VERIFYPEER] = true; // $opts[CURLOPT_SSL_VERIFYHOST] = 2; // TODO: SET IT BACK $opts[CURLOPT_SSL_VERIFYPEER] = 0; $opts[CURLOPT_SSL_VERIFYHOST] = 0; $opts[CURLOPT_CAINFO] = $path } curl_setopt_array($curl, $opts); $response = curl_exec($curl); 

Related of "SSL-сертификат партнера или SSH-ключ не был в порядке"

Вероятно, вы используете самоподписанный SSL-сертификат, который не будет передан, если установлены параметры CURLOPT_SSL_VERIFYPEER.

Существует два решения:

  1. Купить действительный сертификат SSL.
  2. Отключить проверку SSL в Curl. ( добавьте опцию –insecure )

Если вы отключите проверку, вы не можете быть уверены, действительно ли вы общаетесь с хостом. Так что это зависит от уровня безопасности, который вам нужен.

Хотя я отвечаю на старый пост, я думаю, что это поможет новым зрителям –

Вы можете проверить проблему, добавив

 $opts[CURLOPT_VERBOSE] = 1 

Для самоподписанного сертификата ваш клиент может подключаться к серверу с использованием IP-адреса, потому что имя хоста недоступно в кеше DNS. В этом случае COMMON NAME (CN) вашего сертификата сервера должно совпадать с IP-адресом сервера (при создании сертификата сервера укажите IP-адрес как общее имя). Когда вы сделаете это правильно, вы увидите это сообщение:

общее имя: 192.168.0.1 (соответствует)

Здесь пример 192.168.0.1.

Вы правы, когда хотите включить SSL_VERIFYPEER если вы беспокоитесь о атаках «человек в середине».

Является ли ваш $path установленным для указания сертификата (или пакета сертификатов), предоставленного владельцем API? Этот сертификат читается пользователем веб-сервера? Если да, подтвердили ли вы, что сертификат (ы) совпадает с тем, когда вы вручную посещаете адрес https в браузере и проверяете сертификат?

Если вы не можете заставить его работать, а API, к которому вы подключаетесь, имеет сертификат SSL, который работает в вашем обычном браузере без предупреждений, вы должны установить $path для вашего корневого пакета CA на своем сервере.

Вы можете создать действительный сертификат SSL и убедиться, что он хранится в надежной папке.

Действительный сертификат SSL можно создать, включив в командную строку разработчика VS2012 . (Это можно получить, набрав разработчика в начале)

Следующая команда создает самозаверяющий сертификат, который может быть использован для тестирования веб-приложения, использующего Secure Sockets Layer (SSL) на веб-сервере с URL-адресом www.example.com . OID, определяемый параметром -eku идентифицирует этот сертификат как SSL server certificate . Сертификат хранится в моем магазине и доступен на уровне машины (а не на пользователе). Закрытый ключ сертификата является экспортируемым, а сертификат действителен с May 10, 2010 through December 22, 2011 .

Makecert -r -pe -n CN = "www.example.com" -b 05/10/2010 -e 12/22/2011 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

Подробнее о том, как создать сертификат SSL

Теперь убедитесь, что этот сертификат доверен, это можно сделать, набрав CERTMGR в cmd.

теперь созданный сертификат находится в папке ПЕРСОНАЛ. скопируйте его и вставьте его в ПАДЕНЦИЮ НАПРЯЖЕННЫХ ЛЮДЕЙ.

Это должно сделать трюк. Дайте мне знать, если это не сработает.

Я была такая же проблема. Я следую инструкциям здесь: http://siteber.com/download-failed-ssl-peer-certificate-or-ssh-remote-key-was-not-ok/, и он исправил мою.

в основном я пошел в /etc/resolv.conf

и заменить

Сервер OpenDNS:

208.67.222.222

208.67.220.220

С

Общие DNS-серверы Google:

nameserver 8.8.8.8 nameserver 8.8.4.4

Рядом с CURLOPT_SSL_VERIFYPEER есть два других параметра, которые могут быть изменены на false / 0 :

 CURLOPT_SSL_VERIFYHOST CURLOPT_SSL_VERIFYSTATUS 

Помните, что вы должны исправить свои сертификаты и настройки SSL вместо отключения безопасности!