即使浏览器中的数据看起来不错,Apache 也会产生大量仅 SSL 的错误

spr*_*aff 7 ssl apache-2.2

我已经为我在 localhost 上运行的网站安装了自签名 SSL 证书。对于 SSL 和非 SSL 版本,到达浏览器的数据似乎是完整且正确的,但我收到了很多 apache 错误输出,这似乎表明情况并非如此。

当我点击刷新时,我立即在日志中得到了几行

AH01964: Connection to child 0 established
Run Code Online (Sandbox Code Playgroud)

子 2、6、4 等也可能出现,没有特定的顺序。

在接下来的几秒钟内,我得到了其中的几个

(70014)End of file found: [client 127.0.0.1:32839] AH01991: SSL input filter read failed.
[client 127.0.0.1:32840] AH01382: Request header read timeout
Run Code Online (Sandbox Code Playgroud)

我认为这些行的多样性是由于脚本、css 等原因,因为如果我转到“查看源代码”并刷新窗口,我会得到其中之一

AH01964: Connection to child 4 established
Run Code Online (Sandbox Code Playgroud)

……没有别的。所有这一切只发生在 https 连接上。http 的日志是静默的。

是什么其实错了吗?我再说一遍,内容似乎完全正确地提供了,这似乎与日志中的“读取失败”和“超时”语言相矛盾。这些错误只是噪音还是我必须修复某些东西?

如果它们只是无害的噪音,我该如何关闭它们?


这是我如何设置一切。(我从各种教程中分段获得了这个过程,但没有完全理解它。)

在 /etc/hosts 我有

127.0.0.1 x.com
Run Code Online (Sandbox Code Playgroud)

我通过以下脚本创建了一个自签名 ssl 证书

openssl genrsa -des3 -out x.com.key 2048
openssl req -new -key x.com.key -out x.com.csr
cp x.com.key x.com.key.org
openssl rsa -in x.com.key.org -out x.com.key
openssl x509 -req -days 3650 -in x.com.csr -signkey x.com.key -out x.com.crt
chmod 400 x.com.{key,crt,csr}
sudo chown www-data x.com.{key,crt,csr}
sudo mv x.com.{key,crt,csr} /path/to/website/
Run Code Online (Sandbox Code Playgroud)

在这个过程中我输入

Common Name (e.g. server FQDN or YOUR name) []:x.com
Run Code Online (Sandbox Code Playgroud)

我在 sites-enabled/000-default.conf 中有 a<VirtualHost x.com:80>和 a<VirtualHost x.com:443>设置,它们之间的区别在于这一部分:

SSLEngine on
SSLCertificateFile /path/to/website/x.com.crt
SSLCertificateKeyFile /path/to/website/x.com.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog ${APACHE_LOG_DIR}/x.com.ssl.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
Run Code Online (Sandbox Code Playgroud)

他们有一个共同点:

LogLevel info
Run Code Online (Sandbox Code Playgroud)

Cip*_*dal 7

正如其他人所说,这些消息会被记录下来,因为您LogLevel的设置为info. 如果你不想要这些特定的消息,但仍然想要info级别日志,你可以在你的 apache 配置中重新配置它:

LogLevel info ssl:warn


小智 3

这个问题似乎与这个问题相同,这显然是我在诊断同一件事时发现的。

该问题是由于为 VirtualHost 设置基于名称(或通配符包罗万象)而不是 IP 地址而引起的。问题在于,域名仅在连接建立后才会传递到 Web 服务器,在此阶段 SSL/TLS 连接必须已处于活动状态,因此服务器需要根据可用的最少信息和信息选择正确的 SSL 密钥。这是该虚拟主机的 IP 地址。

Apache 网站上有更详细的配置信息和示例配置信息,但基本上您想要更改<VirtualHost x.com:443><VirtualHost 1.2.3.4:443>使用该主机/接口的 IP 地址的位置。