Apache:重写端口80和443 – 多个SSL虚拟主机设置

build立:

  • 通过使用具有不同端口号的虚拟主机(Apache侦听)来在单个IP上configuration多个SSL域,
  • Windows 2003上的Apache 2.2.8(对此没有评论)
  • 太多的Windows XP用户,所以SNI不是一个select

使用这种方法有可能是错误的,但现在可以使用。

虚拟主机设置:

# secure domain 1 <VirtualHost IP:443> SSL stuff specifying certificate etc. ServerName domain1.org </VirtualHost> # secure domain 2 <VirtualHost IP:81> SSL stuff for domain2.org ServerName domain2.org </VirtualHost> 

目标: domain2.org docroot中的一些文件夹需要安全。 我使用.htaccess文件将URL重写为端口81上的https:

 RewriteEngine On RewriteCond %{SERVER_PORT} !^81$ RewriteRule (.*) https://%{HTTP_HOST}:81%{REQUEST_URI} [R] 

假设我把.htaccess放在文件夹' secfolder '中。
访问http://domain2.org/secfolder将成功重写为https://domain2.org:81 / secfolder。


问题:在访问https://domain2.org/secfolder (不包含端口81)时,会使用来自第一个虚拟主机(domain1.org)的证书,并且由于该证书对于domain2无效,因此浏览器会抱怨该网站不安全。有机

我认为RewriteCond %{SERVER_PORT} !^81$也会将https://domain2.org重写为https://domain2.org:81但事实并非如此 。 在这种情况下,似乎.htaccess文件没有被使用。

在这一点上,我不知道如何将一个RewriteRule应用https://domain2.org 。 我尝试在domain1.org之前为端口443上的domain2创build一个额外的虚拟主机,但Apache似乎扼杀了这一点。 我希望你们有一个想法如何解决这个问题。 TIA。


编辑:有一个已被删除的答案,但它说:
“如果没有首先validation证书,并且由于证书是针对错误的域,则无法连接到服务器,因此无法redirect。 证书不匹配真的是行结束吗? 之后没有强制redirect/ URL重写?

请记住,当您与HTTPS连接到https://domain2.org (这实际上是https://domain2.org:443的连接)时,顺序大致&#x662F;

  1. 浏览器在端口443上打开连接到IP
  2. Apache将查找与IP:443组合相匹配的VirtualHost
  3. 在这种情况下,它finddomain1.org的VirtualHost
  4. Apache发送与该VirtualHost关联的SSL证书(即domain1.org的证书)
  5. [SSL协商的其余部分]
  6. 浏览器发送它的HTTP请求标题,包括Host:标题,告诉Apache它认为正在与哪个域交谈。
  7. 如果适用,则在这里发生对HTTP请求标头的mod_rewrite处理。

即当Apache决定发送哪个证书时,它还没有收到mod_rewrite用来做redirect的信息。

为了解决这个问题,你需要一个对两个域都有效的证书。 这可以是通配符证书(如果情况是domain1.example.com和domain2.example.com,为* .example.com获取证书),或者您可以尝试获取主题为“domain1 .org“,而是”domain2.org“的主题替代名称

无论哪种情况,您都需要在Apache主configuration文件中进行redirect – 如果它位于domain2.org的DocumentRoot中的.htaccess文件中,那么使用domain1.org的VirtualHost的请求将转到不同的DocumentRoot目录,永远不会看到文件。

您是否拥有某种通配符证书,或者您是否尝试在同一IP上使用不同的SSL证书托pipe不同的域?

如果不是通配符,则无法执行此操作,因为每个IP地址只能使用一个SSL证书,而不pipe其端口是什么端口。