同行证书CN =`stream.twitter.com'不符合预期的CN =`199.16.156.217'

时间:2016-12-07 05:39:50

标签: php amazon-ec2 ubuntu-16.04 twitter-streaming-api php-openssl

我正在尝试在我的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 section - phpinfo

有人可以帮我找到确切的问题吗?

1 个答案:

答案 0 :(得分: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中的IP更改为stream.twitter.com解决了我的问题。

5.6之前的PHP版本,默认值VERIFY_PEER为false,这就是为什么在我的其他实例上运行相同的代码。