SSL 证书在 WordPress 更新中通过纯 HTTP(非 SSL)验证失败

Posted

技术标签:

【中文标题】SSL 证书在 WordPress 更新中通过纯 HTTP(非 SSL)验证失败【英文标题】:SSL certificate verify failed over plain HTTP (non-SSL) in WordPress update 【发布时间】:2016-04-13 15:03:10 【问题描述】:

我正在尝试更新 WordPress 本身以及插件和主题。

更新 WordPress 从下载更新 http://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip…

下载失败。:SSL证书问题,验证CA证书是否正确 好的。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

安装失败

我在这里读过:https://help.github.com/articles/error-ssl-certificate-problem-verify-that-the-ca-cert-is-ok/

当您收到此错误时,可能意味着您的 CA 已过期,需要更新。通常,更新您的操作系统也会更新您的 CA,并解决问题。

我向我的主人寻求帮助,他们说:

我在您发送的链接中获得了基础参考。但是根 证书颁发机构仅在您使用 ssl 时适用 网站/证书。

您发送的屏幕截图中的插件升级路径是 http 仅基于站点-这就是为什么我不了解相关性的原因。如果你是 调用一个 http 链接,ssl 没有被使用并且不相关。

但是,此请求是通过 HTTP 进行的,并且未使用 SSL。为什么会出现此错误?

【问题讨论】:

【参考方案1】:

wordpress.org 的所有内容都是基于 SSL 的网站。任何 HTTP 请求都会通过他们的 nginx 实例通过 HTTPS 路由,可能使用如下规则:

server 
       listen         80;
       server_name    my.domain.com;
       return         301 https://$server_name$request_uri;

【讨论】:

【参考方案2】:

这是下载时发生的情况:

wget http://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip
--2016-01-11 14:40:07--  http://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip
Resolving downloads.wordpress.org... 66.155.40.188, 66.155.40.189, 66.155.40.187, ...
Connecting to downloads.wordpress.org|66.155.40.188|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip [following]
--2016-01-11 14:40:07--  https://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip
Connecting to downloads.wordpress.org|66.155.40.188|:443... connected.
ERROR: cannot verify downloads.wordpress.org's certificate, issued by `/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2':
  Unable to locally verify the issuer's authority.
To connect to downloads.wordpress.org insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

所有下载都被重定向到 ssl,并且证书由 Go Daddy 的最新 CA 根签名。

从 here 的 wordpress git 站点下载最新的证书,将其作为 ca-bundle.crt 保存到您的 wp-includes/certificates 目录中,确保下载的 .crt 替换当前的,然后再次尝试更新。

【讨论】:

我只是想让大家知道,替换wp-includes/certificates中的证书有效。【参考方案3】:

该文件的链接重定向到 HTTPS。您可以在http://www.redirect-checker.org 看到它的实际应用情况@

恭喜。一切似乎都很好。

http://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip 301 永久移动https://downloads.wordpress.org/release/wordpress-4.4.1-new-bundled.zip 200 确定

至于您收到该错误的原因,您的服务器无法验证证书,因为它无法获得正确的链(CA)。如您所见see here,wordpress.org 已正确配置。显然您的服务器不会信任服务器提供的链。很可能它被配置为只接受已安装的 CA。

有几种方法可以玩这个。两者都涉及到 GoDaddy Repository 并下载 Go Daddy Secure Certificate Authority - G2 文件(应该是 this file)。

现在,你需要做的是

    请您的主机在他们的服务器上安装此链文件。如果您将它们指向存储库,它们应该为您执行此操作。这应该是微不足道的。 破解 WP 更新脚本以直接使用 CA 链。我敢打赌它使用this file 中的CURL 请求来进行请求。它可能完全是另一个文件。您可以告诉执行下载的脚本使用该 CA 文件。这对您来说不是一个很好的解决方案,因为您可能每次都必须破解该脚本。

【讨论】:

【参考方案4】:

我也遇到了 Wordpress 4.4.1 的 301 问题,这似乎有不同的原因,但我的研究也从版本更改日志中得出了这一点:

Removed SSL certificates causing errors in WP 4.4

完整的发行说明: Wordpress Version 4.4.1

在 diff 中,您还可以看到从以下位置删除了很多证书:

/wp-includes/certificates/ca-bundle.crt

【讨论】:

以上是关于SSL 证书在 WordPress 更新中通过纯 HTTP(非 SSL)验证失败的主要内容,如果未能解决你的问题,请参考以下文章

如何为已有WordPress站点安装SSL证书开启全局https访问

如何为自己的WordPress站点安装SSL证书开启https访问

如何为自己的WordPress站点安装SSL证书开启https访问

在wordpress网站中将http更改为https,激活ssl证书

快速申请SSL证书,WordPress全站开启HTTPS

如何为自己的WordPress站点安装SSL证书开启https访问