我正在尝试在我的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
部分具有以下值。
有人可以帮我找到确切的问题吗?
答案 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,这就是为什么在我的其他实例上运行相同的代码。