Как проверить, что имя хоста соответствует Common Name в SSL-сертификате в PHP?

С этим 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, Как вы думаете?

0

Решение

Если вы заходите на 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 что делает человека в середине атаки тривиальным.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector