drupal 9 无法显示正常更新信息发出PHP OpenSSL 要求

hrs 提交于 2022/05/23 - 09:07 , 周一

从版本 9.1.0 开始,Drupal 核心的更新管理器使用 HTTPS 来获取有关可用更新的信息。这意味着 Drupal 站点使用的 PHP 必须安装并正确配置 OpenSSL。如果 PHP 不支持 OpenSSL,则启用了更新管理器的站点将在其可用更新报告中看到“无法获取可用更新数据”错误消息。

网站无法发出出站 HTTPS 请求时的可用更新报告

openssl.png

如果您看到此错误,您可以采取一些步骤来使事情正常进行:

确认站点可以连接到 Internet
确认 OpenSSL 已启用
确认站点的证书文件已正确安装和配置
如果需要,将 Update Manager 配置为回退到 HTTP
1.确认网站可以连接到互联网
在担心 OpenSSL 和 HTTPS 之前,第一步是确保站点完全可以访问公共 Internet。考虑:

这是在本地服务器上运行的测试站点,还是在根本没有 Internet 连接的容器内运行的测试站点?
该站点是否位于网络代理服务器后面?如果是这样,网络和站点是否正确配置为使用该代理?
...
该站点必须完全能够访问公共 Internet,否则这些说明的其余部分将无济于事。

2. 确认 OpenSSL 已启用
首先,检查网站的 PHP 是否启用了 OpenSSL:

管理 > 报告 > 状态

点击 PHP 版本下的“更多信息”链接 (/admin/reports/status/php)

应该有一个名为“openssl”的部分,您应该看到如下内容:

OpenSSL support: enabled

如果没有,您必须查阅PHP openssl 扩展文档以了解如何在配置文件中启用此扩展。基本上,您需要取消注释或添加这样的一行:并且可能重新启动您的 Web 服务器守护进程(例如 Apache)。详细信息将根据您的托管环境而有所不同。如果您不确定,请咨询您的系统管理员或托管服务提供商。php.iniextension=php_openssl.so

3. 确认站点的证书文件已正确安装和配置
您可能会在站点的日志文件中看到如下错误之一:

SSL Certificate Problem: Unable to get local issuer certificate
SSL Certificate Problem: Verify that the CA cert is OK.
如果是这样,则意味着您的站点没有安装正确的证书颁发机构 (CA) 证书,或者 PHP 找不到正确的证书。您可以安装 cURL 本身提供的一组可信证书:

下载cacert.pem
将文件移动到受影响的计算机,例如: cacert.pem
/etc/pki/tls/cacert.pem
C:\php\extras\ssl\cacert.pem
编辑文件并更改参数,例如: php.inicurl.cainfo
curl.cainfo = "/etc/pki/tls/cacert.pem"
curl.cainfo = "C:\php\extras\ssl\cacert.pem"
请注意,在某些 PHP 配置中,您可能需要设置,而不是,以指向您下载的文件。openssl.cafilecurl.cainfocacert.pem

可能重新启动您的网络服务器(例如,Apache)以使更改生效。php.ini
有关更多信息,请参阅:

https://docs.bolt.cm/3.7/howto/curl-ca-certificates
https://curl.haxx.se/docs/sslcerts.html
https://curl.haxx.se/libcurl/c/libcurl-errors.html
https://stackoverflow.com/questions/13467648/configuring-curl-for-ssl
4. 如果需要,将 Update Manager 配置为回退到 HTTP
如果您无权更改站点的 PHP 配置,或者其他所有操作都失败了,您可以将 Drupal 的更新管理器配置为回退到使用 HTTP。不建议这样做,而且安全性较低(可能会使您面临“中间人”攻击,其中恶意站点声称是 updates.drupal.org 并为您提供虚假信息)。但是,没有任何迹象表明您的站点缺少 Drupal 核心和贡献的模块和主题的可用安全更新可能会更糟。因此,如果需要,您可以在文件中设置以下内容:settings.php

$settings['update_fetch_with_http_fallback'] = TRUE;

在这种情况下,更新管理器仍将首先尝试 HTTPS,但如果失败,它不会放弃并打印错误消息,而是使用 HTTP 再次尝试并希望获取可用的更新数据。

如果您已定义此设置,并且您尝试“手动检查”(使用您网站的可用更新报告中的链接)并且您仍然看到错误消息,请确保您的网站已连接到互联网,您的网络设置正确等。调试站点无法发出出站请求的所有可能情况超出了本文档的范围。祝你好运!

标签