通过


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

本文提供有关在 Windows 主机上运行的 Microsoft Connected Cache for Enterprise 和 Education 节点上启用 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
    
    输出示例 含义
    TCP 0.0.0.0:443 0.0.0.0:0 正在侦听 端口 443 处于打开状态,正在侦听传入连接。 继续执行 HTTPS 设置。
    无输出 端口 443 未使用或未侦听。 继续执行 HTTPS 设置。
    TCP [你的 IP]:443 [远程 IP]:[端口] 已建立 端口 443 正在连接中主动使用。 在连接缓存可以使用端口 443 之前,需要停止冲突的服务。
  • 验证公司代理配置

    例如,如果防火墙或公司代理 (通过 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 文件所需的名称
    -RunTimeAccountName 运行连接缓存软件的帐户。 这应该是一个 PowerShell 变量,其中包含要指定为连接缓存运行时帐户的帐户的用户名。 例如, $User = "LocalMachineName\Username" 对于本地用户帐户。 如果使用组托管服务帐户 (gMSA) ,则应将其格式设置为 "Domain\Username$"
    -mccLocalAccountCredential 连接的缓存运行时帐户的 PowerShell 凭据对象。 仅当使用本地用户帐户、域用户帐户或服务帐户时,才需要这样做。 命令 $myLocalAccountCredential = Get-Credential 可用于将凭据检索 GUI 排队。

    注意

    如果使用 gMSA 运行时帐户,请使用 参数 -RunTimeAccount 而不是 -RunTimeAccountName

    下一版本的 Windows 安装程序中将修复此差异。

    使用者参数

    参数 必需 说明 示例
    -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 基础结构来签署其 CSR。 如果需要使用公共 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 证书

注意

importCert 脚本当前 不支持

  • 使用 gMSA 运行时帐户在 Windows Server 2022 或 Windows Server 2025 上运行的缓存节点。
  • -RunTimeAccountName在受支持的 Windows 版本上使用 gMSA 时, (改用 -RunTimeAccount) 。

这两个问题将在下一版本的 Windows 安装程序中得到解决。

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

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

    基本语法

      .\importCert.ps1 [Required Parameters]
    

    必需参数

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

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

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

    • 文件格式: ImportCert_YYYYMMDD-HHMMSS.log
    • 例: ImportCert_20251201_143022.log是创建于 2025 年 12 月 1 日下午 2:30:22 的文件
  4. 确保外部客户端可以通过端口 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]
    

    必需参数

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

    注意

    如果使用 gMSA,请使用 参数 -RunTimeAccount 而不是 -RunTimeAccountName。 此差异很快将在脚本中得到修复。

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

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

后续步骤