【问题标题】:Apache virtual host redirect issue [duplicate]Apache虚拟主机重定向问题[重复]
【发布时间】:2022-06-18 03:01:06
【问题描述】:

我正在尝试在我的服务器上托管一个站点 (vultr) 该站点是活动的,并且我有一个来自 Namecheap 的域名指向它。我使用了 Let's Encrypt 并为 www.example.com 和 example.com 设置了 https。

我也设置了它,所以当您输入 ip 时,如:http://111.222.33.444 它会指向安全域名。所以到目前为止一切都按我的预期工作,但后来我遇到了这个问题:如果有人输入 https:///111.222.33.444,就会出现不受信任的网站警告页面。我也希望这也直接指向https://example.com

我有用于 http 和 https 的 .conf 文件。我可能在这些文件中也有太多垃圾,所以可能需要更有效地编写这些。

home.conf:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/home
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.example.com [OR]
    RewriteCond %{SERVER_NAME} =example.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>
        ServerName 111.222.33.444
        ServerAlias 111.222.33.444
        UseCanonicalName Off
        Redirect "/" "https://www.example.com/"
        #ErrorDocument 403 "Sorry, direct IP access not allowed."
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

home-le-ssl.conf:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/home
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

<VirtualHost *:443>
   ServerName 111.222.33.444
   ServerAlias 111.222.33.444
   UseCanonicalName Off
   Redirect "/" "https://www.example.com"
   ErrorDocument 403 "Sorry, direct IP access not allowed."
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
   SSLEngine on
   <FilesMatch "\.(cgi|shtml|phtml|php)$">
     SSLOptions +StdEnvVars
   </FilesMatch>
   <Directory /usr/lib/cgi-bin>
     SSLOptions +StdEnvVars
   </Directory>
   SSLCertificateFile    /etc/letsencrypt/live/example.com/fullchain.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem             
   Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

【问题讨论】:

  • 至于“...任何建议...”,这不是本网站的目的。 codereview.stackexchange.com 有一个姊妹网站,但我不知道这是否会成为主题。
  • 我的问题与该帖子所指的不同。其他网站如何保护自己?我只是想保护我的网站,以便如果用户输入 ip 最终结果是安全域,我不想要 ip 的 ssl 证书,因为我不希望 ip 成为访问网站的一种方式,我想要它重定向。
  • 评论展开回答。

标签: apache


【解决方案1】:

这与Apache配置无关; SSL 证书必须对您请求的 URL 有效。从浏览器的角度来看,遵循重定向响应需要对证书的信任与从响应中呈现某些内容完全相同。

从安全的角度来看,假设我拦截了您的 wi-fi 信号并通过重定向到 https://www.my-evil-hacking-site.com(或不太明显的东西)来响应对 https://www.facebook.com 的请求。如果浏览器在不检查我提供的证书的情况下遵循该重定向,我已经成功地破坏了证书验证提供的安全性。

从技术角度来看,请注意,TLS(以前称为 SSL)连接是在在发出任何 HTTP 请求之前协商的,而您尝试发出的重定向是HTTP 响应。实际上必须对 TLS 进行扩展,以允许将请求的主机名作为协商的一部分进行传输,以允许一个 IP 地址上的多个虚拟主机。如果浏览器在这个阶段拒绝了服务器提供的证书,它将永远不会发送 HTTP 请求让您响应。

因此,就浏览器而言,您需要出示对 https:///111.222.33.444 有效的证书。请参阅:Is it possible to have SSL certificate for IP address, not domain name?,答案是“是的,但很少见”。还要注意Let's Encrypt do not issue such certificates.

这种情况很少见的原因是,任何人通常都没有理由首先尝试浏览 https:///111.222.33.444。重定向大多只是为了方便用户,证书检查是为了保护用户,而不是保护服务器;所以把它作为一个证书错误一般都可以。

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 2016-04-14
    • 2016-07-16
    • 2015-02-22
    • 2018-07-08
    • 2015-10-06
    • 2011-05-20
    • 2019-04-16
    相关资源
    最近更新 更多