【问题标题】:PHP 8 $_SERVER['SSL_PROTOCOL'] is missing on some servers, how to determine encryption protocl and version某些服务器上缺少 PHP 8 $_SERVER['SSL_PROTOCOL'],如何确定加密协议和版本
【发布时间】:2021-05-20 20:41:10
【问题描述】:

我们最近将服务器升级到 PHP 8,其中一台服务器缺少 $_SERVER['SSL_PROTOCOL'] 变量。

  • 我在 php.net 上找不到对它的任何引用。
  • 我知道有些变量是从系统的其他部分提取的,但我不熟悉 PHP 从何处获取此特定变量。
  • 我使用引号运算符找到的所有搜索结果都只显示了不相关的数据。
  • 我试图查看变量名称是否已更改为 TLS_PROTOCOL 之类的名称,因为 SSL 已经不相关已有一段时间了。

我的目标是确保客户端使用 TLS 1.2 或 TLS 1.3,这是其中的关键组件。如何获取$_SERVER['SSL_PROTOCOL'] 或至少确定客户端通过 PHP 使用的网络加密类型的协议和协议版本?

【问题讨论】:

  • 可能是个愚蠢的问题,但该服务器是否使用 Apache 提供 https 页面?
  • @SiebeJongebloed 这不是一个愚蠢的问题,我应该提到 Apache,是的。
  • “我的目标是确保客户端使用 TLS 1.2 或 TLS 1.3”你能不禁用 HTTP 服务器上的其他协议吗?
  • @miken32 是的,我已禁用 1.1 及更早版本:immuniweb.com/ssl/jabcreations.com/2pIGVaRM
  • 那么这样的客户端将永远不会访问您的 PHP 代码。

标签: php php-8 tls1.3


【解决方案1】:

SSL/TLS 加密由您的 Web 服务器处理,而不是 PHP,因此必须在此处设置此变量。 PHP 的升级是巧合 - 是您升级或重新构建的其他东西造成了差异。

如果您使用的是 Apache,除非您设置 SSLOptions +StdEnvVars,否则此信息将被禁用以提高性能。请参阅https://httpd.apache.org/docs/current/mod/mod_ssl.html的文档

快速搜索表明 Nginx 根本没有设置这个变量。

【讨论】:

  • 我知道 Apache 可以处理它,我只是在完成所有搜索后没有建立完整的连接,现在测试一下......
  • 我无法让它工作;文档说它可以与.htaccess 文件一起使用,我什至彻底重启了服务器几次进行测试,但什么也没有;例如SSLOptions +StdEnvVars +ExportCertData。我做错了什么?
  • @John 你说它在“其中一台服务器上”丢失了;据推测,该服务器的配置存在一些差异。也许有什么东西专门把它关闭
  • sigh 这是一个 cPanel 服务器,所以我会打电话给我的主机并检查。通常当它出现这样的问题时,它是 cPanel... 会报告回来。
猜你喜欢
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
相关资源
最近更新 更多