Недавно я столкнулся с проблемой отправки данных на сервер, сертификат SSL которого был обновлен. Я провел некоторое исследование, и обнаружил, что, когда для параметра CURLOPT_SSL_VERIFYPEER установлено значение false, дата отправления проходит успешно. Может ли кто-нибудь объяснить связь между CURLOPT_SSL_VERIFYPEER и _VERIFYHOST? Кроме того, если я устанавливаю VERIFYPEER в false, я больше не передаю данные по защищенному соединению?
Спасибо за тонну за любую помощь, которую кто-либо может дать.
Соединение по-прежнему будет зашифровано SSL. Вы просто не будете делать это по ссылке, которая использует сертификаты с подтвержденным правилом. Любой может создать SSL-сертификат, который сделает абсолютно приемлемое шифрование на любом уровне вашего браузера и поддержки веб-сервера.
Однако вы получите много жалоб на невозможность проверить подлинность сертификата. Это должно помешать Joe M. Alicious создать себе сертификат, утверждающий, что он является «microsoft.com», и настроить собственный узел Windows Update. Сертификат скажет, что это microsoft.com, но он не может быть аутентифицирован как фактически являющийся microsoft.com, так как Verisign (или кто бы то ни было) фактически не выдал этот сертификат и не поставил свою собственную печать подлинности (подпись сертификата) на нем.
_VERIFYHOST должен проверить, что имя хоста URL-адреса, к которому вы подключаетесь (например, «microsoft.com»), указано в сертификате SSL. Если эта опция установлена в false, ошибки URL-адреса url / cert будут игнорироваться (скажем, у вас есть окно разработки на testbox.develhost.com, но вы используете реальный действительный сертификат example.com вашего клиента).
_VERIFYPEER отключает проверку всего сертификата. Это позволяет работать самозаверяющим сертификатам. В противном случае библиотека SSL запретит говорить, что эмитент сертификата недействителен.
Но независимо от любой настройки, если вы пропустите соединение, оно будет зашифровано ssl.
Я хотел бы уточнить связь между _VERIFYHOST и _VERIFYPEER из моего тестирования.
_VERIFYHOST проверить общее имя (CN), как указано в руководстве, которое зависит от варианта 1 или 2. Эта проверка проверяет и генерирует сообщение об ошибке. Сама проверка не влияет на соединение вообще, даже возникает ошибка проверки. Это результат, используемый _VERIFYPEER для сокращения или продолжения соединения.
_VERIFYPEER (1) проверить 2 вещи. Во-первых, он проверяет сертификат с помощью CAINFO. если CAINFO задает параметр curl, то он проверяет это значение, в противном случае он проверяет значение value в php.ini. Во-вторых, он проверяет результат от _VERIFYHOST (case set _VERIFYHOST до 1 или 2). Если проверка прошла оба условия, соединение будет продолжено. В противном случае соединение будет сокращено.
Если вы отключите CURLOPT_SSL_VERIFYPEER, проверка сертификата не выполняется (и игнорируется значение CURLOPT_SSL_VERIFYHOST). В результате этого вы не можете защитить себя от нападений «человек-в-середине». Это означает, что вы больше не передаете данные по защищенному соединению.
Да, данные зашифрованы, но они все еще не защищены. Вы знаете, что вы посылаете кого-то , но вы понятия не имеете, кто; вы можете отправить его врагу арки пользователя (тщательно шифруя его, чтобы никто, кроме злоумышленника, не мог прочитать данные). Это плохо. Все шифрование в мире не очень хорошо, если вы шифруете его с помощью открытого ключа злоумышленника.
Итог: не отключать CURLOPT_SSL_VERIFYPEER. Это оставляет вас неуверенно.
См. Последствия безопасности отключения CURLOPT_SSL_VERIFYHOST (libcurl / openssl) для получения дополнительной информации о том, что вам нужно сделать, чтобы безопасно использовать SSL-поддержку cURL.