Завиток: проблема с сертификатом SSL, проверьте, что сертификат CA в порядке
07 апреля 2006
При открытииВ безопасном URL с помощью Curl вы можете получить следующую ошибку:
Проблема с сертификатом SSL, проверьте, что сертификат CA в порядке
Я объясню, почему возникла ошибка и что вы должны с ней делать.
Самый простой способ избавиться от ошибки - добавить следующие две строки в ваш скрипт.Это решение создает угрозу безопасности.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
Давайте посмотрим, что делают эти два параметра.Цитирование руководства.
CURLOPT_SSL_VERIFYHOST : 1, чтобы проверить наличие общего имени в сертификате SSL-партнера.2, чтобы проверить наличие общего имени, а также убедиться, что оно соответствует указанному имени хоста.
CURLOPT_SSL_VERIFYPEER : FALSE, чтобы CURL не проверял сертификат партнера.Альтернативные сертификаты для проверки можно указать с помощью параметра CURLOPT_CAINFO или каталог сертификатов можно указать с помощью параметра CURLOPT_CAPATH.CURLOPT_SSL_VERIFYHOST может также иметь значение TRUE или FALSE, если CURLOPT_SSL_VERIFYPEER отключен (по умолчанию 2).Установка CURLOPT_SSL_VERIFYHOST в 2 (это значение по умолчанию) гарантирует, что представляемый вам сертификат имеет «общее имя», соответствующее URN, который вы используете для доступа к удаленному ресурсу.Это проверка работоспособности, но она не гарантирует, что ваша программа не будет принята.
Введите «человек посередине»
Вместо этого ваша программа может быть введена в заблуждение, чтобы перейти к другому серверу.Это может быть достигнуто с помощью нескольких механизмов, таких как отравление днс или арп (это история для другого дня).Злоумышленник также может самостоятельно подписать сертификат с тем же «общим именем», которое ожидает ваша программа.Сообщение будет по-прежнему зашифровано, но вы будете передавать свои секреты самозванцу.Такого рода атака называется «человек посередине»
Победа над «человеком посередине»
Что ж, нам нужно убедиться, что представляемый нам сертификат действительно хорош.Мы делаем это, сравнивая его с сертификатом, которому мы разумно * доверяем.
Если удаленный ресурс защищен сертификатом, выданным одним из главных ЦС, таким как Verisign, GeoTrust и др., Вы можете безопасно сравнить его с ЦС Mozilla.комплект сертификатов, который вы можете получить из http://curl.haxx.se/docs/caextract.html
Сохраните файл cacert.pem
где-нибудь на вашем сервере и установите следующие параметры в вашем скрипте.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");