THTTPClient 访问仅 TLS 1.3 的站点会导致错误

Dav*_*age 2 delphi delphi-run-time-library delphi-11-alexandria

这段代码:

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;
Run Code Online (Sandbox Code Playgroud)

结果是:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class ENetHTTPClientException with message 'Error sending data: (12175) A security error occurred'.
---------------------------
Break   Continue   Help   Copy   
---------------------------
Run Code Online (Sandbox Code Playgroud)

使用 Windows 10(相同的代码适用于 Windows 11)。我已进入 Windows 中的“Internet 选项”设置并启用了 TLS 1.3,但这并不能解决问题。

我还需要做什么吗?

Rem*_*eau 5

根据 WinHTTP错误消息文档:

ERROR_WINHTTP_SECURE_FAILURE

12175

在服务器发送的安全套接字层 (SSL) 证书中发现一个或多个错误。要确定遇到的错误类型,请检查WINHTTP_CALLBACK_STATUS_SECURE_FAILURE状态回调函数中的通知。有关详细信息,请参阅WINHTTP_STATUS_CALLBACK

不幸的是,它不为您提供使用此类回调的访问权限,但它确实使用内部回调来捕获其属性中THTTPClient的原因。所以您可以检查以获取更多信息。ERROR_WINHTTP_SECURE_FAILURESecureFailureReasons

确定在 Windows 10 上启用了 TLS 1.3 吗?您使用的是 1903 版本或更高版本吗?早期版本不支持 TLS 1.3。

如何在 Windows 10 中启用 TLS 1.3

  • 实际上,THTTPClient 在其属性 SecureFailureReasons 中显示了失败的信息。 (2认同)