使用wp_emote_get()的单个主机上的错误,除非将sslify设置为FALSE

时间:2016-04-12 作者:Mark

我正在HostGator、GoDaddy、DreamHost和DigitalOcean上测试一个插件,用VVV在本地开发。我正在全面运行WordPress 4.4.2。

我正在使用wp\\u remote\\u get()从NOAA\'s Text Data Server 使用3个不同的端点。当我将测试扩展到另一台主机Arvixe时,我遇到了麻烦,在那里,我的第三个端点出现了400个错误请求。其他的都很好。

我发现在请求中将sslverify参数设置为false“修复”了此主机上的问题,但我不清楚原因,以及这是否真的是件好事。该插件仅显示从NOAA获取的数据,但这样禁用验证似乎是不必要和错误的。

奇怪的是,我已经为这个插件编写了wp-cli命令,它们按照预期工作,使用相同的类和方法,没有错误。此主机上的命令行PHP是v5。5,我使用PHP 5.3-7.0测试了WordPress,得到了相同的结果。

进一步搜索我读到answer given by Otto 这让我想知道我是否在错误的地方寻找解决方案。

我真的很感激有人能帮助我找出真正的潜在问题。

有什么想法或建议吗?

更多详细信息:Arvixe上的站点是https其他测试站点是http/https的混合,没有错误。证书有效

enter image description here

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

这可能是一个错误的地方,无法深入了解证书验证的详细信息,我不确定我是否完全理解,所以这个答案将集中在wordpress API上。

证书验证的问题是,您需要发行人公司的根证书列表,以便验证特定证书。That list changes 因此,服务器需要更新信息。显然,支持“类似浏览器的功能”并不是服务器管理员想到的主要事情之一,您的软件可能会在一个根本没有定义的服务器上结束,或者只是过时的信息。

Otto的回答详细说明了wordpress core是如何处理它的,它通过提供根证书包来实现,默认情况下,wordpress http API使用它(检查了4.4,不确定何时启动)。但你的插件可能安装在包含过时信息的早期版本上(目前,在4.5发布前一周左右,只有大约50%的wordpress网站运行4.4)。

那么你能做什么呢?

简单选项:由用户决定。最终,这是他的决定,他希望自己的网站有多安全。可能是因为他不能或不想更新他的根证书。

为插件提供您自己的根证书。这样,您可以在根证书需要更新时推送更新。处理它的相关核心api是WP_HTTP::request 使用sslcertificates $args参数中的参数。更高级别的HTTP API函数可能会以某种方式将该参数传递给它。