如何设置TWebBrowser的TLS版本以支持TLS 1.2及以上?
解决TWebBrowser无法使用TLS 1.2的问题
TWebBrowser组件依赖系统中的Internet Explorer渲染引擎,默认可能未启用TLS 1.2,可通过以下两种方式解决:
1. 修改注册表强制启用高版本IE模式及TLS 1.2
针对当前应用程序
添加或修改以下注册表项,让TWebBrowser使用IE11的渲染模式(IE11原生支持TLS 1.2):
- 32位程序在64位系统:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION - 对应系统位数的程序:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
在该路径下新建DWORD(32位)值,名称为你的应用程序.exe文件名(比如YourApp.exe),值设为11001(对应IE11边缘模式,强制使用最新特性)。
启用系统级TLS 1.2支持
修改以下注册表项确保系统开启TLS 1.2:
路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
- 新建DWORD值
Enabled,设为1 - 新建DWORD值
DisabledByDefault,设为0
2. 通过代码动态设置(无需手动改注册表)
在程序启动时,调用Windows API写入上述注册表项,示例Delphi代码如下:
procedure SetTLS12Support; var Reg: TRegistry; begin Reg := TRegistry.Create; try // 设置FEATURE_BROWSER_EMULATION为IE11模式 if Reg.OpenKey('SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION', True) then begin Reg.WriteInteger(ExtractFileName(Application.ExeName), 11001); Reg.CloseKey; end; // 启用TLS 1.2客户端支持 if Reg.OpenKey('SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client', True) then begin Reg.WriteInteger('Enabled', 1); Reg.WriteInteger('DisabledByDefault', 0); Reg.CloseKey; end; finally Reg.Free; end; end; // 在程序启动阶段调用,例如initialization块 initialization SetTLS12Support;
注意:修改HKEY_LOCAL_MACHINE路径下的注册表需要管理员权限,若程序非管理员运行,可将路径替换为HKEY_CURRENT_USER\SOFTWARE\...(仅对当前用户生效,无需管理员权限)。
内容的提问来源于stack exchange,提问作者MohsenB
相关产品推荐
相关产品推荐

