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 / 问题 / 579109
Accepted
Piedone
Piedone
Asked: 2014-03-01 16:17:43 +0800 CST2014-03-01 16:17:43 +0800 CST 2014-03-01 16:17:43 +0800 CST

具有 IIS 的同一服务器上的 SNI 和通配符 SSL 证书

  • 772

我想托管一个网站,该网站应该监听子域(例如 sub.domain.com)以及多个网站,这些网站使用 IIS 和 SSL 位于二级域(例如 domain2.com、domain3.com)下。

对于具有子域的网站,我有一个通配符证书 (*.domain.com),我也有专门用于其他网站的证书(domain2.com 和 domain3.com)。

这样的设置是否可以托管在同一个 IIS 上(如果重要,在 Azure 云服务 Web 角色中)?

问题正是 titobf在这里解释的:理论上,为此我们需要使用 SNI 进行绑定,为 domain2/3.com 指定主机,然后为 *.domain.com 指定一个包含 * 主机的包罗万象的网站。但在实践中,无论如何设置绑定,如果万能网站在它上面,它也会接收到 domain2/3.com 的所有请求(尽管据说它只是作为最后的手段才匹配)。

任何帮助,将不胜感激。

仍未解决

不幸的是,我无法解决这个问题:它似乎只能以极其复杂的方式解决,比如创建一个位于 IIS 和互联网之间的软件(基本上是一个防火墙)并修改传入的请求(在 SSL 握手发生之前! ) 以允许该场景。我相当有信心这对于 IIS 是不可能的,无论如何,即使是本机模块也不可能。

我必须澄清一下:我们使用 Azure 云服务,因此我们有一个进一步的限制,即我们不能使用多个 IP 地址(请参阅:http: //feedback.azure.com/forums/169386-cloud-services-web-and -worker-role/suggestions/1259311-multiple-ssl-and-domains-to-one-app )。如果您可以将多个 IP 指向您的服务器,那么您就不会遇到此问题,因为您也可以为 IP 创建绑定,并且这些绑定将与通配符绑定一起使用。更具体地说,您需要一个用于通配符站点的 IP(但由于您现在有一个单独的 IP,因此您不必配置通配符主机名绑定)和所有其他非通配符站点的另一个 IP。

实际上,我们的解决方法是使用非标准 SSL 端口 8443。因此 SNI 绑定实际上绑定到此端口,因此它与其他绑定一起工作。不好,但对我们来说是一种可接受的解决方法,直到您可以将多个 IP 用于 Web 角色。

现在的非工作绑定

第一个 https 绑定是带有简单证书的 SNI,第二个不是 SNI,带有通配符证书。

http 站点和 SNI https 站点一样有效,但是带有通配符绑定的站点会给出“HTTP 错误 503。服务不可用”。(没有任何进一步的信息,没有失败的请求跟踪或事件日志条目)。 绑定

终于让它基本上工作了

像 Tobias 描述的那样启用 ETW 跟踪日志表明根本错误如下:

请求(请求 ID 0xF500000080000008)被拒绝,原因是:UrlGroupLookupFailed。

据我了解,这意味着 http.sys 无法将请求路由到任何可用的端点。

检查已注册的端点netsh http show urlacl表明确实有为端口 443 注册的东西:

Reserved URL            : https://IP:443/
    User: NT AUTHORITY\NETWORK SERVICE
        Listen: Yes
        Delegate: No
        SDDL: D:(A;;GX;;;NS)

删除它netsh http delete urlacl url=https://IP:443/最终启用了我的 SSL 绑定。

iis
  • 3 3 个回答
  • 13978 Views

3 个回答

  • Voted
  1. Best Answer
    Tobias J.
    2014-11-06T23:10:05+08:002014-11-06T23:10:05+08:00

    巴里斯是对的!在 IP:PORT 绑定(例如:100.74.156.187:443)上配置的 SSL 证书在 http.sys 中始终优先!所以解决方法如下:

    不要为您的 wildcard-fallback-certificate 配置 IP:443 绑定,而是为其配置 *:443 绑定(* 表示“所有未分配”)。

    如果您已经在 Azure 云服务 SSL 端点上配置了通配符证书(就像我一样),您必须将 Azure 云服务运行时 (IISconfigurator.exe) 创建的 SSL 绑定从 IP:PORT 更改为 *:PORT。我在我的网络角色的OnStart中调用以下方法:

    public static void UnbindDefaultSslBindingFromIp()
    {
        Trace.TraceInformation(">> IISTenantManager: Unbind default SSL binding from IP");
        using (var serverManager = new Microsoft.Web.Administration.ServerManager())
        {
            try
            {
                var websiteName = string.Format("{0}_Web", Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CurrentRoleInstance.Id);
                var site = serverManager.Sites[websiteName];
                var defaultSslBinding = site.Bindings.Single(b => b.IsIPPortHostBinding && b.Protocol == "https");
                defaultSslBinding.BindingInformation = string.Format("*:{0}:", defaultSslBinding.EndPoint.Port);
                serverManager.CommitChanges();
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.ToString());
            }
        }
    }
    

    以下屏幕截图显示了我们云服务的工作配置。请不要对非标准端口感到困惑。屏幕截图来自模拟的云服务。

    工作 IIS 配置

    还要提一件事:不要将所有绑定更改为 *,因为 HTTP(端口 80)绑定仅适用于部署的云服务中的 IP:PORT 绑定。其他东西绑定到 IP:80,所以 *:80 不起作用,因为 * 代表“所有未分配”,并且 IP 已经在 http.sys 中的其他位置分配。

    • 6
  2. bariscaglar
    2014-10-30T15:16:41+08:002014-10-30T15:16:41+08:00

    确保您的包罗万象的绑定不是 IP:Port 类型。当 HTTPS 绑定存在 IP:Port 绑定但不需要 SNI 时,该绑定将始终优先。对于您的包罗万象的情况,请使用 *:Port 绑定(* 是所有未分配的)。

    • 4
  3. CamW
    2014-10-03T00:35:51+08:002014-10-03T00:35:51+08:00

    IIS 确实支持 SNI,即使在 azure 云服务 Web 角色中也是如此,尽管您无法通过门户访问配置,并且如果您在部署后在盒子上执行此操作,它将在您的下一次部署中被擦除。解决方案是自动化配置。在这里查看详细信息:

    http://www.vic.ms/microsoft/windows-azure/multiples-ssl-certificates-on-windows-azure-cloud-services/

    • 1

相关问题

  • 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