Apache Redirect& HTTPS

时间:2017-05-01 10:47:02

标签: apache ssl redirect virtualhost

我想我一次尝试做三件事,但我想:

  • example.com引导至example.com.au
  • example.com.au引导至www.example.com.au
  • 将HTTP直接发送到HTTP

即,所有四种变体都针对HTTPS版本。

以下是配置文件中的部分:

<VirtualHost *:80>
    ServerName example.com.au
    ServerAlias www.example.com.au example.com www.example.com
    ServerAdmin …
    Redirect permanent / https://www.example.com.au/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com.au:443
    ServerAlias example.com.au www.example.com example.com
    ServerAdmin …
    VirtualDocumentRoot /whatever/example.com/www
    CustomLog logs/example.log combined env=!dontlog

    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/www.example.com.au/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/www.example.com.au/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.example.com.au/chain.pem
</VirtualHost>

问题是虽然重定向似乎有效但证书似乎不适用。当我尝试在浏览器中打开以下内容(没有www)时:

https://example.com.au/

我收到以下消息:

The certificate is only valid for www.example.com.au

现在我认为重定向应该告诉浏览器它真的会https://www.example.com.au,但是:

  • 地址栏保持不变
  • 证书无效,大概是因为地址栏保持不变

问题是:如何配置虚拟主机以使用一个证书将这些变体重定向到SSL?

我的DNS服务器设置正确(所有名称都正确解析),LetsEncrypt正确且最新。只有域名已被更改以保护无辜者。

1 个答案:

答案 0 :(得分:0)

警告的原因是:您的浏览器在尝试访问https://example.com.au/时,无法相信301 Redirect回复确实来自example.com.au,因为没有证书中的主机名。

由于您已经在使用Let的加密证书,因此您只需将:443 VirtualHost拆分为4个独立的vhost,每个vhost都有自己的证书,然后配置其中3个重定向到{ {3}}(或者,如果可能的话,获得一个与所有需要的主机名匹配的证书)。