在 Windows 上为Microsoft连接缓存启用 HTTPS 支持

本文提供有关在 Windows 主机上运行的适用于企业和教育的 Microsoft 连接缓存节点上启用 HTTPS 支持的说明。

安装过程需要在主机上生成证书签名请求 (CSR) ,使用企业或公共 PKI 对 CSR 进行签名,然后导入回主机计算机。

必备条件

在设置 HTTPS 功能之前,请确保满足以下要求:

  • 缓存节点使用 GA 软件版本

    1. 打开Azure 门户并导航到托管缓存节点的“连接缓存企业版”资源。
    2. “缓存节点管理”下,找到要启用 HTTPS 的缓存节点。
    3. 验证节点是否为 GA 版本 - 应在“ 已迁移 ”列中显示“是”或“N/A”。
    4. 如果不是正式版 (“否”,请在“ 迁移 ”列) 选择缓存节点,导航到“ 部署 ”选项卡,然后按照说明重新部署连接的缓存。
  • 访问证书颁发机构 (CA)

    你需要访问企业 PKI 或公共 CA。 如果使用企业 PKI,检查组织向 CA 提交 CSR 的要求。

  • 文档客户端连接方法

    请注意客户端用于连接到连接的缓存服务器的 IP 地址或主机名 (FQDN) 。 在生成 CSR 的过程中,此值将用作 SAN) 输入 (使用者可选名称。

  • 确保端口 443 可用性

    若要与连接的缓存建立 HTTPS 连接,需要在主机上提供端口 443。 运行以下命令以检查:

    netstat -an | findstr :443
    

    查看输出:

    • 无输出 - 端口 443 未使用。 继续执行 HTTPS 设置。
    • 输出包含 LISTENING 例如, () TCP 0.0.0.0:443 0.0.0.0:0 LISTENING — 端口 443 处于打开状态,正在侦听传入连接。 继续执行 HTTPS 设置。
    • 输出包含 ESTABLISHED 例如, () TCP 192.168.1.10:443 10.0.0.5:52674 ESTABLISHED — 端口 443 正由另一个服务主动使用。 在连接缓存可以使用端口 443 之前,识别并停止冲突服务。

    提示

    若要使用端口 443 标识服务,请运行 netstat -ano | findstr :443 以在最后一列中查找进程 ID (PID) 。 然后运行 tasklist /fi "pid eq <PID>" (将 替换为 <PID> 实际数字) 以查看进程名称。 使用端口 443 的常见服务包括 IIS、其他 Web 服务器和 VPN 软件。 停止或重新配置有冲突的服务,然后再继续。

  • 验证公司代理配置

    例如,如果防火墙或公司代理 (通过 TLS 检查) 拦截到连接的缓存服务器的 HTTPS 流量,则无论证书配置如何,证书验证都将始终失败。

有关任何先决条件的详细信息,请参阅 Windows 上的 HTTPS 参考页

(CSR) 生成证书签名请求

重要提示

每个缓存节点都需要自己的 CSR/证书 (无法共享) :

  • 使用一致的命名:mcc-node1.company.com、mcc-node2.company.com 等。
  • 记录哪个证书属于哪个节点
  • 通配符证书不起作用。 出于安全目的,用于 HTTPS 连接到连接缓存的 CSR/证书与每个缓存节点唯一关联。
  1. 以管理员身份打开 PowerShell 并导航到包含其 PowerShell 脚本的“连接缓存”文件夹。

    运行以下命令,导航到此连接的缓存脚本文件夹:

       cd (deliveryoptimization-cli mcc-get-scripts-path)
    
  2. 配置 的参数 generateCsr.ps1 ,并使用指定的值运行脚本。

    基本语法

       .\generateCsr.ps1 [Required Parameters] [Subject Parameters] [SAN Parameters]
    

    必需参数

    参数 说明
    -algo 证书算法: RSAECED25519ED448
    -keySizeOrCurve 对于 RSA:密钥大小 (204830724096) 。 对于 EC:曲线名称 (prime256v1secp384r1) 。 对于 ED25519 和 ED448:不需要密钥大小。
    -csrName CSR 文件所需的名称
    -mccRunTimeAccount 运行连接缓存软件的帐户。 这应该是一个 PowerShell 变量,其中包含要指定为连接缓存运行时帐户的帐户的用户名。 例如, $User = "LocalMachineName\Username" 对于本地用户帐户。 如果使用组托管服务帐户 (gMSA) ,则应将其格式设置为 "Domain\Username$"
    -mccLocalAccountCredential 连接的缓存运行时帐户的 PowerShell 凭据对象。 仅当使用本地用户帐户、域用户帐户或服务帐户时,才需要这样做。 命令 $myLocalAccountCredential = Get-Credential 可用于将凭据检索 GUI 排队。

    注意

    参数 -mccRunTimeAccount 在连接缓存 Windows 应用程序 v1.0.26.0 及更高版本中可用。 如果使用较早的 v1.0.24.0 应用程序,请使用 -RunTimeAccountName 本地用户、域用户和服务帐户,或 -RunTimeAccount 用于组托管服务帐户 (gMSA) 。

    使用者参数

    参数 必需 说明 示例
    -subjectCommonName 证书的公用名 "localhost", "example.com"
    -subjectCountry 双字母国家/地区代码 "US", "CA", "GB"
    -subjectState 省/市/自治区/直辖市/自治区 "WA", "TX", "Ontario"
    -subjectOrg 组织名称 "MyCompany", "ACME Corp"

    警告

    SAN 配置对于证书验证至关重要。 证书必须与客户端连接到连接的缓存的方式完全匹配,否则客户端会绕过缓存节点。

    例如,如果客户端通过 IP 地址 192.168.1.100 进行连接,但证书只有 -sanDns "server.local",证书验证将失败。

    使用者可选名称 (至少一个必需的)

    参数 说明 示例
    -sanDns DNS 名称 (逗号分隔) "localhost,example.com,api.example.com"
    -sanIp IP 地址 (逗号分隔) "127.0.0.1,192.168.1.100"
    -sanUri URI (逗号分隔) "https://example.com,http://localhost"
    -sanEmail Email地址 (逗号分隔) "admin@example.com,user@domain.com"
    -sanRid 已注册的 ID (逗号分隔)
    -sanDirName 目录名称 (逗号分隔)
    -sanOtherName 其他名称 (逗号分隔)

    有关 CSR 脚本参数的更多详细信息和基于方案的示例,请参阅 Windows 上的 HTTPS 参考

  3. 验证 CSR 生成过程是否已成功完成。

    如果遇到错误,请在脚本输出中指定的文件夹中找到带时间戳 GenerateCsr.log 的文件。 查找以“检查日志以获取详细错误信息”开头的输出行:目录以 (...\Certificates\logs) 结尾。

    • 文件格式: GenerateCsr_YYYYMMDD-HHMMSS.log
    • 例子: GenerateCsr_20251201_143022.log是创建于 2025 年 12 月 1 日下午 2:30:22 的文件
  4. 在主机上的 “证书”文件夹中 找到生成的 CSR 文件,并在必要时传输该文件

    在脚本输出中指定 “证书”文件夹 的位置,从“创建于...”的 CSR 文件开始。 目录以 (...\Certificates\certs) 结尾。

签署 CSR

  1. 选择证书颁发机构 (CA) 以签署 CSR。

    重要提示

    CA 签名必须与客户端受信任的根存储中的根证书匹配。

    • 企业 PKI:大多数客户使用其组织的内部 PKI 基础结构来签署 CSR。 请与 IT 或安全团队联系,了解将 CSR 提交到内部 CA 的过程。

    • 公共 CA:如果没有企业 PKI,可以使用公共 CA。 以下资源可帮助你入门:

  2. 将 CSR 提交到所选的 CA 并保存已签名的证书。

    已签名证书必须采用 X.509 编码的 .crt 格式。 如果 CA 提供其他格式,检查 Windows 上的 HTTPS 参考,了解如何转换为 .crt 格式。

    注意

    连接的缓存 当前不支持密码保护格式 (.pfx、.p12、.p7b) 。 作为证书自动化路线图的一部分,将立即添加对这些的支持。

  3. 验证签名证书的格式是否正确。

    确认 PEM 编码:

    Get-Content "xxxx.crt" | Select-String "BEGIN CERTIFICATE"
    

    预期成功输出:

    -----BEGIN CERTIFICATE-----
    
  4. 将已签名的证书移动到 Windows 主机上的 “证书”文件夹

    这将是在生成 CSR 后最初找到的同一文件夹: (...\Certificates\certs) 。

    注意

    不共享私钥,连接缓存仅需要签名证书。

导入已签名 TLS 证书

  1. 以管理员身份打开 PowerShell 并导航到包含其 PowerShell 脚本的“连接缓存”文件夹。

  2. 配置 的参数 importCert.ps1 ,并使用指定的值运行脚本。

    基本语法

      .\importCert.ps1 [Required Parameters]
    

    必需参数

    参数 说明
    -certName 带或不带 .crt 扩展名的已签名 TLS 证书的完整文件名 ()
    -mccRunTimeAccount 运行连接缓存软件的帐户。 这应该是一个 PowerShell 变量,其中包含要指定为连接缓存运行时帐户的帐户的用户名。 例如, $User = "LocalMachineName\Username" 对于本地用户帐户。 如果使用组托管服务帐户 (gMSA) ,则应将其格式设置为 "Domain\Username$"
    -mccLocalAccountCredential 连接的缓存运行时帐户的 PowerShell 凭据对象。 仅当使用本地用户帐户、域用户帐户或服务帐户时,才需要这样做。 例如,$myLocalAccountCredential = Get-Credential

    注意

    参数 -mccRunTimeAccount 在连接缓存 Windows 应用程序 v1.0.26.0 及更高版本中可用。 如果使用较早的 v1.0.24.0 应用程序,请使用 -RunTimeAccountName 本地用户、域用户和服务帐户,或 -RunTimeAccount 用于组托管服务帐户 (gMSA) 。

    注意

    v1.0.24.0 连接缓存 Windows 应用程序不支持importCert.ps1使用 gMSA 运行时帐户在 Windows Server 2022 或 Windows Server 2025 上运行。 使用 v1.0.26.0 或更高版本应用程序在这些环境中运行此脚本。

    例子

      .\importCert.ps1 `
        -mccRunTimeAccount $myLocalAccountCredential.Username `
        -mccLocalAccountCredential $myLocalAccountCredential `
        -certName "myTlsCert.crt"
    
  3. 验证导入过程是否已成功完成。

    如果遇到错误,请在脚本输出中指定的文件夹中找到带时间戳 ImportCert.log 的文件。 查找以“可在此处找到日志:...”开头的输出行

    • 文件格式: ImportCert_YYYYMMDD-HHMMSS.log
    • 例子: ImportCert_20251201_143022.log是创建于 2025 年 12 月 1 日下午 2:30:22 的文件
  4. 通过运行 ShowCertDetails.ps1 脚本验证是否已导入正确的证书。

    注意

    ShowCertDetails.ps1 脚本从 Windows 部署应用程序 v1.0.26 开始提供。

    .\ShowCertDetails.ps1
    

    此脚本显示当前导入到缓存节点的 TLS 证书的证书指纹和到期日期。

  5. 确保外部客户端可以通过端口 443 访问连接的缓存。

    注意

    在配置端口转发之前,请再次验证端口 443 是否可用: netstat -an | findstr :443

    转发端口 443 流量

    使用以下命令将流量从 Windows 主机桥接到连接的缓存容器:

     $ipFilePath = Join-Path ([System.Environment]::GetEnvironmentVariable("MCC_INSTALLATION_FOLDER", "Machine")) "wslIp.txt"
     $ipAddress = (Get-Content $ipFilePath | Select-Object -First 1).Trim()
     netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=$ipAddress
    

    这会设置端口代理,以便端口 443 上的传入流量重定向到容器的内部 IP。

    在防火墙中打开端口 443

    即使端口转发已到位,Windows 防火墙也可能阻止端口 443 上的传入或传出流量。 使用以下命令确保 HTTPS 流量可以自由地流入和流出连接的缓存。

     [void](New-NetFirewallRule -DisplayName "WSL2 Port Bridge (HTTPS)" -Direction Inbound -Action Allow -Protocol TCP -LocalPort "443")
     [void](New-NetFirewallRule -DisplayName "WSL2 Port Bridge (HTTPS)" -Direction Outbound -Action Allow -Protocol TCP -LocalPort "443")
    

有关如何进一步验证证书导入的说明,请参阅 Windows 上的 HTTPS 验证页

禁用 HTTPS 支持

如果需要将连接的缓存还原为仅限 HTTP 的通信,请执行以下步骤。 此过程不会删除“证书”文件夹中的任何内容,包括 CSR 文件、证书和日志。

  1. 以管理员身份打开 PowerShell 并导航到 PowerShell 脚本文件夹。

  2. 配置 的参数 disableTls.ps1 ,并使用指定的值运行脚本。

    基本语法

      .\disableTls.ps1 [Required Parameters]
    

    必需参数

    参数 说明
    -mccRunTimeAccount 运行连接缓存软件的帐户。 这应该是一个 PowerShell 变量,其中包含要指定为连接缓存运行时帐户的帐户的用户名。 例如, $User = "LocalMachineName\Username" 对于本地用户帐户。 如果使用组托管服务帐户 (gMSA) ,则应将其格式设置为 "Domain\Username$"
    -mccLocalAccountCredential 连接的缓存运行时帐户的 PowerShell 凭据对象。 仅当使用本地用户帐户、域用户帐户或服务帐户时,才需要这样做。 例如,$myLocalAccountCredential = Get-Credential

    注意

    参数 -mccRunTimeAccount 在连接缓存 Windows 应用程序 v1.0.26.0 及更高版本中可用。 如果使用较早的 v1.0.24.0 应用程序,请使用 -RunTimeAccountName 本地用户、域用户和服务帐户,或 -RunTimeAccount 用于组托管服务帐户 (gMSA) 。

    例子

      .\disableTls.ps1 `
        -mccRunTimeAccount $myLocalAccountCredential.Username `
        -mccLocalAccountCredential $myLocalAccountCredential `
    
  3. 验证禁用过程是否已成功完成。

  4. 禁用 HTTPS 后,HTTP 请求应正常工作,而 HTTPS 请求应失败。 有关如何测试此验证的说明,请参阅 Windows 上的 HTTPS 验证页

后续步骤