Сертификат узла CN=`stream.twitter.com' не соответствует ожидаемому CN=`199.16.156.217'

Я пытался разработать приложение для потоковой передачи Twitter на моем компьютере AWS EC2. Платформа ОС — Ubuntu 16.04.1 LTS, и я понизил версию PHP до 5.6.28-1+deb.sury.org~xenial+1.

Когда я запускаю приложение потоковой передачи Twitter на этом сервере, я получаю следующие ошибки.

Warning: fsockopen(): Peer certificate CN=`stream.twitter.com' did not match expected CN=`199.16.156.217' in /var/www/html/myapp/streamer/twitterstreamer.php on line 620

Warning: fsockopen(): Failed to enable crypto in /var/www/html/myapp/streamer/twitterstreamer.php on line 620

 Warning: fsockopen(): unable to connect to ssl://199.16.156.217:443 (Unknown error) in /var/www/html/myapp/streamer/twitterstreamer.php on line 620

Тот же код работает без проблем еще на двух машинах (одна — AWS EC2, а другая — сервер godaddy).

Все порты на текущей машине EC2 теперь открыты, а версия SSL равна OpenSSL/1.0.2g, раздел openssl имеет следующее значение.

Раздел openssl — phpinfo

Может ли кто-нибудь помочь мне найти точную проблему?


person Tismon Varghese    schedule 07.12.2016    source источник
comment
Тот же код работает без проблем на двух других машинах... Какой код? Вы ничего не опубликовали.   -  person jww    schedule 07.12.2016
comment
длинный выстрел ... это правильный IP?   -  person Someone Special    schedule 07.12.2016


Ответы (1)


Проблема решена с подсказкой для первой ошибки. Warning: fsockopen(): Peer certificate CN='stream.twitter.com' did not match expected CN='199.16.156.217' in /var/www/html/myapp/streamer/twitterstreamer.php on line 620

В PHP 5.6.x значение openssl VERIFY_PEER по умолчанию равно true. Система сначала получит сертификат от партнера и сопоставит его с нашим. В моем приложении я подключался к IP-адресу, а URL-адрес в полученном сертификате — stream.twitter.com. В этом была проблема.

Изменение IP в fsockopen на stream.twitter.com решило мою проблему.

В версиях PHP до 5.6 значение по умолчанию VERIFY_PEER равно false, и поэтому тот же код работает на других моих экземплярах.

person Tismon Varghese    schedule 08.12.2016
comment
Да, это называется SNI (индикация имени сервера) — ваш клиент должен убедиться, что сертификат, который он получает, был выдан на запрошенное имя хоста. В противном случае вы не знаете, не был ли заменен сертификат по злонамеренным причинам; а также потому, что один сервер может иметь несколько имен хостов, каждое из которых имеет отдельные сертификаты. - person Narf; 04.01.2017