次の方法で共有


DNS サーバーで HTTPS 経由で DNS を有効にする (プレビュー)

Important

Windows Server 上の DNS サーバーの DNS over HTTPS (DoH) は現在プレビュー段階です。 この情報は、リリース前に大幅に変更される可能性があるプレリリース製品に関連しています。 Microsoft は、ここに記載されている情報に関して、明示または黙示を問わず、一切の保証を行いません。

この記事では、Windows Server で実行されている DNS サーバー サービスで HTTPS (DoH) 経由で DNS を有効にする方法について説明します。

従来の DNS トラフィックは暗号化されず、ネットワーク上の攻撃者による傍受、傍受、操作に DNS クエリが公開されます。 クライアントと DNS サーバー間の DNS 通信を保護する必要がある場合、DoH を有効にすると、HTTPS を使用してそのトラフィックが暗号化され、承認されていない観察や改ざんが防止されます。

DoH のしくみの詳細については、「 HTTPS 経由の DNS を使用した DNS 暗号化」を参照してください。

[前提条件]

開始する前に、次のことを確認します。

  • 2026-02 セキュリティ更新プログラム (KB5075899) 以降がインストールされている Windows Server 2025

  • 証明機関 (CA) へのアクセス:

    • 公開された証明書テンプレートを使用した Microsoft Enterprise 証明機関

    または

    • 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) オブジェクト識別子を含める必要があります

  • サブジェクトまたはサブジェクトの別名: 構成済みの DoH URI テンプレートと一致する完全修飾ドメイン名または IP アドレスを持つサブジェクト代替名 (SAN) を持つ署名付き証明書

  • 秘密キー: ローカル コンピューターのストアに存在し、証明書に正しく関連付けられている必要があり、強力な秘密キー保護が有効になっていない必要があります

  • 信頼チェーン: DNS サーバーと DNS クライアントの両方が信頼する CA によって発行される必要があります

より複雑な証明書のセットアップについては、「証明書と公開キー」および「証明書の操作」を参照してください。

証明書のインポート

サーバーに既に証明書がある場合は、 証明書のバインドに移動します。 それ以外の場合は、証明書をサーバーにインポートします。

  1. DNS サーバーをホストしているサーバーに、証明書の .pfx ファイル (証明書と秘密キーの両方を含む) を配置します。

  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 では、URI テンプレートと証明書のバインド手順で別のポートを指定しない限り、TCP ポート 443 が使用されます。

次の手順を使用して、構成された DoH ポートで受信接続を許可するように Windows ファイアウォールを構成します。

  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. 構成したのと同じ URI テンプレートを使用して、DNS サーバーの暗号化を使用するように DoH クライアントを構成します。 クライアントの構成手順については、「 HTTPS 経由の DNS クライアントのセキュリティ保護 (DoH)」を参照してください。

  2. 構成された DoH クライアントから、 Resolve-DnsName コマンドを使用して DNS 解決をテストします。 解決したいドメインにcontoso.comを置き換えてください。

    Resolve-DnsName -Name contoso.com -Type A
    
  3. DNS クエリは正常に解決されます。

DoH アクティビティをさらに確認するには、次の手順の記事に従って、DNS サーバーで DoH を監視します。

次のステップ