配置自定义域名

创建 API 管理 (APIM) 实例时,Azure 会将其分配到 azure-api.cn 的一个子域(例如 apim-service-name.azure-api.cn)。 不过,你可以使用自己的域名(例如 contoso.com)公开你的 APIM 终结点。本教程演示了如何将现有的自定义 DNS 名称映射到 Azure API 管理实例公开的终结点。

Warning

想要使用证书固定改进其应用程序安全性的客户必须使用自定义域名和他们管理的证书,而不是使用默认证书。 改为固定默认证书的客户将硬依赖于他们不控制的证书属性,建议不要这样做。

先决条件

若要执行本文中所述的步骤,必须具有:

  • 一个有效的 Azure 订阅。

    如果没有 Azure 订阅,可在开始前创建一个试用帐户

  • 一个 APIM 实例。 有关详细信息,请参阅创建 Azure API 管理实例

  • 一个由你拥有的自定义域名。 必须单独获取要使用的自定义域名并将其托管在 DNS 服务器上。 本主题没有说明如何托管自定义域名。

  • 必须具有有效的带有公钥和私钥 (.PFX) 的证书。 使用者或使用者可选名称 (SAN) 必须与域名匹配(这使得 APIM 可以通过 SSL 安全地公开 URL)。

可用性

Important

此功能在 API 管理的“高级”、“标准”、“基本”和“开发人员”层中可用。

使用 Azure 门户设置自定义域名

  1. Azure 门户中导航到你的 APIM 实例。

  2. 选择“自定义域和 SSL”。

    可以为许多终结点分配自定义域名。 当前有以下终结点可用:

    • 代理(默认值为:<apim-service-name>.azure-api.cn),
    • 门户(默认值为:<apim-service-name>.portal.azure-api.cn),
    • 管理(默认值为:<apim-service-name>.management.azure-api.cn),
    • SCM(默认值为:<apim-service-name>.scm.azure-api.cn)。

    Note

    可以更新所有终结点或者更新其中的一部分。 通常情况下,客户会更新代理(此 URL 用来调用通过 API 管理公开的 API)和门户(开发人员门户 URL)。 管理SCM 终结点由 APIM 客户在内部使用,因此很少会为其分配自定义域名。

  3. 选择要更新的终结点。

  4. 在右侧窗口中,单击“自定义”。

    • 在“自定义域名”中,指定要使用的名称。 例如,api.contoso.com。 还支持通配符域名(例如 *.domain.com)。
    • 证书中,从密钥保管库中选择证书。 如果证书受密码保护,你还可以上传有效的 .PFX 文件并提供其密码

    Tip

    如果使用 Azure 密钥保管库来管理自定义域 SSL 证书,请确保该证书作为证书而不是机密插入到密钥保管库中。 如果证书设置为“自动轮换”,API 管理会自动选取最新版本。

  5. 单击“应用”。

    Note

    分配证书的过程可能需要 15 分钟或更久,这取决于部署规模。 开发人员 SKU 有故障时间,基本和更高版本的 SKU 没有故障时间。

APIM 代理服务器在 TLS 握手中如何通过 SSL 证书进行响应

调用时使用 SNI 标头的客户端

如果客户为代理配置了一个或多个自定义域,则 APIM 可以响应来自自定义域(例如 contoso.com)以及默认域(例如 apim-service-name.azure-api.cn)的 HTTPS 请求。 APIM 根据服务器名称指示 (SNI) 标头中的信息使用合适的服务器证书进行响应。

调用时不使用 SNI 标头的客户端

如果客户使用不发送 SNI 标头的客户端,则 APIM 会根据以下逻辑创建响应:

  • 如果服务仅为代理配置了一个自定义域,则默认证书是已颁发给代理自定义域的证书。
  • 如果服务为代理配置了多个域(只有高级层才支持),则客户可以指定哪个证书应当作为默认证书。 若要设置默认证书,defaultSslBinding 属性应当设置为 true ("defaultSslBinding":"true")。 如果客户未设置该属性,则默认证书是颁发给 *.azure api.net 上托管的默认代理域的证书。

对包含大型有效负载的 PUT/POST 请求的支持

当在 HTTPS 中使用客户端证书时,APIM 代理服务器支持包含大型有效负载的请求(例如,有效负载 > 40 KB)。 若要防止服务器的请求被冻结,客户可以在代理主机名上设置属性 "negotiateClientCertificate": "true"。 如果该属性设置为 true,则在进行 SSL/TLS 连接时将在交换任何 HTTP 请求之前请求证书。 由于该设置是在代理主机名级别应用的,因此,所有连接请求都会请求客户端证书。 客户可以为代理配置最多 20 个自定义域(只有高级层才支持)并避开此限制。

后续步骤

升级和缩放你的服务