通过


验证 Linux 上Microsoft连接缓存的 HTTPS 配置

本文提供有关如何在 Linux 上运行适用于企业和教育的 Microsoft 连接缓存节点上验证 HTTPS 支持的说明。

测试 HTTP 和 HTTPS 内容下载

在测试之前,需要确定客户端如何连接到连接的缓存服务器。 这是在 CSR 生成期间在证书的使用者可选名称 (SAN) 中配置的相同连接方法。

重要提示

在下面的所有命令中替换 [mcc-connection][test-url]

确定 :[mcc-connection]

  • 如果在 -sanIp CSR 中使用了: 使用 IP 地址 (示例: 192.168.1.100)
  • 如果在 CSR 中使用 -sanDns 了: 使用主机名 (示例: mcc-server.contoso.com)

[test-url]是测试Intune Win32 应用程序的完整路径:ee344de8-d177-4720-86c1-a076581766f9/070a8fd4-79a7-42c8-b7c8-9883253bb01a/c7b1b825-88b2-4e66-9b15-ff5fe0374bc6.appxbundle.bin

以下 curl 命令同时测试 HTTP 和 HTTPS 内容检索:

  • HTTPS 测试:

    curl -v -o /dev/null "https://[mcc-connection]/[test-url]" --include -H "host:swda01-mscdn.manage.microsoft.com"
    

    预期成功输出:

    * Connected to [your-server] ([ip-address]) port 443 (#0)
    * TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    * Server certificate: [your-certificate-subject]
    < HTTP/1.1 200 OK
    < Content-Length: [file-size]
    
  • HTTP 测试:

    curl -v -o /dev/null "http://[mcc-connection]/[test-url]" --include -H "host:swda01-mscdn.manage.microsoft.com"
    

    预期成功输出:

    * Connected to [your-server] ([ip-address]) port 80 (#0)
    < HTTP/1.1 200 OK
    < Content-Length: [file-size]
    

服务端验证

在 Linux 主机计算机上执行以下测试:

  • 使用 wget 测试连接性:

    wget --server-response --spider --header="host: swda01-mscdn.manage.microsoft.com" "https://[mcc-connection]/[test-url]"
    

    预期结果:HTTP/1.1 200 OK 指示成功的 HTTPS 连接。

  • 验证证书详细信息:

    echo | openssl s_client -connect [mcc-connection]:443 -servername [mcc-connection] 2>/dev/null | openssl x509 -text -noout
    

    预期结果: 证书详细信息(包括使用者、颁发者和 SAN 值)应与配置匹配。

  • 检查容器状态和日志:

    # Check if the Connected Cache container is running
    sudo docker ps | grep mcc
    
    # View recent container logs for HTTPS activity
    sudo docker logs --tail 50 $(sudo docker ps -q --filter ancestor=mcr.microsoft.com/mcc/linux)
    

    预期结果: 容器应处于“已启动”状态,日志应显示 TLS/SSL 活动且不会出现错误。

  • 测试 SSL/TLS 握手:

    在不验证证书的情况下测试 SSL/TLS 握手:

        # Basic connection test
        openssl s_client -connect [mcc-server]:443
    
        # Test with SNI (Server Name Indication)
        openssl s_client -connect [mcc-server]:443 -servername [hostname]
    
        # View certificate details during connection
        echo | openssl s_client -connect [mcc-server]:443 2>/dev/null | openssl x509 -noout -text
    

客户端验证

在客户端设备上运行以下命令, (而不是 Linux 主机) 。

前提: 确保主机通过策略成为目标。 将连接的缓存 IP 地址 (“DOCacheHost”策略) 的值更新为与你的环境相关的任何内容:

$parentKeyPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization"
if (!(Test-Path $parentKeyPath))
  {
     New-Item -Path $parentKeyPath -ItemType RegistryKey -Force -ErrorAction Stop | Out-Null
  }
Set-ItemProperty -Path $parentKeyPath -Name "DOCacheHost" -Value "[mcc-connection]" -ErrorAction Stop
  • 通过 HTTPS 从连接的缓存请求 Teams 应用下载:

    Add-AppxPackage "https://statics.teams.cdn.office.net/production-windows-x64/enterprise/webview2/lkg/MSTeams-x64.msix"
    

    或者

    Add-AppxPackage "https://installer.teams.static.microsoft/production-windows-x64/25177.2002.3761.5185/MSTeams-x64.msix"
    

    预期结果: 下载完成且没有错误,应比典型的 Internet 下载更快。

  • 检查内容是否实际上正在缓存 (而不仅仅是回退到 CDN) :

    Get-DeliveryOptimizationStatus | Select-Object DownloadMode, TotalBytesDownloaded, BytesFromCacheServer
    

    预期结果:BytesFromCacheServer 应大于 0,指示缓存成功。

  • 如果连接的缓存 Linux 服务器 Windows 客户端,请从这些计算机中测试以下内容:

    # Test TCP connection
    Test-NetConnection -ComputerName [mcc-server] -Port 443
    
    # Test HTTPS connection
    Invoke-WebRequest -Uri "https://[mcc-server]/" -UseBasicParsing
    
    # View certificate details
    $cert = [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
    Invoke-WebRequest -Uri "https://[mcc-server]/"
    
  • 测试端口 443 是否可访问:

        # Using telnet
        telnet [mcc-server-ip] 443
    
        # Using nc (netcat)
        nc -zv [mcc-server-ip] 443
    
        # Using nmap (if installed)
        nmap -p 443 [mcc-server-ip]
    

疑难解答

如果在验证过程中遇到以下任何常见错误,请使用以下故障排除方法:

重要提示

在下面的所有命令中替换 [mcc-connection][test-url]

确定 :[mcc-connection]

  • 如果在 -sanIp CSR 中使用了: 使用 IP 地址 (示例: 192.168.1.100)
  • 如果在 CSR 中使用 -sanDns 了: 使用主机名 (示例: mcc-server.contoso.com)

[test-url]是测试Intune Win32 应用程序的完整路径:ee344de8-d177-4720-86c1-a076581766f9/070a8fd4-79a7-42c8-b7c8-9883253bb01a/c7b1b825-88b2-4e66-9b15-ff5fe0374bc6.appxbundle.bin

证书验证错误

症状:SSL certificate problemcertificate subject name does not match

快速测试:

curl -v -k -o /dev/null "https://[mcc-connection]/[test-url]" --include -H "host:swda01-mscdn.manage.microsoft.com"

如果测试成功: 证书存在验证问题。 验证:

  • SAN 配置与连接方法匹配
  • CA 根证书安装在客户端的受信任存储中

如果测试失败: 请参阅下面的 连接错误

证书吊销错误

症状: HTTPS 响应缓慢或超时

快速测试:

curl -v --ssl-no-revoke -o /dev/null "https://[mcc-connection]/[test-url]" --include -H "host:swda01-mscdn.manage.microsoft.com"

如果测试成功: 无法访问分发点的 CA 证书吊销列表 (CRL) 。 检查防火墙是否允许访问 CRL URL。

如果测试失败: 请参阅下面的 连接错误

连接错误

症状:Connection refusedCould not resolve host

对于 HTTPS 连接错误:

  • 验证是否已正确配置防火墙规则

  • 检查是否有其他服务正在使用端口 443:

    sudo ss -tulpn | grep :443
    
  • 验证连接的缓存容器是否正在运行:

    sudo docker ps | grep mcc
    

对于 HTTP 连接错误: 验证连接的缓存服务是否正在运行以及端口 80 是否可访问

sudo ss -tulpn | grep :80

对于 DNS 解析问题: 验证主机名解析和网络连接

nslookup [mcc-connection]
# OR
dig [mcc-connection]

公司代理干扰

症状: 尽管配置正确,证书验证仍失败。

解决 方案: 确保公司代理不会拦截到已连接缓存服务器的 HTTPS 流量。 请考虑禁用内部连接缓存流量的 TLS 检查。

其他资源