端口 443 上加载了错误的应用程序

端口 443 上加载了错误的应用程序

我有一台带有两个 Web 应用程序的服务器,其配置如下:

应用程序1:

www.domain1.com
has https version

应用程序2:

www.domain1.com
has not https version

这是我的 domain1 的 VirtualHost 配置:

Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off

<VirtualHost --ip--:80>
    ServerName www.domain1.com
    DocumentRoot /usr/local/ROOT
    <Directory /usr/local/ROOT>
        Options FollowSymLinks 
        AllowOverride All
        Order allow,deny
        Allow from All
    </Directory>
    errorlog /var/log/httpd/domain1.error.log
    CustomLog /var/log/httpd/domain1.access.log common 
    JkMount /* ajpmc
</VirtualHost>

<VirtualHost --ip--:443>
    ServerName www.domain1.com:443
    DocumentRoot /usr/local/ROOT
    <Directory /usr/local/ROOT>
        Options FollowSymLinks 
        AllowOverride All
        Order allow,deny
        Allow from All
    </Directory>
    errorlog /var/log/httpd/domain1.error.log
    CustomLog /var/log/httpd/domain1.access.log common 

    SSLEngine on
    SSLCertificateFile "/usr/local/security/paadbox.cert"
    SSLCertificateKeyFile "/usr/local/security/paadbox.pem"

    JkMount /* ajpmc
</VirtualHost>

编辑: 这是 domain2 的配置:

<VirtualHost --ip--:80>
    ServerName www.domain2.com
    DocumentRoot /var/www/html/domain2
    <Directory /var/www/html/domain2>
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from All
    </Directory>
    errorlog /var/log/httpd/domain2.error.log
    CustomLog /var/log/httpd/domain2.access.log common
</VirtualHost>

请注意我只有 1 个 IP。

这些 URL 在浏览器中运行良好:

http://www.domain1.com
http://www.domain2.com
https://www.domain1.com

当我尝试加载此 URL (app2) 时:

https://www.domain2.com

第一个应用程序 (app1) 在我的浏览器中加载。有什么问题吗???

答案1

从历史上看,每个 IP 地址只能有一个 SSL 虚拟主机。 信噪比-- 服务器名称指示 -- 旨在解决这个问题。

虽然理论上大多数浏览器现在都支持信噪比,要实现该功能,必须满足几个要求。您可以阅读有关 Apache 和 SNI 的更多信息这里

在没有 SNI 的情况下,虚拟主机选择发生Apache 认识虚拟主机姓名客户端正在请求。这意味着对于给定的 IP 地址只能有一个 SSL 虚拟主机。

您可以进行基于名称的虚拟托管没有如果您的所有虚拟主机共享一个共同的域,则可以使用 SNI,因为这样您就可以使用对所有虚拟主机都有效的通配符 SSL 证书。但是,这听起来似乎不适用于您的情况。

答案2

一般来说,您不能就这样使用 SSL 进行基于名称的虚拟托管。

每个 SSL VirtualHost 需要一个 IP。

http://wiki.apache.org/httpd/NameBasedSSLVHosts

相关内容