为服务总线命名空间配置最低 TLS 版本

Azure 服务总线命名空间允许客户端使用 TLS 1.0 及更高版本发送和接收数据。 若要强制实施更严格的安全措施,可以将服务总线命名空间配置为要求客户端使用较新版本的 TLS 发送和接收数据。 如果服务总线命名空间需要最低版本的 TLS,则使用较旧版本发出的任何请求都会失败。 有关此功能的概念信息,请参阅针对发送到服务总线命名空间的请求强制实施必需的最低版本的传输层安全性 (TLS)

可以使用 Azure 门户或 Azure 资源管理器 (ARM) 模板配置最低 TLS 版本。

警告

自 2025 年 2 月 28 日起,Azure 服务总线将不再支持 TLS 1.0 和 TLS 1.1。 所有服务总线部署的最低 TLS 版本将为 1.2。

重要

2024 年 10 月 31 日,将为 AMQP 流量启用 TLS 1.3。 TLS 1.3 已启用 HTTPS 流量。 由于依赖旧版本的 Proton-J,Java 客户端可能会在应用 TLS 1.3 时遇到问题。 有关更多详细信息,请阅读“更改 Java 客户端以支持使用 TLS 1.3 与 Azure 服务总线和 Azure 事件中心通信

在 Azure 门户中指定最低 TLS 版本

在 Azure 门户中的“高级”选项卡上创建服务总线命名空间时,可以指定最低 TLS 版本。

屏幕截图显示的页面用于在创建命名空间时设置最低 TLS 版本。

此外,你还可以在“配置”页上为现有命名空间指定最低 TLS 版本。

屏幕截图显示的页面用于为现有命名空间设置最低 TLS 版本。

使用 Azure CLI

若要创建命名空间并将最低 TLS 版本设置为 1.2,请使用 az servicebus namespace create 命令,并将 --min-tls 设置为 1.2

az servicebus namespace create \
    --name mynamespace \
    --resource-group myresourcegroup \
    --min-tls 1.2

使用 Azure PowerShell

若要创建命名空间并将最低 TLS 版本设置为 1.2,请使用 New-AzServiceBusNamespace 命令,并将 -MinimumTlsVersion 设置为 1.2

New-AzServiceBusNamespace `
    -ResourceGroup myresourcegroup `
    -Name mynamespace `
    -MinimumTlsVersion 1.2

创建模板以配置最低 TLS 版本

若要为服务总线命名空间配置最低 TLS 版本,请将 MinimumTlsVersion 版本属性设置为 1.0、1.1 或 1.2。 使用 Azure 资源管理器模板创建服务总线命名空间时,MinimumTlsVersion 属性默认设置为 1.2,除非显式设置为另一个版本。

注意

使用 2022-01-01-preview 之前的 api-version 创建的命名空间的 MinimumTlsVersion 值为 1.0。 此行为是先前的默认行为,并且仍存在以实现向后兼容性。

以下步骤说明了如何在 Azure 门户中创建模板。

  1. 在 Azure 门户中,选择“创建资源”。

  2. 在“搜索市场”中,输入“自定义部署”,然后按 ENTER。

  3. 依次选择“自定义部署(使用自定义模板进行部署)(预览版)”、“创建”、“在编辑器中生成自己的模板”。

  4. 在模板编辑器中,粘贴以下 JSON 以创建新命名空间,并将最低 TLS 版本设置为 TLS 1.2。 请记得将尖括号中的占位符替换为你自己的值。

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {},
        "variables": {
            "serviceBusNamespaceName": "[concat(uniqueString(subscription().subscriptionId), 'tls')]"
        },
        "resources": [
            {
            "name": "[variables('serviceBusNamespaceName')]",
            "type": "Microsoft.ServiceBus/namespaces",
            "apiVersion": "2022-01-01-preview",
            "location": "chinanorth",
            "properties": {
                "minimumTlsVersion": "1.2"
            },
            "dependsOn": [],
            "tags": {}
            }
        ]
    }
    
  5. 保存模板。

  6. 指定资源组参数,然后选择“查看 + 创建”按钮以部署模板,并创建配置了 MinimumTlsVersion 属性的命名空间。

注意

更新服务总线命名空间的最低 TLS 版本后,最多可能需要 30 秒才能完全传播更改。

配置最低 TLS 版本需要 Azure 服务总线资源提供程序的 api-version 2022-01-01-preview 或更高版本。

检查命名空间所需的最低 TLS 版本

若要检查服务总线命名空间所需的最低 TLS 版本,可以查询 Azure 资源管理器 API。 需要有持有者令牌才能针对 API 进行查询,可以通过执行以下命令来使用 ARMClient 进行检索。

$env:ARMCLIENT_ENV="MOONCAKE"
.\ARMClient.exe login
.\ARMClient.exe token <your-subscription-id>

拥有持有者令牌后,可以将以下脚本与 REST 客户端等工具结合使用来查询 API。

@token = Bearer <Token received from ARMClient>
@subscription = <your-subscription-id>
@resourceGroup = <your-resource-group-name>
@namespaceName = <your-namespace-name>

###
GET https://management.chinacloudapi.cn/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.ServiceBus/namespaces/{{namespaceName}}?api-version=2022-01-01-preview
content-type: application/json
Authorization: {{token}}

响应应如下所示,其中在属性下设置了 minimumTlsVersion。

{
  "sku": {
    "name": "Premium",
    "tier": "Premium"
  },
  "id": "/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group-name>/providers/Microsoft.ServiceBus/namespaces/<your-namespace-name>",
  "name": "<your-namespace-name>",
  "type": "Microsoft.ServiceBus/Namespaces",
  "location": "China North",
  "tags": {},
  "properties": {
    "minimumTlsVersion": "1.2",
    "publicNetworkAccess": "Enabled",
    "disableLocalAuth": false,
    "zoneRedundant": false,
    "provisioningState": "Succeeded",
    "status": "Active"
  }
}

测试客户端的最低 TLS 版本

若要测试服务总线命名空间必需的最低 TLS 版本是否禁止使用较旧版本发出的调用,可以将客户端配置为使用较旧版本的 TLS。 若要详细了解如何将客户端配置为使用特定的 TLS 版本,请参阅为客户端应用程序配置传输层安全性 (TLS)

当客户端使用不满足为命名空间配置的最低 TLS 版本的 TLS 版本访问服务总线命名空间时,Azure 服务总线返回错误代码 401(未经授权)和一条消息,指示不允许所使用的 TLS 版本对此服务总线命名空间发出请求。

注意

为服务总线命名空间配置最低 TLS 版本时,会在应用程序层强制实施该最低版本。 尝试在协议层确定 TLS 支持的工具可能会返回 TLS 版本,此外,直接针对服务总线命名空间终结点运行时,可能会返回所需的最低版本。

后续步骤

有关详细信息,请参阅以下文档。