嗯,这个问题比较难描述。我在一台服务器上安装了Webmin+Virtualmin。我在服务器上有多个IP地址(两个网卡绑定)。
假设网络是1.1.1.1/29。
虚拟服务器现在是这样的:
masterdomain.com:
- 监听所有地址(1.1.1.2到1.1.1.6)
- SSL 自签名证书(颁发者 masterdomain.com)
seconddomain.com:
- 聆听1.1.1.4
- SSL 自签名证书(颁发者 seconddomain.com)
您会看到,在 masterdomain.com 上使用 HTTPS 完全没有问题(除了抱怨证书未由 CA 签名)。TLSv1 说服务器你好,交换密钥,就完成了。
问题在于https://1.1.1.4/或者https://seconddomain.com/. Firefox 说ssl_error_rx_record_too_long。
我使用 Wireshark 检查数据包,发现它(seconddomain.com或者1.1.1.4) 永远不会发送密钥或“Hello”,而是在 TLSv1 响应中发送 seconddomain.com 的 DocumentRoot 的 index.php。Wireshark 将其归类为Alert (Level: Fatal, Description: Unexpected Message)
。前 66 个字节符合预期的标头,然后 Apache 插入处理后的 index.php ->"<html><head><title>Main page of seconddomain.com!![...]"
而不是 SSL 密钥。这在数据包中应该放置“Server Hello”(在来自客户端的正确“Client Hello”之后)。
我不知道如何解决这个问题,这很可能与 VirtualHost 配置有关。但是 seconddomain.com 的 VirtualHost 与 masterdomain.com 具有相同的配置! - 除了只监听一个 IP 而不是 *(当然,SSL 密钥、SuexecGroup 和 DocumentRoot 字段也不同)。
提前致谢。
答案1
我发现了错误。你看,Virtualmin 在以下位置生成了此内容apache2.conf
:
NameVirtualHost 1.1.1.2:80
NameVirtualHost 1.1.1.2:443
NameVirtualHost 1.1.1.4
因此不区分 1.1.1.4 的 https 和 http 端口。将其替换为:
NameVirtualHost 1.1.1.2:80
NameVirtualHost 1.1.1.2:443
NameVirtualHost 1.1.1.4:80
NameVirtualHost 1.1.1.4:443
解决问题。