用于检查浏览器中启用的 TLS 1.2 的 Powershell 脚本

Posted

技术标签:

【中文标题】用于检查浏览器中启用的 TLS 1.2 的 Powershell 脚本【英文标题】:Powershell script to check TLS 1.2 enabled in browser 【发布时间】:2021-11-22 22:24:26 【问题描述】:

我可以有一个脚本来检查注册表中以下位置启用的 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?

【问题讨论】:

您需要找出该浏览器设置的相应注册表项。不幸的是,我怀疑这可能是每个用户的设置,这使事情变得更加棘手。虽然您可以在 HKCU 中检查 reg 密钥,但它将是您的注册表,并且 HKU 将仅填充已登录的用户。这只会使事情变得相当复杂,但并非不可能。 【参考方案1】:

要检查您问题中的 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 有点奇怪,因为它是每个支持的协议的十六进制值的组合。例如,TL​​S1.2 是0x8002048。查看Microsoft TLS 1.2 page,了解有关所有这些信息的更多详细信息。

在我的笔记本电脑注册表中显示 280 tls 1.2 off,tls 1.2 a80 On。

【讨论】:

感谢您的见解,它真的很有帮助。您还可以提及互联网设置的完整路径吗?是 Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Protocols 应该是什么键值,和以前一样吗? @SmartestVEGA 我已经更新了我的答案。不幸的是,正确的值比01更复杂。请查看链接页面了解更多信息。 谢谢,我的系统中的值是 280 关闭,a80 开启。非常感谢您的帮助【参考方案2】:

在 PowerShell_ISE 中运行时,.Net 类属性是查询 TLS 设置的简单方法:

[Net.ServicePointManager]::SecurityProtocol

如果仅启用 TLS,则输出将为:

Ssl、Tls

如果启用了 TLS1.2,那么列表将是:

Tls、Tls11、Tls12

但是,返回类型是 System.Enum,可以使用正则表达式进行检查,如下所示:

[Net.ServicePointManager]::SecurityProtocol -match "Tls12"

导致布尔结果

【讨论】:

以上是关于用于检查浏览器中启用的 TLS 1.2 的 Powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

在高级设置中启用 TLS 1.0、TLS 1.1 和 TLS 1.2,

如何在 Picasso 上启用 TLS v 1.2 以在 Kotlin 中使用 https 加载图像

如何在 Java 7 中启用 TLS 1.2

如何在 IBM java 1.6 中启用 TLS 1.2?

如何在 Nginx 中启用 TLS 1.2?

重要Exchange 2010/2013/2016即将启用TLS 1.2