在 Windows 上启用对 Microsoft 联网缓存的 HTTPS 支持

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

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

必备条件

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

  • 缓存节点在 GA 软件版本上

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

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

  • 文档客户端连接方法

    记下客户端用于连接连接缓存服务器 (FQDN) 的 IP 地址或主机名。 在生成 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 检查) 截获发往 Connected Cache 服务器的 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 证书算法:RSA、、ECED25519、或ED448
    -keySizeOrCurve 对于 RSA:密钥大小 (204830724096) 。 对于 EC:曲线名称 (prime256v1secp384r1) 。 对于 ED25519 和 ED448:不需要密钥大小。
    -csrName CSR 文件所需的名称
    -mccRunTimeAccount 运行连接缓存软件的帐户。 这应该是一个 PowerShell 变量,其中包含要指定为连接缓存运行时帐户的帐户的用户名。 例如, $User = "LocalMachineName\Username" 对于本地用户帐户。 如果使用组托管服务帐户 (gMSA) ,则应将其格式设置为 "Domain\Username$".
    -mccLocalAccountCredential 连接缓存运行时帐户的 PowerShell 凭据对象。 仅当使用本地用户帐户、域用户帐户或服务帐户时才需要这样做。 该命令 $myLocalAccountCredential = Get-Credential 可用于将凭据检索 GUI 排队。

    注意

    -mccRunTimeAccount 参数在 Connected Cache Windows 应用程序 v1.0.26.0 及更高版本中可用。 如果使用的是早期的 v1.0.24.0 应用程序,请用于本地用户、域用户和服务帐户,或-RunTimeAccount用于-RunTimeAccountName组托管服务帐户 (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 脚本参数的更多详细信息和基于场景的示例,请参阅 HTTPS on Windows 参考

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

    如果遇到错误,请在脚本输出中指定的文件夹中找到带时间戳的文件 GenerateCsr.log 。 查找以“Check logs for detailed error information:”开头的输出行。目录以 (...\Certificates\logs) 结尾。

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

    Certificates 文件夹的位置在脚本输出中指定,以“CSR 文件创建时间:...”开头。 目录以 (...\Certificates\certs) 结尾。

签署企业社会责任

  1. 选择证书颁发机构 (CA) 对 CSR 进行签名。

    重要提示

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

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

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

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

    签名的证书必须是 PEM 编码的 X.509 证书,并且扩展名为 .crt (Base64 文本,以-----BEGIN CERTIFICATE-----) 开头。 DER/二进制证书必须转换为 PEM - 有关如何转换为 .crt 格式,请参阅 Windows 上的 HTTPS 参考

    注意

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

    注意

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

    注意

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

    示例

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

    如果遇到错误,请在脚本输出中指定的文件夹中找到带时间戳的文件 ImportCert.log 。 查找以“You can find logs here: ...”

    • 文件格式: 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 通信,请执行以下步骤。 此过程不会删除 Certificates 文件夹中的任何内容,包括 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 参数在 Connected Cache Windows 应用程序 v1.0.26.0 及更高版本中可用。 如果使用的是早期的 v1.0.24.0 应用程序,请用于本地用户、域用户和服务帐户,或-RunTimeAccount用于-RunTimeAccountName组托管服务帐户 (gMSA) 。

    示例

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

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

后续步骤