Windows Server 2022 の IIS で HTTP/3 サポートを有効にする方法

Windows Server 2022 で IIS を使って HTTP/3 を有効化するのは、プラグアンドプレイとまではいきませんが、不可能ではありません。目標は、特に接続が不安定だったり低速だったりするユーザーにとって、ページの読み込み速度とセキュリティを向上させることです。また、ウェブサイトが QUIC 経由でハンドシェイクしているのを見るのも、なかなか良いものです。ただし、これを有効にするには、レジストリの調整、PowerShell コマンド、そして IIS の設定などが必要になります。これを正しく行うには、TLS 設定が適切であることや、ファイアウォール ルールが UDP トラフィックをブロックしていないことを確認するなど、少し手間がかかる場合があります。場合によっては、特定の設定で 1 回か 2 回の再起動が必要になることもありますが、最終的には、サポートされているブラウザーでサイトが HTTP/3 経由で提供されるはずです。

Windows Server 2022 IIS で HTTP/3 サポートを有効にする方法

レジストリでTLS 1.3を有効にする – もちろんWindowsでは難しいので

HTTP/3はTLS 1.3に依存しているため、まずTLS 1.3が有効になっていることを確認してください。レジストリの編集は面倒ですが、必須です。この操作には管理者権限が必要です。以下のコマンドで、クライアントとサーバーの両方でTLS 1.3を有効にできます。

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" /v Enabled /t REG_DWORD /d 1 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v Enabled /t REG_DWORD /d 1 /f

これらがインストールされたら、通常は再起動が必要になります。また、 SSL Labsや PowerShell コマンドなどのツールを使用して、TLS 1.3 がアクティブであることを再確認することをお勧めします。

レジストリコマンドを使用して IIS で HTTP/3 サポートを強化する

この部分は面白いです。IISにHTTP/3をサポートするよう指示するためのレジストリキーを追加します。

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters" /v EnableHttp3 /t REG_DWORD /d 1 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters" /v EnableAltSvc /t REG_DWORD /d 1 /f

新しいバージョンのWindowsでは、IISの設定オプションがGUIに表示される場合があります。表示されない場合は、レジストリを修正することをお勧めします。この設定は、後でツールやPowerShellで確認することをお勧めします。

QUIC暗号スイートを有効にする – PowerShellマジックでHTTP/3をサポートする

この部分は少し奇妙ですが、QUICをサポートするにはTLS暗号スイートを有効にする必要があります。管理者権限でPowerShellで以下を実行してください。

Enable-TlsCipherSuite -Name TLS_CHACHA20_POLY1305_SHA256 -Position 0

実行後、次のコマンドを実行してサポートが有効になっているかどうかを確認します。

(Get-TlsCipherSuite).Name | Select-String CHACHA

スイートが表示されれば問題ありません。表示されない場合は、Windows が変更を即座に適用しないことがあるため、PowerShell またはサーバーの再起動が必要になる場合があります。

ウェブサイトのレスポンスにHTTP/3ヘッダーを追加する

これは、サイトがHTTP/3をサポートしていることをブラウザに伝えるものです。IISでは、サイトバインディングに新しいヘッダーを作成してください(またはデフォルトのサイトを使用してください)。GUIまたはPowerShellで実行できます。ここでは、より柔軟なPowerShellの使い方をご紹介します。

Import-Module WebAdministration $siteName ="Default Web Site" $headerName="alt-svc" $headerValue='h3=":443"; ma=86400; persist=1' Add-WebConfigurationProperty -Filter "system.webServer/httpProtocol/customHeaders" -PSPath IIS:\Sites\$siteName -Name.-AtElement @{name=$headerName;value=$headerValue}

設定すると、IIS はそのヘッダーで応答し、可能な場合はブラウザに HTTP/3 を使用するように指示します。

QUICのUDPトラフィックがブロックされていないことを確認する – ファイアウォール関連

この部分は見落とされがちです。HTTP/3はUDPポート443で実行されるため、Windowsファイアウォールではこのトラフィックを許可するルールが必要です。「World Wide Web Services (QUIC Traffic-In)」ルールが有効になっているかどうかを確認してください。

Get-NetFirewallRule | ?{ $_. DisplayName -eq "World Wide Web Services (QUIC Traffic-In)" } | select name, enabled, status

無効になっている場合は、次のコマンドで有効にします。

Enable-NetFirewallRule -DisplayGroup "World Wide Web Services (QUIC Traffic-In)"

または、ルールが見つからない場合、UDP 用にポート 443 を開くための新しい受信 UDP ルールを作成する必要がある場合があります。

再起動して動作するかテストする

設定が完了したら、サーバーを再起動してください。復旧したら、ウェブサイトにアクセスし、ChromeまたはEdge( )でDevToolsを開き、 「ネットワーク」F12タブに移動して更新し、「プロトコル」列を確認してください。「h3」が表示されている場合は、サイトがHTTP/3で配信されています。新しいヘッダーがキャッシュまたはハードリフレッシュによって取得されるのを待っているだけの場合があるため、すぐに表示されない場合でも心配しないでください。

ええ、少し手間はかかりますが、QUIC経由でサイトのハンドシェイクが実行されるのを見るのはとても満足感があります。なぜうまくいくのかはよく分かりませんが、環境によっては再起動とレジストリの調整だけで済みます。重要なのは、TLS 1.3が有効になっていること、必要なレジストリキーが設定されていること、そしてファイアウォールルールが正しく設定されていることです。すべてが整っていれば、HTTP/3をサポートするブラウザ(EdgeやChromeなど)は自動的にHTTP/3の使用を開始します。