Environment
- Windows Server 2016
- PowerShell 5.1.14
- .NET Framework 4.8
Overview
- Windows Server 2016 は SSL3.0, TLS1.0, TLS1.1, TLS1.2 をサポートしている.
- Client application が TLS security protocol version を明示しない限り、Windows が既定で (DefaultSecureProtocols registry で有効化されている) SSL 3.0 と TLS 1.0 を利用する.
- Windows Registry の設定で TLS1.2 以外は無効化にしたい.
- Registry 設定は OS/.NET Framework それぞれの registry で設定する.
Requirement
Client として TLS1.2 protocol で外部と通信すること.
Process
.NET Framework の既定 SSL/TLS version を変更する
対象 registry
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<version>
Registry 設定値
- Name:
SchUseStrongCrypto
- Type: DWORD
- Data: 1 # 0x1 enabled
- Name:
SystemDefaultTlsVersions
- Type: DWORD
- Data: 1
SchUseStrongCrypto
- .NET で TLS 1.1 と TLS 1.2 を使用できるようになる.
- この設定は application が client として動作する場合のみ影響する.
- application の targetFramework が .NET Framework4.6 以降のバージョンの場合、この registry key の既定値は 1.
SystemDefaultTlsVersions
- OS の SSL/TLS version に従うようになる.
- application の targetFramework が .NET Framework4.7 以降のバージョンの場合、この registry key の既定値は 1.
Registry への設定
SystemDefaultTlsVersions
, SchUseStrongCrypto
の registry 設定.
reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<version>” /v SchUseStrongCrypto /t REG_DWORD /d 1 /f reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<version>” /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f
OS の既定 SSL/TLS version を変更する
対象 registry
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client
Registry 設定値
- Name: Enabled
- Type: DWORD
- Data: 0 # 0x0 disabled
- Name: DisabledByDefault
- Type: DWORD
- Data: 1
Registry への設定
SSL3.0 の無効化
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client” /v Enabled /t REG_DWORD /d 0 /f reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
TLS1.0 の無効化
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client” /v Enabled /t REG_DWORD /d 0 /f reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
TLS1.1 の無効化
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client” /v Enabled /t REG_DWORD /d 0 /f reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
Test
設定した Registry の key/value を確認する.
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" /s HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client DisabledByDefault REG_DWORD 0x1 Enabled REG_DWORD 0x0 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client DisabledByDefault REG_DWORD 0x1 Enabled REG_DWORD 0x0 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client DisabledByDefault REG_DWORD 0x1 Enabled REG_DWORD 0x0 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" /s HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 AspNetEnforceViewStateMac REG_DWORD 0x1 SchUseStrongCrypto REG_DWORD 0x1 SystemDefaultTlsVersions REG_DWORD 0x1
howsmyssl.com へリクエストし, TLS protocol version が TLS1.2 であることを確認する.
PS > (Invoke-WebRequest 'https://www.howsmyssl.com/a/check').Content "tls_version":"TLS 1.2"
PowerShell で SecurityProtocol の返り値を確認する.
[Net.ServicePointManager]::SecurityProtocol SystemDefault
SystemDefault は, OS の TLS protocol に依存する値.
余談
WindowsServer2019 では OS 側が既定で TLS1.0,1.1,1.2 が有効だが, .NET 側は 1.2 が有効ではないため同じように Registry を設定する必要がある.