iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
佛心分享-我的私藏工具箱

作業系統的專武系列 第 2

開關Windows支援TLS版本

  • 分享至 

  • xImage
  •  

近兩年弱掃要求作業系統關閉TLS v1.0、TLS v1.1版本支援,開啟TLS v1.2、TLS v1.3的支援,在Windows甚至要求指定演算法、金鑰的長度,這在Windows可以透過regedit編輯基碼達成,但一台一台Windows都這樣操作太慢,所以腦筋動到Windows的專武:PowerShell。

檢查Windows支援TLS的程度

方法一:透過PowerShell檢查基碼

Get-ChildItem -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers' -Recurse 

Get-ChildItem -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\'  -Recurse 

方法二:透過PowerShell存取.net架構

PS C:\Users\Administrator> [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls

同場加映,Unix Like系統是用openssl來檢查

# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1.2

使用PowerShell修改基碼:Disable TLS 1.0,1.1;Enable 1.2,1.3的PowerShell Script。(包含設定Key長不得小於2048)

if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.0"
}
if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0" -Name "Server"
}
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "Enabled" -Type DWord -Value 1 
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "DisabledByDefault" -Type DWord -Value 1 

if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.1"
}
if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1" -Name "Server"
}
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -Name "Enabled" -Type DWord -Value 1 
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -Name "DisabledByDefault" -Type DWord -Value 1 

if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.2"
}
if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Name "Server"
}
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "Enabled" -Type DWord -Value 1 
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "DisabledByDefault" -Type DWord -Value 0

if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.3"
}
if (!(Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server"))
{
	New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3" -Name "Server"
}
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name "Enabled" -Type DWord -Value 1 
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name "DisabledByDefault" -Type DWord -Value 0

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms" -Name "Enabled" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms" -Name "ServerMinKeyBitLength" -Type DWord -Value 2048

Windows Registry有分Item(類似目錄)及ItemProperty。
【Item部份】
以下圖紅框為例:在Protocols下新增名為TLS 1.0的Item,然後在TLS 1.0下再新增名為Server的Item,新增命令為:

  • New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.0"
  • New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0" -Name "Server"
    https://ithelp.ithome.com.tw/upload/images/20240817/20119865AhgOvB1ku1.png
    但若該Item已存在,下New-Item會報錯,所以要事先檢查,檢查指令為:
  • Test-Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0"
    驚嘆號作用等於-not,-not是PowerShell邏輯運算元之一。
    【Item-Property部份】
  • Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "Enabled" -Type DWord -Value 1
    • -Path是基碼的路徑,為必須值。HKLM全名是:HKEY_LOCAL_MACHINE,若是HKCU則是指HKEY_CURRENT_USER,尚有HKEY_CLASSES_ROOT、HKEY_USERS及HKEY_CURRENT_CONFIG。而Get-ItemProperty只需有-Path參數即可
    • -Name,ItemProperty的名字,必須值。如Enabled
    • -Type,基碼類型,不設定通常預設值是String。
      • New-ItemProperty的參數是-PropertyType,且是必須值。若該ItemProperty已存在會報錯
    • -Value,基碼值。

上一篇
IT維運日常:過版、抓漏格
下一篇
請bash找專家幫忙跑迴圈
系列文
作業系統的專武30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言