【问题标题】:Peer certificate CN=`stream.twitter.com' did not match expected CN=`199.16.156.217'对等证书 CN=`stream.twitter.com' 与预期不匹配 CN=`199.16.156.217'
【发布时间】:2016-12-07 05:39:49
【问题描述】:

我试图在我的 AWS EC2 机器上开发一个 twitter 流应用程序。操作系统平台为 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.2gopenssl 部分具有以下值。

openssl section - phpinfo

有人可以帮我找出问题的确切位置吗?

【问题讨论】:

  • “同样的代码在另外两台机器上运行没有任何问题...”什么代码?您还没有发布任何内容。
  • 长镜头... IP 正确吗?

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


【解决方案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,这就是为什么在我的其他实例上运行相同的代码的原因。

【讨论】:

  • 是的,它被称为 SNI(服务器名称指示) - 您的客户端必须验证它收到的证书是否已颁发给请求的主机名。否则,您不知道证书是否因恶意原因被替换;也因为单个服务器可以有多个主机名,每个主机名都有单独的证书。
猜你喜欢
  • 2017-05-24
  • 2016-01-07
  • 2018-01-05
  • 2019-12-17
  • 2019-05-27
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多