我通常使用此参数来防止wp_remote_getwp_remote_post错误

array(
    'sslverify' => false
)

true(或将其删除,因为默认值为true) 。

这样做我应该有什么问题吗?

#1 楼

TL; DR:是的,从WordPress 3.7或更高版本开始删除该设置。

过去,许多人添加了sslverify = false参数,特别是因为他们的PHP安装无法正确验证证书。

通常,这是因为未使用最新的CA Root证书副本来更新PHP安装。根证书经常更改,通常您不会注意到此更改,因为它发生在常规浏览器更新中。好吧,当您使PHP像浏览器一样检索https url时,它也需要那些根证书更新。而且大多数主机从不更新PHP,也不更新PHP的任何特定部分(例如证书文件)。

当WordPress在3.7版中实现自动更新时,确定有必要升级WordPress。组织API要求进行安全通信。此时,WordPress开始包含来自Mozilla的CA Root证书文件本身的副本。因此,从WordPress 3.7开始,WP_HTTP API函数使用此文件进行证书验证,而不使用PHP安装中打包的任何旧版本或过时版本。

因此,是的,对于WordPress 3.7或更高版本,建议删除sslverify参数并允许http函数进行正确的证书验证。任何运行SSL且具有由已知CA之一签名的密钥的现代服务器都将得到正确验证。 WP_HTTP应该具有最新的根证书的副本,并且核心项目将在WordPress中更新该证书文件以及常规更新。

评论


感谢奥托,我认为这很有帮助。我将在插件中进行一些条件检查

– Xaver
2014年11月10日12:17

#2 楼

有很多原因会导致SSL验证失败。从太多的重定向开始到错误的.ini文件/设置,或者仅仅是缺少证书或子域。无论如何,您都需要搜索原因并加以解决。无法解决。

但是要暂时解决该问题(假设您需要进一步开发代码并稍后修复SSL错误),可以使用过滤器:

add_filter( 'https_ssl_verify', '__return_false' );


在远程请求期间运行此程序时,应将其包装在附加到此HTTP请求期间触发的过滤器的回调中。请确保检查您是否确实要删除正确案例的验证-并确保只运行一次以确保其他请求不安全。

add_filter( 'http_request_args', function( $params, $url )
{
    // find out if this is the request you are targeting and if not: abort
    if ( 'foo' !== $params['foo'] )
         return $params;

    add_filter( 'https_ssl_verify', '__return_false' );

    return $params;
}, 10, 2 );


如果是一个公开发布的插件,那么您可能希望将其附加到一个简单的选项上,用户可以打开或关闭它。您也可以先尝试验证后的请求,否则请尝试(如果用户选择了未签名的请求),然后切换到潜在的不安全请求。


经验法则:

不要执行不安全的请求,直到您的用户同意为止。
知道风险。


评论


谢谢,我现在正在本地环境中搜索问题

– Xaver
2014年11月10日12:18

#3 楼

WordPress可以依靠基础服务器软件(通常是cURL)执行网络请求。简而言之,这是该软件的优点所在。

在某些服务器上,由于各种原因(我从来没有打扰过自己),服务器软件通常无法运行“验证”安全连接,从而产生上述错误。

因此:


如果这是您控制的服务器上的私有代码,则应确保服务器正在发出请求正确且未禁用此设置
如果这是用于公共发行的代码,则您可能也不想禁用它,但是如果它足够流行,它将最终出现在服务器上,在某个时候它已经坏掉了,您必须以某种形式提供支持(从告诉人们期望正确的配置到提供设置,再到为您的请求禁用它,依此类推)。