1

私はAWS EC2マシンでアプリケーションをストリーミングするtwitterを開発しようとしていました。 OSプラットフォームはUbuntu 16.04.1 LTSです。PHPバージョンを5.6.28-1 + deb.sury.org〜xenial + 1にダウングレードしました。ピア証明書CN = `stream.twitter.com 'が期待通りCN =` 199.16.156.217'

このサーバーで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 

同じコードが別の2台のマシンで実行されています(AWS EC2ともう1台はゴダディーサーバーです)。

現在のEC2マシンのすべてのポートが開かれており、SSLバージョンはOpenSSL/1.0.2gです。opensslセクションの値は次のとおりです。

openssl section - phpinfo

誰かが正確な問題がどこにあるかを見つけるために私を助けることができますか?

+0

* "同じコードが別の2台のマシンで問題なく実行されています..." *どのようなコードですか?あなたは何も投稿していません。 – jww

+0

ロングショット... IPは正しいですか? –

答えて

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です。これが問題でした。

fsockopenからstream.twitter.comにIPを変更すると、私の問題が解決しました。

PHPのバージョンが5.6より前の場合、デフォルト値VERIFY_PEERはfalseで、これは他のインスタンスで同じコードが実行されている理由です。

+0

これはSNI(Server Name Indication)と呼ばれています。クライアントは、受信した証明書が要求されたホスト名に発行されたことを確認する必要があります。それ以外の場合、あなたは悪意のある理由で証明書が置き換えられなかったかどうかわかりません。また、1つのサーバーに複数のホスト名を持たせることもできます。 – Narf

関連する問題