用于检查浏览器中启用的 TLS 1.2 的 Powershell 脚本
Powershell script to check TLS 1.2 enabled in browser
我可以有一个脚本来检查注册表中以下位置是否启用了 tls 1.2。
• HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\DisabledByDefault存在,值应为0.
• HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\Enabled 存在,值应为 1.
https://support.site24x7.com/portal/en/kb/articles/how-to-check-if-tls-1-2-is-enabled
$path = @(Get-ItemProperty HKLM:\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\Enabled) -and @(Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\DisabledByDefault) -ErrorAction SilentlyContinue
if ($null -eq $path) { # Always place $null on the LHS
'not found'
}
我如何使用 powershell 脚本检查在浏览器(而不是注册表)中启用的 TLS 1.2?
要检查你问题中的 schannel 键,这有效
$key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\'
if (Test-Path $key) {
$TLS12 = Get-ItemProperty $key
if ($TLS12.DisabledByDefault -ne 0 -or $TLS12.Enabled -eq 0) {
Throw "TLS 1.2 Not Enabled"
}
}
请注意,大多数浏览器还会检查 Internet 设置中的 SecureProtocols
值,可以为每个用户或整个机器设置:
# User settings
Get-ItemProperty 'hkcu:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name SecureProtocols
# Machine settings
Get-ItemProperty 'hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings' -Name SecureProtocols
Value
有点奇怪,因为它是每个受支持协议的十六进制值的组合。例如,TLS1.2 为 0x800
或 2048
。查看 Microsoft TLS 1.2 page 了解有关所有这些信息的更多详细信息。
它在我的笔记本电脑注册表中显示 280 tls 1.2 关闭,tls 1.2 a80 打开。
当运行在PowerShell_ISE时,.NetClass属性是查询TLS设置的简单方法:
[Net.ServicePointManager]::SecurityProtocol
如果仅启用 TLS,输出将为:
Ssl, Tls
如果启用了 TLS1.2,则列表将是:
Tls, Tls11, Tls12
然而,return类型是System.Enum,可以使用正则表达式检查如下:
[Net.ServicePointManager]::SecurityProtocol -match "Tls12"
产生布尔结果
我可以有一个脚本来检查注册表中以下位置是否启用了 tls 1.2。
• HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\DisabledByDefault存在,值应为0.
• HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\Enabled 存在,值应为 1.
https://support.site24x7.com/portal/en/kb/articles/how-to-check-if-tls-1-2-is-enabled
$path = @(Get-ItemProperty HKLM:\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\Enabled) -and @(Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\DisabledByDefault) -ErrorAction SilentlyContinue
if ($null -eq $path) { # Always place $null on the LHS
'not found'
}
我如何使用 powershell 脚本检查在浏览器(而不是注册表)中启用的 TLS 1.2?
要检查你问题中的 schannel 键,这有效
$key = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\'
if (Test-Path $key) {
$TLS12 = Get-ItemProperty $key
if ($TLS12.DisabledByDefault -ne 0 -or $TLS12.Enabled -eq 0) {
Throw "TLS 1.2 Not Enabled"
}
}
请注意,大多数浏览器还会检查 Internet 设置中的 SecureProtocols
值,可以为每个用户或整个机器设置:
# User settings
Get-ItemProperty 'hkcu:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' -Name SecureProtocols
# Machine settings
Get-ItemProperty 'hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings' -Name SecureProtocols
Value
有点奇怪,因为它是每个受支持协议的十六进制值的组合。例如,TLS1.2 为 0x800
或 2048
。查看 Microsoft TLS 1.2 page 了解有关所有这些信息的更多详细信息。
它在我的笔记本电脑注册表中显示 280 tls 1.2 关闭,tls 1.2 a80 打开。
当运行在PowerShell_ISE时,.NetClass属性是查询TLS设置的简单方法:
[Net.ServicePointManager]::SecurityProtocol
如果仅启用 TLS,输出将为:
Ssl, Tls
如果启用了 TLS1.2,则列表将是:
Tls, Tls11, Tls12
然而,return类型是System.Enum,可以使用正则表达式检查如下:
[Net.ServicePointManager]::SecurityProtocol -match "Tls12"
产生布尔结果