tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

Windows Server2016 で OS/.NET Framework TLS1.2 security protocol のみを有効化する

Environment

  • Windows Server 2016
  • PowerShell 5.1.14
  • .NET Framework 4.8

Overview

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

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 を設定する必要がある.

References