Если CURLOPT_SSL_VERIFYPEER является ложным, передача данных больше не защищена?

Недавно я столкнулся с проблемой отправки данных на сервер, сертификат SSL которого был обновлен. Я провел некоторое исследование, и обнаружил, что, когда для параметра CURLOPT_SSL_VERIFYPEER установлено значение false, дата отправления проходит успешно. Может ли кто-нибудь объяснить связь между CURLOPT_SSL_VERIFYPEER и _VERIFYHOST? Кроме того, если я устанавливаю VERIFYPEER в значение false, я больше не буду передавать данные по защищенному соединению?

Спасибо за тонну за любую помощь, которую любой может дать.

Ответ 1

Соединение по-прежнему будет зашифровано 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 example.com).

_VERIFYPEER отключает проверку всего сертификата. Это позволяет работать самозаверяющим сертификатам. В противном случае библиотека SSL запретит говорить, что эмитент сертификата недействителен.

Но независимо от любой настройки, если вы принудительно подключаетесь к соединению, он будет зашифрован ssl.

Ответ 2

Я хотел бы уточнить связь между _VERIFYHOST и _VERIFYPEER из моего тестирования.

_VERIFYHOST проверить общее имя (CN), как указано в руководстве, которые зависят от варианта 1 или 2. Эта проверка проверяет и генерирует сообщение об ошибке. Сама проверка не влияет на соединение вообще, даже возникает ошибка проверки. В результате используется _VERIFYPEER для сокращения или продолжения соединения.

_VERIFYPEER (1) проверьте 2 вещи. Во-первых, он проверяет сертификат с помощью CAINFO. если CAINFO задает параметр curl, то он проверяет это значение, в противном случае он проверяет значение value в php.ini. Во-вторых, он проверяет результат от _VERIFYHOST (case set _VERIFYHOST до 1 или 2). Если проверка прошла оба условия, соединение будет продолжено. В противном случае соединение будет сокращено.

Ответ 3

Если вы отключите CURLOPT_SSL_VERIFYPEER, проверка сертификата не выполняется (и игнорируется значение CURLOPT_SSL_VERIFYHOST). В результате этого вы не можете защитить себя от нападений "человек-в-середине". Это означает, что вы больше не передаете данные по защищенному соединению.

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

Нижняя строка: не отключать CURLOPT_SSL_VERIFYPEER. Это оставляет вас неуверенно.

См. Последствия безопасности отключения CURLOPT_SSL_VERIFYHOST (libcurl/openssl) для получения дополнительной информации о том, что вам нужно сделать, чтобы безопасно использовать поддержку cURL SSL.