SSL 导致多个域上出现相同内容

SSL 导致多个域上出现相同内容

我已经设置了一个 Debian LAMP 服务器,用于托管多个网站。据我所知,我只能在其中一个网站上使用 SSL,如果我想在两个或更多网站上使用 SSL,我必须添加另一个 IP - 到目前为止一切顺利。

问题是,每当我输入https://siteone.com或时,https://sitetwo.com它总是显示来自的内容:https://siteone.com。我宁愿它显示一些错误消息或其他内容,但绝对不显示我的主要网站的内容(我希望 SSL 在那里工作)。

注意:我的 Debian 网络服务器使用 ispconfig 作为其控制面板。

答案1

确保正确设置虚拟主机,以便每个虚拟主机仅绑定到单个 IP 地址。基于 IP 的虚拟主机的 Apache 文档说你的虚拟主机应该类似于以下内容:

<VirtualHost 192.168.0.1:443>
ServerAdmin [email protected]
DocumentRoot /groups/smallco/www
ServerName smallco.example.com
ErrorLog /groups/smallco/logs/error_log
TransferLog /groups/smallco/logs/access_log
</VirtualHost>

<VirtualHost 192.168.0.2:443>
ServerAdmin [email protected]
DocumentRoot /groups/baygroup/www
ServerName baygroup.example.com
ErrorLog /groups/baygroup/logs/error_log
TransferLog /groups/baygroup/logs/access_log
</VirtualHost>

您的 apache 配置中列出的第一个虚拟主机是默认主机。在前两个虚拟主机之前添加一个虚拟主机,以确保您确实匹配虚拟主机,而不是盲目地落入第一个虚拟主机。以下是 IBM 提供的有关此类设置的更完整的文章:http://www-01.ibm.com/support/docview.wss?uid=swg21045922

答案2

答案3

如果 Stephen 的建议对您不太适用,那么请确保您的 apache 配置文件中还包含以下行:

NameVirtualHost *:443

此外,FRB 是对的。您可以在任意数量的虚拟机上使用 SSL。只需将 SSL 配置信息放入<VirtualHost></VirtualHost>代码块中即可。

类似这样(还请注意,使用命名主机时不需要绑定到特定 IP):

## SSL (HTTPS) PORT 443
Listen 443
NameVirtualHost *:443

LoadModule ssl_module modules/mod_ssl.so
SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

<VirtualHost *:443>
  ServerName host1.com

  SSLEngine on
  SSLOptions +StrictRequire
  SSLProtocol -all +TLSv1 +SSLv3
  SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
  SSLCertificateFile    /etc/httpd/ssl/host1.crt
  SSLCertificateKeyFile /etc/httpd/ssl/host1.key
  SSLVerifyClient none
  SSLProxyEngine off

  SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
  CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

  DocumentRoot /var/www/host1/

  <Directory "/var/www/host1/">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order Allow,deny
    Allow from all
  </Directory>

</VirtualHost>


<VirtualHost *:443>
  ServerName host2.com

  SSLEngine on
  SSLOptions +StrictRequire
  SSLProtocol -all +TLSv1 +SSLv3
  SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
  SSLCertificateFile    /etc/httpd/ssl/host2.crt
  SSLCertificateKeyFile /etc/httpd/ssl/host2.key
  SSLVerifyClient none
  SSLProxyEngine off

  SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
  CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

  DocumentRoot /var/www/host2/

  <Directory "/var/www/host2/">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order Allow,deny
    Allow from all
  </Directory>

</VirtualHost>

答案4

实际上,您可以在同一个 IP 地址上建立多个 SSL 站点,而无需使用 SNI。(主要)问题是您必须使用相同的证书,该证书必须具有所有必需的域作为主题备用名称。(这将使证书费用增加。)这意味着所有站点都属于同一组织。

Apache2 处理 SSL 分为两个阶段。第一阶段涉及检查 IP 地址的默认(第一个)虚拟主机块中是否存在“SSLEngine on”语句,然后启动 SSL 连接。第二阶段涉及检查 ServerName/ServerAlias 指令,直到识别出正确的虚拟主机。

因此,您实际上不需要在每个虚拟主机中重复 SSL* 指令,但它有助于引起人们的注意,让他们注意到它是一个 SSL 站点。(否则他们必须注意端口号。)

第二个问题是,每次 Apache 启动时,都会向 error_log 中添加一条警告。

相关内容