1

不匹配我试图在我的AWS EC2机器上开发Twitter流应用程序。操作系统平台是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 

相同的代码运行而不会在其他两台机器的任何问题(一个是AWS EC2和另一种是GoDaddy的服务器)。

当前EC2计算机中的所有端口现在都打开,SSL版本是OpenSSL/1.0.2gopenssl部分具有以下值。

openssl section - phpinfo

有人可以帮助我找到其确切的问题是什么?

+0

*“相同的代码在另外两台机器上运行时没有任何问题......”*什么代码?你还没有发布任何内容。 – 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中的IP更改为stream.twitter.com解决了我的问题。

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

+0

是的,它被称为SNI(服务器名称指示) - 您的客户端必须验证它收到的证书是否发布到所请求的主机名。否则,您不知道证书是否因恶意原因未被替换;也因为一台服务器可以有多个主机名,每个主机名都有不同的证书。 – Narf

相关问题