С этим PHP-скриптом
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_URL, 'https://sf.net/');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
if (!curl_exec($ch)) {
echo "Error #" . curl_errno($ch) . ": " . curl_error($ch);
}
?>
Я не получил ошибку. Кажется, все в порядке.
Ожидаемый результат должен появиться сообщение об ошибке, указывающее, что имя сертификата sourceforge.net
не соответствует ожидаемому sf.net
, Как вы думаете?
Если вы заходите на sf.net, вы получаете сертификат для sf.net, а не для sourceforge.net. Сертификат для sf.net имеет как CN *.sf.net
и как Сан DNS:*.sf.net, DNS:sf.net
, Это означает, что сертификат соответствует URL. Не запутайтесь от следующего перенаправления на sourceforge.net
потому что в этом перенаправлении он получит новый сертификат, действительный для новой цели.
Помимо этого, путем установки CURLOPT_SSL_VERIFYPEER
в false вы будете принимать любые сертификаты, независимо от того, были ли они выпущены локально доверенным центром сертификации или нет. И это не поможет, что вы установите CURLOPT_SSL_VERIFYHOST
потому что с обеими настройками вы примете самозаверяющий сертификат для имени sf.net
что делает человека в середине атаки тривиальным.
Других решений пока нет …