HTTPS不仅仅是关于加密。SSL还使用称为证书验证的过程来防止主机伪造。这是一个多层次的过程,但下面是简要概述:
世界上有许多证书颁发机构(CA)。当您获得域名证书以允许它执行SSL时,通常您会从这些CA中的一个购买它。他们对证书进行数字“签名”,以验证他们是否已检查证书或您拥有什么。
每个web浏览器都附带一个该浏览器信任的CA列表(及其加密签名)。因此,当您转到HTTPS URL时,服务器会显示其签名证书。您的浏览器执行一项操作,以根据它所知道的CA验证签名。如果它知道,并且域匹配,那么它会假定域是有效的,并且它信任该站点。通常这意味着它会显示受信任的图标或其他内容。如果不匹配,则通常会向查看器显示一个框,说明它无法验证证书,用户应谨慎操作。
现在,curl也是一种web浏览器。它还以完全相同的方式验证证书。然而,curl是安装在web服务器上的一个程序,它可能在所有最新和最好的CA和吊销列表等上都不是最新的。因此,当它检查签名时,检查失败,因为它不知道相关的CA。
您正在考虑的解决方案包括获取最新的cacert。pem文件(CA证书列表),然后告诉curl库该文件的位置和使用方法。如果您有cacert,这将很好地工作。pem文件,然后将代码放入wp配置中。php文件。每隔一段时间,您可能需要更新cacert。pem文件至最新版本。
另一种选择是告诉curl忽略验证阶段,只使用SSL进行加密。这很好,但意味着您可能容易受到特殊类型的攻击,但它们可以做什么取决于您使用远程get的目的。为此,可以将sslverify参数添加到wp\\u remote\\u get调用中,如下所示:
wp_remote_get(\'https://whatever\',array(\'sslverify\'=>false));
<编辑以避免出现新的“答案”,因为我的声誉为空,我无法发表评论-MeanderingCode:
在回答MikeSchinkel的评论/问题时:没有验证证书上的签名是否来自“受信任的”证书颁发机构意味着任何人都可以创建证书以启动加密的HTTP会话,并且可能有一个人在中间,解密您的流量,读取或更改它,重新加密它,并在他们自己的会话中将其发送到您的预期目的地。敏感信息可能会通过连接传播;最常见的是身份验证凭据。MITM将以明文形式查看通过链接发送的任何信息,然后将您的凭据和任何其他信息发送到任一方向。