安装Windows KB5018410后Delphi TRestRequest的TLS故障求助
解决Windows 10 KB5018410更新后Delphi REST组件TLS访问问题
KB5018410更新会调整系统Schannel配置,导致Delphi的TRESTClient/TRESTRequest组件默认TLS协商逻辑失效,即使设计时勾选SecureProtocols也可能不生效,以下是几种可行的修复方案:
1. 代码中强制指定TLS版本并刷新组件设置
不要依赖设计时的属性设置,在请求发起前通过代码强制配置并刷新组件底层:
// 适用于Delphi 10.1及以上版本 RESTClient1.SecureProtocols := [THTTPSecureProtocol.TLS1_2]; // 重置并更新底层客户端配置 RESTClient1.ResetToDefault; RESTClient1.Update;
如果是XE8及更早的旧版本,THTTPSecureProtocol枚举没有TLS1_2选项,手动指定标志位:
const TLS1_2 = $00000800; begin RESTClient1.SecureProtocols := RESTClient1.SecureProtocols + [TLS1_2]; RESTClient1.ResetToDefault; RESTClient1.Update; end;
2. 修改系统注册表强制启用TLS 1.2
KB5018410可能在Schannel层默认禁用了TLS1.2,通过注册表恢复系统层面的支持:
- 打开
regedit.exe,导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client - 若不存在对应键值,手动创建:
- 依次新建项
TLS 1.2和其子项Client - 在
Client项下添加两个DWORD值:DisabledByDefault:设为0Enabled:设为1
- 依次新建项
- 重启电脑后生效
3. 切换REST组件的底层HTTP客户端实现
Delphi的REST组件支持多种底层客户端(Indy/WinHTTP),更新后可能某一底层出现兼容性问题,尝试切换:
// Delphi 10.3+版本支持切换 RESTClient1.ClientImplementation := TRESTClient.TClientImplementation.ciWinHTTP; // 或切换为ciIndy,测试哪种实现能正常访问 RESTClient1.SecureProtocols := [THTTPSecureProtocol.TLS1_2];
4. 调整应用程序兼容性设置
右键应用程序的.exe文件,打开属性窗口:
- 切换到“兼容性”标签页
- 勾选“以兼容模式运行这个程序”,选择Windows 8或更早版本
- 同时勾选“以管理员身份运行此程序”
- 保存设置后测试访问
内容的提问来源于stack exchange,提问作者Andrew Spencer
相关产品推荐
相关产品推荐

