AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 765402
Accepted
end-user
end-user
Asked: 2016-03-23 10:37:03 +0800 CST2016-03-23 10:37:03 +0800 CST 2016-03-23 10:37:03 +0800 CST

IIS 8.5 上的 HSTS 和重定向

  • 772

我无法让我的 IIS 8.5 服务器按预期运行。我正在尝试使用单独的网络服务器在同一个 IP 地址上托管两个域,都在 https 上。

自然地,IIS 被设置为我的“主要”网络服务器,监听 80 和 443。这里设置了一个带有 ssl 证书的域。我正在使用“URL Rewrite”模块将不安全的流量发送到安全端。另一个域设置为虚拟主机,并使用“HTTP 重定向”功能将流量发送到第二个网络服务器。对于第二个网络服务器,我有 Apache 2.4 在 8443 上监听,也带有证书。

所以,简单地说: http://example1.com -> URL Rewrite -> https://example1.com https://example1.com -> 从 IIS 解析和提供服务

http://example2.com -> HTTP 重定向 -> https://example2.com:8443 https://example2.com:8443 -> 由 Apache 解析和服务

我的问题是在浏览器(FF 或 Chrome)访问http://example2.com并被重定向到https://example2.com:8443之后,后续访问总是转到https://example2.com(没有端口) . 这失败了,因为在 ssl 握手期间,浏览器获得了 example1 的证书。

我已经追踪到这两个依赖 HSTS 的浏览器。一旦我清除了 HSTS 缓存,他们就能够再次找到正确的站点(使用端口)。

我怎样才能让这个设置顺利工作?我在 Apache 的 conf 中没有看到任何设置 HSTS 的内容,所以我认为它在 IIS 重定向中。我查看了这个在 IIS 上讨论 HSTS 的答案max-age,认为我可以修改 Doug 的建议以将其设置为零以防止它被设置,但它似乎不起作用。

解决方案:

根据下面的建议,最好的解决方案是在 IIS 中托管两个域,绑定 SSL 证书并选中绑定中的“需要服务器名称指示”框。我必须对所有共享 IP 的域执行此操作。然后我可以创建一个反向代理(需要 URL 重写和应用程序请求路由模块),它将流量传递给 Apache 托管的实例。

iis
  • 1 1 个回答
  • 4361 Views

1 个回答

  • Voted
  1. Best Answer
    Barry Pollard
    2016-03-30T13:37:05+08:002016-03-30T13:37:05+08:00

    你不能用你当前的设置。

    HSTS RFC声明如下:

    UA 必须用“https”[RFC2818] 替换 URI 方案,并且

    如果 URI 包含显式端口组件“80”,则 UA 必须将端口组件转换为“443”,或者

    如果 URI 包含不等于“80”的显式端口组件,则必须保留端口组件值;否则,

    如果 URI 不包含显式端口组件,则 UA 不得添加一个。

    注意:这些步骤确保 HSTS 策略适用于通过 HSTS 主机的任何 TCP 端口的 HTTP。

    所以去http://www.example2.com:8443将保留端口并重定向到https://www.example2.com:8443但你不能从http://www.example2.com做同样的事情。

    所以你有以下选择:

    1. 停止在 Apache 中为 example2.com 使用 HSTS,只在 IIS 中为 example1.com 使用它

    2. 使用一台主服务器监听端口 80 和 443,并将 example.com 的请求代理到端口 8443 上的另一台服务器。这更干净,因为不需要用户在非标准端口(如 8443)上使用。但是,由于您使用相同的 IP 地址,您要么必须使用称为服务器名称标识或 SNI 的进程(XP/IE8 等旧版浏览器不支持)才能通过相同的 IP 地址正确地为相同的主机提供服务HTTPS,或为两个站点使用相同的证书作为解决方法(请参阅此处的答案以了解其工作原理)。

    • 0

相关问题

  • 2003 Server企业版不能运行ASP.NET应用程序?

  • 启用集成 Windows 身份验证时,ASP(经典)在哪个帐户下运行?

  • 是否有一种简单的方法可以生成有关 IIS 中“死”文件的报告?

  • IIS 7 中的 URL 重写

  • 对于 ASP.Net 应用程序,Windows 64 位相对于 32 位的主要优势是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve