在完成续订即将过期的 SSL 证书的过程后,我在 Chrome 中查看时收到“ERR_SSL_PROTOCOL_ERROR”错误。经过几个小时的努力,我找到了备份并将我的所有证书文件和配置文件替换回原来的状态,但仍然收到错误。(我的旧证书应该还能再有效几天)
我的错误日志显示了大量条目,包括Invalid method in request \x16\x03\x01
。谷歌搜索让我找到了描述如何检查 443 上的输出是否为 HTML 的帖子。我进行了 telnet 会话,可以确认纯文本 html 正在通过端口 443 发送回。
运行 a2enmod ssl 时,系统会提示“模块 ssl 已启用”。这就是我在搜索该日志结果时找到的所有帖子。
还有其他方法可以尝试确保 SSL 正常运行吗?
更新
跑步netstat -lnt
我得到...
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
我很难知道我的网站在端口 80 上发生了什么。我的域名在 HSTS 预加载列表中,所以我甚至无法尝试端口 80。
更重要的更新
我最终尝试了五百万零八种随机方法,最终都成功了,但我不知道为什么。
我所做的就是<VirtualHost [my ip address]:443>
改变<VirtualHost *:443>
有人能解释为什么这能解决问题吗?我的 IP 地址的版本与昨晚我开始进行更改之前完全一样。我从备份中恢复了文件。我在一些地方读到过,这NameVirtualHost
很有VirtualHost
用。但我从未添加或删除过包含这些命令的任何内容。
答案1
我进行了 telnet 会话并确认纯文本 html 正在通过端口 443 发送回。
看起来你没有启用 SSL 的服务器在端口 443 上监听。要从您的网站通过端口 443,您必须设置 SSL 连接,而 telnet 不会这样做。要检查 SSL 连接,请使用
openssl s_client -connect example.com:443
请注意,一些正确配置的服务器可能会将 html 发送回端口 443 上的非 https 连接,并给出这样的建议,但我确信 yioou 会注意到这一点,例如
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>
答案2
我认为您可能会受益于运行配置检查并查看显示的内容:
sudo apachectl configtest
从您的 netstat 输出来看,httpd 没有运行。
已更新以解释评论中的回应:
好的,这似乎是进步了。你试过吗?是英语之道的建议,使用openssl s_client
?