本文介绍如何在Linux上运行适用于企业和教育的 Microsoft 连接缓存节点上验证 HTTPS 支持。
测试 HTTP 和 HTTPS 内容下载
在测试之前,需要确定客户端如何连接到连接的缓存服务器。 这是在 CSR 生成期间在证书的使用者可选名称 (SAN) 中配置的相同连接方法。
重要提示
在下面的所有命令中替换 [mcc-connection] 和[test-url]
确定 :[mcc-connection]
-
如果在
-sanIpCSR 中使用了: 使用 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://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]
-
如果在
-sanIpCSR 中使用了: 使用 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 problem, certificate subject name does not match
诊断测试: 以下命令使用 -k 标志完全跳过证书验证。 这会告知 curl 在不验证服务器的证书的情况下进行连接。 这样,就可以确定问题所在:证书或其他内容。
curl -v -k -o /dev/null "https://[mcc-connection]/[test-url]" --include -H "host:swda01-mscdn.manage.microsoft.com"
如果测试成功: 服务器和网络正常工作。 问题出在证书本身。 验证:
- SAN 配置与连接方法 (IP 地址或主机名) 匹配
- CA 根证书安装在客户端的受信任存储中
如果测试失败: 问题不是证书。 请参阅下面的 连接错误 。
证书吊销错误
症状: HTTPS 响应缓慢或超时
诊断测试: 以下命令使用 --ssl-no-revoke 标志跳过证书吊销列表 (CRL) 检查。 通常,客户端会联系 CA 的 CRL 分发点,以验证证书是否已吊销。 如果无法访问该终结点,则会导致速度变慢或超时。
curl -v --ssl-no-revoke -o /dev/null "https://[mcc-connection]/[test-url]" --include -H "host:swda01-mscdn.manage.microsoft.com"
如果测试成功: 当跳过吊销检查时,连接有效,这确认客户端无法访问 CRL 分发点。 检查防火墙是否允许访问证书中列出的 CRL URL。
如果测试失败: 问题不是吊销检查。 请参阅下面的 连接错误 。
连接错误
症状:Connection refused, Could 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 检查。