我通常使用此参数来防止wp_remote_get
和发生错误wp_remote_post
array(
'sslverify' => false
)
出于安全原因,我想将其设置为true
(或将其删除,因为默认值为true)。
这样做会不会给我带来任何问题?
我通常使用此参数来防止wp_remote_get
和发生错误wp_remote_post
array(
'sslverify' => false
)
出于安全原因,我想将其设置为true
(或将其删除,因为默认值为true)。
这样做会不会给我带来任何问题?
Answers:
TL; DR:是的,从WordPress 3.7或更高版本中删除该设置。
过去,许多人添加sslverify = false参数是因为他们的PHP安装无法正确验证证书。
通常,这是因为未使用最新的CA Root证书副本更新PHP安装。根证书经常更改,通常您不会注意到此更改,因为它发生在常规浏览器更新中。好吧,当您的PHP像浏览器一样检索https url时,它也需要那些根证书更新。而且大多数主机从不更新PHP,也从未更新PHP的任何特定部分(例如证书文件)。
当WordPress在3.7版中实现自动更新时,确定有必要升级WordPress.org API以要求安全通信。此时,WordPress开始包含来自Mozilla的CA Root证书文件本身的副本。因此,从WordPress 3.7开始,WP_HTTP API函数使用此文件来进行证书验证,而不是PHP安装中打包的任何旧版本或过时版本。
因此,是的,对于WordPress 3.7或更高版本,建议删除sslverify参数并允许http函数进行正确的证书验证。任何运行SSL且具有由已知CA之一签名的密钥的现代服务器都将得到正确验证。WP_HTTP应该具有最新的根证书的副本,并且核心项目将在WordPress中更新该证书文件以及常规更新。
有很多原因会导致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 );
如果这是一个公开发行的插件,那么您可能希望将其附加到一个简单的选项上,用户可以打开或关闭它。您也可以先尝试验证后的请求,否则请尝试(如果用户选择了未签名的请求),然后切换到可能不安全的请求。
经验法则:
不要永远,直到你的用户已经同意这样做,风险认识进行不安全的请求。