WindowsでTLS 1.2を有効にしてセキュリティを強化する方法
この TLS 1.2 のことは時々ちょっと面倒です。古いバージョンの Windows を扱っている場合、またはアプリとサーバーの通信が安全であることを確認しようとしている場合、それは必ずしも簡単ではありません。基本的に、ほとんどの最新の Windows (10、11、Server 2016/2019/2022 など) は、デフォルトで TLS 1.2 が有効になって出荷されます。これは良いことです。ただし、Windows 7 や Server 2008 などの古いバージョンを使用している場合は、更新プログラムをインストールし、レジストリ設定を微調整してから再起動するという、少し余分な作業を行う必要があります。また、一部のセットアップでは、特にこれらのプロトコルに依存する Outlook や PowerShell などのアプリを保護しようとしている場合、Windows が必要以上にわかりにくくしているように感じます。このガイドでは、レジストリ ハックや PowerShell コマンドなど、TLS 1.2 を完全に有効にしてエラーなしで動作させるために必要なことについて説明します。
Windows 7 および Server 2008 R2 で TLS 1.2 サポートを修正する方法
Windowsが最新であることを確認し、必要な更新プログラムをインストールする
- まず、Windows 7 に Service Pack 1 がインストールされていることを確認します。コントロール パネル > システムとセキュリティ > システムに移動して確認できます。
- 次に、 Microsoft Update カタログから更新プログラムKB3140245をダウンロードします。これは、これらの古い OS で TLS 1.2 を有効にする前に必要な重要なパッチです。
- インストール後、MicrosoftEasyFix51044.msiを入手してください。このファイルは、Windows 7/2008R2/2012 で TLS 1.2 のサポートを有効にするレジストリエントリを追加します。これらの更新だけでは、すべてのアプリで TLS 1.2 が完全に有効化されない場合があります。そのため、以下のレジストリ編集を行います。
- すべてインストールが完了したら、マシンを再起動してください。レジストリの変更を有効にするには、再起動が必要です。
設定によっては、アップデートが最初の試みで必ずしも「適用」されない場合があり、レジストリの調整を手動で実行する必要がある場合があります。ただし、Outlookへの接続に失敗したり、ブラウザでSSLエラーが発生したりするなどのエラーが発生する場合は、通常、これらの手順で解決できます。
レジストリの調整により TLS 1.2 を手動で有効にする
これがまさに核心部分です。レジストリを編集して、Windows にデフォルトで TLS 1.2 を使用するように指示します。WinHTTP などのアプリやシステムコンポーネントは、安全な接続をネゴシエートするためにこれらの設定に依存しているため、これは重要です。
- を押して入力し、レジストリ エディターを開きます。Win + R
regedit - HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\に移動します。
- 存在しない場合は、 2 つの新しいキー ( ClientとServer )を作成します。
- 両方の中に、次の DWORD (32 ビット) 値を追加します。
- デフォルトで無効= 0
- 有効= 1
これにより、Windows は TLS 1.2 をデフォルト (クライアント側) とサーバー接続の両方で許可するようになります。
WinHTTP アプリ(PowerShell や一部の古いブラウザなど)で TLS 1.2 を明示的に使用するには、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttpに、 DefaultSecureProtocolsというレジストリ DWORD を追加し、値を 0 に設定する必要があります。64 ビットマシンの場合は、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttpでも同じ操作を繰り返してください。0x00000A00
DefaultSecureProtocolsのさまざまな値は少し混乱しますが、ここでは問題ありません。
0x00000A0– SSL 3.0 と TLS 1.0 のみを許可します(これは望ましくない動作です)0x0000AA0– SSL 3.0 および TLS 1.0 に加えて TLS 1.1 および 1.2 も許可します0x00000A00– TLS 1.1と1.2のみを許可0x00000800– TLS 1.2のみ。これが今必要なことです
レジストリの変更を自動化する PowerShell スクリプト
もちろん、レジストリを手動で編集するのは面倒で、タイプミスも起こりやすいです。そこで、必要なエントリをすべて作成するPowerShellスクリプトを作成しました。
$reg32bWinHttp = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" $reg64bWinHttp = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" $regWinHttpDefault = "DefaultSecureProtocols" $regWinHttpValue = "0x00000800" $regTLS12Client = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" $regTLS12Server = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" $regTLSDefault = "DisabledByDefault" $regTLSValue = "0x00000000" $regTLSEnabled = "Enabled" $regTLSEnableValue = "0x00000001" # Create registry keys and set values New-ItemProperty -Path $reg32bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD New-ItemProperty -Path $reg64bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Force New-Item -Path $regTLS12Client -Force New-Item -Path $regTLS12Server -Force New-ItemProperty -Path $regTLS12Client -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD New-ItemProperty -Path $regTLS12Client -Name $regTLSEnabled -Value $regTLSEnableValue -PropertyType DWORD New-ItemProperty -Path $regTLS12Server -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD New-ItemProperty -Path $regTLS12Server -Name $regTLSEnabled -Value $regTLSEnableValue -PropertyType DWORD
管理者のPowerShellウィンドウでこれを実行します。実行後、再起動は必須です。これにより、WinHTTPを利用するほとんどのアプリでTLS 1.2が有効になります。
.NET アプリケーションで TLS 1.2 を有効にする
はい、Windowsのレジストリを有効にするだけでは不十分です。多くのアプリ(PowerShellやOutlookなど)は. NET Framework上に構築されており、TLS 1.2を使用するにはレジストリの調整も必要です。古いバージョンの. NET(2.0や3.5など)の場合は、以下の値を設定する必要があります。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727] "SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] "SchUseStrongCrypto"=dword:00000001
新しい. NET (4.x など) の場合は、次のように同じ操作を行います。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001
. NET 4.6以降の場合は、SchUseStrongCryptoレジストリエントリも1に設定されていることを確認してください。これにより、PSGalleryなどのリポジトリはTLS 1.2以降のみを受け入れるようになったため、PowerShellはエラーなく接続できるようになります。
これらの調整を行わないと、一部のセキュアサービスへの接続時に「URIからダウンロードできません」や「パッケージソースを解決できません」といったエラーが発生し、PowerShellで非常に奇妙な動作をする可能性があります。これは、PowerShellが長年にわたりデフォルトでTLS 1.0を試行していたためです。
GUIツールの使用: IISCrypto
レジストリ編集が面倒に感じる場合は、IISCryptoという無料ツールがあります。これはシンプルなGUIで、TLSバージョンの有効化/無効化やSchannel設定の調整が可能です。必要なプロトコルにチェックを入れたり外したりして、「適用」をクリックするだけです。注意:.NETやWinHTTPの設定は個別に切り替えられないため、これらのプロトコルについてはレジストリの修正が必要になる場合があります。
まとめ
Windows(特に古いバージョン)で TLS 1.2 を動作させるのは、少々面倒な場合があります。しかし、適切なアップデート、レジストリの調整、そして簡単なスクリプトがあれば、通常は可能です。特にアプリやサーバーのセキュリティを維持し、最新のプロトコルとの互換性を確保したい場合は、努力する価値は十分にあります。ただし、レジストリ設定を変更した後は、再起動が必要になることが多いので注意してください。また、PowerShell など一部のアプリケーションでは、レジストリオプションを設定することでアプリケーションが TLS 1.2 をサポートするように「仕向け」、厄介な接続エラーを回避できます。
まとめ
- Windowsのバージョンが最新であることを確認してください。特に古いOSの場合はKB3140245が必要です。
- Schannelのレジストリキーを使用してTLS 1.2を手動で有効にする
- WinHTTP アプリのDefaultSecureProtocolsを設定してTLS 1.2 を強制する
- 必要に応じて PowerShell スクリプトを使用して自動化する
- レジストリエントリを編集して. NET Framework が TLS 1.2 を使用するように構成します。
- オプション: GUIベースのアプローチにはIISCryptoを使用する