Не срабатывает скрипт, ошибка Peer certificate CN

123 4
egorka-I
На сайте с 27.10.2012
Offline
96
1923

У меня VDS
IspManager 6  
Debian 10
PHP 7.3.19 (native)

Не срабатывает скрипт, в логах домена ошибка сертификата, функция подхватывает почему-то другой домен
Сертификаты все Let's Enscripr

fsockopen(): Peer certificate CN=`domen.ru' did not match expected CN=`другой-домен.ru'.....................
fsockopen(): Failed to enable crypto in ................
fsockopen(): unable to connect to ssl://xx.xx.xx.xx:443 (Unknown error) in ..................

На другом домене с https под этим же пользователем скрипт срабатывает.

Разработчик скрипта, дал такой код, он тоже не выполняется на этом домене:


<?php

 $initurl = 'http://domen.ru';

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $initurl);
 curl_setopt($ch, CURLOPT_HEADER, 1);
 curl_setopt($ch, CURLOPT_VERBOSE, 1);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

 if($errno = curl_errno($ch)) {
  $error_message = curl_error ($ch);
  echo "cURL error ({$errno}):\n {$error_message}";
 }
 $info = curl_getinfo($ch);
 print_r($info);
 $fdata = curl_exec($ch);
 print_r($fdata);
 curl_close($ch); 



Евгений Крупченко
На сайте с 27.09.2003
Offline
178
#1
egorka-I :
У меня VDS

Соболезнуем...

Взглянуть бы на все как есть, без секретностей. К какому конкретно домену подключение идет?

В скриптах скорей всего все в норме, но тот домен отдает в своем сертификате другой домен. Но не видя домена, это лишь гадание...

Можно попробовать этим (или curl версией) скриптом другой домен запросить, например searchengines.guru, в сертификате которого проверенно указаны searchengines.guru и *.searchengines.guru

W1
На сайте с 22.01.2021
Offline
306
#2
egorka-I :
Разработчик скрипта, дал такой код

Скрипт, как скрипт. У вас же не скрипт ошибку выдаёт, а обмен приветствиями между серверами заканчивается ошибкой вроде как. Смотрите, что там  с сертификатами.

Мой форум - https://webinfo.guru –Там я всегда на связи
egorka-I
На сайте с 27.10.2012
Offline
96
#3
Евгений Крупченко #:
например searchengines.guru

Любой сайт нельзя проверить, только свои сайты, я же в корень код закидываю, своих сайтов. Выше код вы можете сами проверить, поставив на любой свой сайт, только замените URL.

Скрипт который мне важен это карта сайта

Сайт проверяю этот,  а подключение к любому может с моего хостинга , который тоже с https.

У одного убрал SSL (для проверки), так протокол начал к другому писать: " did not match expected CN=`другой-домен.ru' "


webinfo #:

Смотрите, что там  с сертификатами.

А что их смотреть, обычные шифры и все.
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#4

Попробуйте оба параметра использовать:


curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);


✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
W1
На сайте с 22.01.2021
Offline
306
#5
egorka-I :
$initurl = 'http://domen.ru';

Так и пишете – http?

Lazy Badger
На сайте с 14.06.2017
Offline
228
#6
egorka-I #:
А что их смотреть, обычные шифры и все.

Деточка, с таким уровнем понимания проблем вам не issues c сертификатами и кодом решать, а задницу самостоятельно подтереть доверить боязно - без туалетной бумаги, еще и подписанной "для подтирания жопы",  можете не справиться.

Обидно? Возможно, но на правду обижаются только малолетние дети. Не умеете дебажить код - бывает, но хотя бы перебором найти, в чем разница сертификатов, генерящих ошибку и не - можно вполне.

Тыкая пальцем в небо:

  • в сертификате обсуждаемого сайта я кроме Subject

CN = wood-petr.ru

наблюдаю еще и в  Subject Alternative Name

DNS Name=wood-petr.ru

DNS Name=www.wood-petr.ru

  • проверяется реально https:// а в коде скрипта у $initurl протокол http и имеем разные URL реальный и тестируемый

Производство жести методом непрерывного отжига
egorka-I
На сайте с 27.10.2012
Offline
96
#7
webinfo #:

Так и пишете – http?

Проверяю с https

На выходе:

Array ( [url] => https://wood-petr.ru [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [redirect_url] => [primary_ip] => [certinfo] => Array ( ) [primary_port] => 0 [local_ip] => [local_port] => 0 [http_version] => 0 [protocol] => 0 [ssl_verifyresult] => 0 [scheme] => [appconnect_time_us] => 0 [connect_time_us] => 0 [namelookup_time_us] => 0 [pretransfer_time_us] => 0 [redirect_time_us] => 0 [starttransfer_time_us] => 0 [total_time_us] => 0 ) 
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#8
function curl_gets($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE,dirname(__FILE__)."/cookie.txt");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400');
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

echo curl_gets('https://wood-petr.ru');


Всё отлично работает.

W1
На сайте с 22.01.2021
Offline
306
#9
IP забанили?
Евгений Крупченко
На сайте с 27.09.2003
Offline
178
#10

Короче я все понял.

Проверил у себя - curl скрипт из первого поста работает нормально даже если не делать CURLOPT_SSL_VERIFYPEER false

И скрипт вида:

<?php
$fp = fsockopen("ssl://wood-petr.ru", 443, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: wood-petr.ru\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

также без проблем работает.

Но! Только с доменом wood-petr.ru

Меня потому и раздражают все подобные "шифровальщики" (ну что ты там от кого прячешь, ну...), что говорит тут одно а на деле у себя пробует другое, с маааленьким нюансом. И все должны гадать что не так.

Короче, если запрашивать домен с www. то действительно натыкаемся на ошибку:



А все почему? Потому что вот так через одно место настроен тот wood-petr.ru - при запросе www.wood-petr.ru отдается сертификат от другого food-udm.ru


Я почему сразу спросил проверить работу скрипта на любом другом (нормально настроенном) домене.

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий