【问题标题】:SSL redirect/rewriting [duplicate]SSL重定向/重写[重复]
【发布时间】:2021-08-27 17:16:28
【问题描述】:

我有一个问题似乎无法找到答案,因此希望有人能提供帮助。

我有一个动态网站,有 300 多个唯一域指向它。

最近需要使用 SSL 来保护它,我需要使用 UCC/SAN 证书。我只想将每个域的 www 版本放在证书上,以节省证书上的金钱和空间(似乎 Safari 只允许每个证书 318 个条目)。

我的问题是如何将流量重定向到 www。因此,如果请求的 URL 以 https 开头,则它与证书匹配。

示例:我使用 http 到 https 并使用 IIS 的 URL 重写添加 www 前缀

"http://www.example.com" goes to "https://www.example.com"
"http://example.com" goes to "https://www.example.com"
"https://example.com" fails because of certificate name mismatch

我为我的无知道歉,但似乎浏览器在允许重定向发生之前验证了证书?有什么我不知道的方法吗?

任何帮助将不胜感激!

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core ssl


    【解决方案1】:

    如您所见,您可以使用 IIS URL 重写模块完成大部分操作。

    以下规则可以添加到您的web.config

    <system.webServer>
      <rewrite>
        <rules>
           <rule name="RedirectToSecure" stopProcessing="true">
              <match url="(.*)" />
              <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTPS}" pattern="off" />
                <add input="{HTTP_HOST}" pattern="^www\..*$" negate="true"/>
             <conditions >
              <action type="Redirect" url="https://www.{HTTP_HOST}/{R:1}" redirectType="Permanent" />
          </rule>
        </rules>
      </rewrite>
    </system.webServer>
    

    此规则有一个匹配,它捕获 URL 路径上的所有内容,然后它有两个条件,第一个检查请求不在 HTTPS 上,第二个检查主机是否包含 www.,两者其中有匹配触发规则,最后该操作会将用户永久重定向到所请求 URL 的安全 www 版本。

    然后,您可以拥有此规则的另一个副本,其中仅包含将 www 域的非 SSL 版本重定向到 HTTPS 的第一个条件(也只需从操作中删除 www. 部分)。

    但是,您会因为不包括非www 版本的证书而受到轻微阻碍。浏览器确实会确认服务器为请求发送的证书与请求的主机匹配,如果不匹配,则会向用户抛出警告和错误。如果没有涵盖非www 版本的证书,就没有办法解决这个问题。

    显然 SAN 证书可能是比 300 多个通配符更便宜的选择,但是根据您的托管解决方案,另一个需要考虑的选择是自动化 Let's Encrypt 证书 - 这将允许您为 root 和 www 生成和安装证书子域根据需要。然而,这必须自动化,因为这些证书在 3 个月后到期,并且为 300 多个域生成它们将非常耗费人力。

    【讨论】:

      【解决方案2】:

      您可以使用反向代理来实现这一点。

      从IIS 主页,选择或双击该站点。在名为 Actions 的右侧边栏上,单击 Bindings。为https 添加绑定。将主机名设置为example.com。您必须为其选择 SSL 证书。还要指定物理路径。让路径成为你路径上的一个新文件夹,让我们调用f1。

      之后,下一步是将流向 http://example.com 的流量重定向到 http://www.example.com。您将使用 URL 重写模块来执行此操作。

      从网站主页选择URL Rewrite。 URL Rewrite 页面出现。从右侧边栏中选择Add Rule,然后选择Reverse Proxy。将入站规则指定为:https://www.example.com。取消选中Enable SSL Offloading。

      单击“确定”,您将返回规则。双击新创建的入站规则。 Edit Inbound Rule 页面出现。在Conditions 部分中,从列表中删除{CACHE_URL} 条目。下到Rewrite URL编辑框,修改值为:https://www.example.com/{R:1}

      从右侧边栏中单击Apply。这应该足以配置 URL 重写。

      现在从左侧边栏中单击Application Pools,选择相关池并将其Identity 更改为LocalSystem。

      转到您创建的文件夹,在本例中为 f1。在其属性下,添加一个名为IUSR 的用户。用户位于本地计算机上,因此如果计算机名称为 JUNIT,请选择 JUNIT 作为位置。

      您现在可以测试配置。告诉我进展如何。

      【讨论】:

        猜你喜欢
        • 2011-05-25
        • 2016-12-20
        • 2011-01-27
        • 2012-07-30
        • 1970-01-01
        • 2013-05-11
        • 2014-08-08
        • 2012-02-06
        • 2015-03-25
        相关资源
        最近更新 更多