THTTPClient 访问仅支持 TLS 1.3 的站点会导致错误
THTTPClient Get to a TLS 1.3 only site results in an error
此代码:
uses
System.Net.HttpClient;
procedure TForm2.Button1Click(Sender: TObject);
var
LHTTP: THTTPClient;
LResponse: IHTTPResponse;
begin
LHTTP := THTTPClient.Create;
try
LHTTP.SecureProtocols := [THTTPSecureProtocol.TLS13];
LResponse := LHTTP.Get('https://tls13.1d.pw'); // TLS 1.3 ONLY site
if LResponse.StatusCode = 200 then
ShowMessage('TLS 1.3 worked');
finally
LHTTP.Free;
end;
end;
结果:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class ENetHTTPClientException with message 'Error sending data: (12175) A security error occurred'.
---------------------------
Break Continue Help Copy
---------------------------
使用 Windows 10(相同的代码适用于 Windows 11)。我已经进入 Windows 中的 Internet 选项设置并启用了 TLS 1.3,但这并没有解决问题。
我还需要做什么吗?
根据 WinHTTP Error Messages 文档:
ERROR_WINHTTP_SECURE_FAILURE
12175
One or more errors were found in the Secure Sockets Layer (SSL) certificate sent by the server. To determine what type of error was encountered, check for a WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
notification in a status callback function. For more information, see WINHTTP_STATUS_CALLBACK
.
不幸的是,THTTPClient
不提供使用此类回调的权限,但它确实使用内部回调在其 SecureFailureReasons
中捕获 ERROR_WINHTTP_SECURE_FAILURE
的原因 属性。所以你可以查看更多信息。
您确定您在 Windows 10 上启用了 TLS 1.3 吗?您使用的是 build 1903 或更高版本吗?早期版本不支持 TLS 1.3。
此代码:
uses
System.Net.HttpClient;
procedure TForm2.Button1Click(Sender: TObject);
var
LHTTP: THTTPClient;
LResponse: IHTTPResponse;
begin
LHTTP := THTTPClient.Create;
try
LHTTP.SecureProtocols := [THTTPSecureProtocol.TLS13];
LResponse := LHTTP.Get('https://tls13.1d.pw'); // TLS 1.3 ONLY site
if LResponse.StatusCode = 200 then
ShowMessage('TLS 1.3 worked');
finally
LHTTP.Free;
end;
end;
结果:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class ENetHTTPClientException with message 'Error sending data: (12175) A security error occurred'.
---------------------------
Break Continue Help Copy
---------------------------
使用 Windows 10(相同的代码适用于 Windows 11)。我已经进入 Windows 中的 Internet 选项设置并启用了 TLS 1.3,但这并没有解决问题。
我还需要做什么吗?
根据 WinHTTP Error Messages 文档:
ERROR_WINHTTP_SECURE_FAILURE
12175
One or more errors were found in the Secure Sockets Layer (SSL) certificate sent by the server. To determine what type of error was encountered, check for a
WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
notification in a status callback function. For more information, seeWINHTTP_STATUS_CALLBACK
.
不幸的是,THTTPClient
不提供使用此类回调的权限,但它确实使用内部回调在其 SecureFailureReasons
中捕获 ERROR_WINHTTP_SECURE_FAILURE
的原因 属性。所以你可以查看更多信息。
您确定您在 Windows 10 上启用了 TLS 1.3 吗?您使用的是 build 1903 或更高版本吗?早期版本不支持 TLS 1.3。