通过


在 DNS 服务器中通过 HTTPS 启用 DNS (预览版)

重要

Windows Server 上支持 DoH (DNS over HTTPS) 的 DNS 服务器目前处于预览版。 这些与预发行产品相关的信息在发布前可能进行重大修改。 Microsoft 不对此处提供的信息作任何明示或默示的担保。

本文介绍如何在 Windows Server 上运行的 DNS 服务器服务中通过 HTTPS(DoH)启用 DNS。

传统 DNS 流量未加密,这使得 DNS 查询容易被网络攻击者窃听、拦截和篡改。 如果需要保护客户端与 DNS 服务器之间的 DNS 通信,启用 DoH 会使用 HTTPS 加密该流量,防止未经授权的观察或篡改。

有关 DoH 工作原理的详细信息,请参阅 使用 DNS 通过 HTTPS 进行 DNS 加密

先决条件

在开始之前,请确保具备:

  • 安装了 2026-02 安全更新(KB5075899)或更高版本的 Windows Server 2025

  • 访问证书颁发机构(CA):

    • Microsoft企业证书颁发机构,带有已发布的证书模板

    • 第三方证书提供程序,例如 DigiCert、Let's Encrypt 或 Verisign
  • 配置为允许 DoH TCP 端口 443 上的入站连接的防火墙规则

  • 对托管 DNS 服务器服务的 Windows Server 的管理或等效访问权限

  • 若要在 DNS 服务器服务上启用基于 HTTPS 的 DNS,请在 Windows DNS Server 上使用 DoH 请求访问权限:公共预览版注册。 请求后,请按照收到的说明继续操作。

DoH 证书必须满足以下要求:

  • 增强型密钥用法扩展:必须包括服务器身份验证(1.3.6.1.5.5.7.3.1) 对象标识符

  • 主题或主题备用名称:具有主题备用名称(SAN)的签名证书,该证书具有与您配置的 DoH URI 模板匹配的完全限定域名或 IP 地址。

  • 私钥:必须存在于本地计算机的存储中,正确与证书关联,并且不得启用强私钥保护

  • 信任链:必须由 DNS 服务器和 DNS 客户端都信任的 CA 颁发

有关更复杂的证书设置,请参阅 证书和公钥 以及 使用证书

导入证书

如果服务器上已有证书,请转到 “绑定证书”。 否则,请将证书导入服务器。

  1. 将证书 .pfx 的文件(包含证书和私钥)放在托管 DNS 服务器的服务器上。

  2. 以管理员身份打开 PowerShell,并运行以下命令以导入证书,确保将 `<pfxpath>` 替换为 `.pfx` 文件的路径,并将 `<pfxpassword>` 替换为 `.pfx` 文件的密码:

    Import-PfxCertificate `
        -FilePath "<pfxpath>" `
        -CertStoreLocation "Cert:\LocalMachine\My" `
        -Password (Read-Host -AsSecureString "<pfxpassword>")
    
  3. 出现提示时,输入证书的密码。

  4. 若要验证证书是否已成功导入,请运行以下命令,将 <subject-name> 替换为证书的主题:

    Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -match "<subject-name>" }
    

绑定证书

导入证书后,将其绑定到服务器端口,以便 DNS 服务器可用于 HTTPS 连接。

  1. 通过运行以下命令生成新的 GUID 并将其存储在变量中:

    $guid = New-Guid
    
  2. 运行以下命令,检索证书并将其存储在变量中。 替换 <subject-name> 为证书的主题:

    $cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -match "<subject-name>" }
    
  3. 通过运行以下命令将证书绑定到服务器端口:

    netsh http add sslcert ipport=0.0.0.0:443 certhash=$($cert.Thumbprint) appid="{$guid}"
    

小窍门

若要让 DNS 服务器服务响应特定 IP 地址上的 DoH 流量而不是所有地址,请将 0.0.0.0 替换为您想要的 IP 地址。 IP 地址必须解析为证书 SAN 中包含的主机。 你还可以将 443 替换为其他端口号。

验证证书绑定

确认证书已正确绑定到正确的 IP 地址和端口。

  1. 运行以下命令以显示 SSL 证书绑定:

    netsh http show sslcert
    
  2. 验证输出是否显示 IP 地址和端口,以及证书哈希是否与指纹匹配。

配置防火墙规则

DoH 使用与未加密 DNS 不同的 TCP 端口,因此需要将防火墙配置为允许绑定证书时指定的端口上的入站流量。 默认情况下,DoH 使用 TCP 端口 443,除非你在 URI 模板和证书绑定步骤中指定了其他端口。

使用以下步骤将 Windows 防火墙配置为允许在配置的 DoH 端口上建立入站连接:

  1. 若要创建允许入站 DoH 流量的防火墙规则,请运行以下命令:

    New-NetFirewallRule -DisplayName "DNS over HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
    
  2. 运行以下命令验证防火墙规则是否已创建:

    Get-NetFirewallRule -DisplayName "DNS over HTTPS"
    

注释

如果将 DoH 配置为使用其他端口,请替换为 443 自定义端口号。 如果使用硬件防火墙或网络安全组,请确保它还允许同一端口上的入站 TCP 流量。

启用 DoH

绑定证书并配置防火墙规则后,请在 DNS 服务器上启用 DoH。

  1. 启用 DoH 并使用 Set-DnsServerEncryptionProtocol 命令设置 URI 模板。 将 dns.contoso.com 替换为存于您的证书 SAN 中的主机名(或 IP 地址):

    Set-DnsServerEncryptionProtocol -EnableDoh $true -UriTemplate "https://dns.contoso.com:443/dns-query"
    

    注释

    确保 URI 模板中的端口号与绑定证书时使用的端口号匹配。

  2. 重启 DNS 服务以应用更改:

    Restart-Service -Name DNS
    

验证 DoH 配置

通过验证客户端的配置和测试,测试 DoH 是否正常工作。

  1. 使用 Get-DnsServerEncryptionProtocol 命令验证服务器上的 DoH 配置:

    Get-DnsServerEncryptionProtocol
    
  2. 在服务器上打开 事件查看器 并导航到 应用程序和服务日志 > DNS 服务器

  3. 检查事件 ID 822,指示 DoH 服务已成功启动。

从客户端测试 DoH

若要确认 DoH 正常运行,请从支持 DoH 的客户端测试 DNS 解析。

  1. 将 DoH 客户端配置为使用你已配置的相同 URI 模板,以便为 DNS 服务器启用加密。 有关客户端配置步骤,请参阅通过 HTTPS 保护 DNS 客户端(DoH)。

  2. 在配置的 DoH 客户端中,使用 Resolve-DnsName 命令测试 DNS 解析。 将 contoso.com 替换为您想解析的域:

    Resolve-DnsName -Name contoso.com -Type A
    
  3. DNS 查询已成功解析。

要进一步验证 DoH 活动,请参阅后续步骤的文章以便在您的 DNS 服务器上监视 DoH。

后续步骤