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。