При работе с компонентом THTTPClient в среде разработки Delphi иногда возникают проблемы, связанные с поддержкой определенных протоколов безопасности, таких как TLS 1.3. В данном случае, при попытке доступа к сайту, который поддерживает только TLS 1.3, возникает ошибка. Давайте разберемся, как можно решить данную проблему.
Описание проблемы
При выполнении следующего кода в среде Windows 10 возникает ошибка ENetHTTPClientException с кодом 12175, что указывает на проблему с безопасностью SSL-сертификата:
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;
Причины возникновения ошибки
Ошибка 12175 (ERROR_WINHTTP_SECURE_FAILURE) указывает на то, что в SSL-сертификате, отправленном сервером, обнаружены ошибки. Для получения более подробной информации о причине отказа в безопасности можно использовать функцию обратного вызова статуса, которая уведомляет о WINHTTP_CALLBACK_STATUS_SECURE_FAILURE. Однако THTTPClient не предоставляет прямого доступа к такой функции обратного вызова, но он использует внутренний обратный вызов для захвата причины отказа в безопасности, который доступен в свойстве SecureFailureReasons.
Решение проблемы
Убедитесь, что TLS 1.3 включен в настройках Windows 10. Это возможно только начиная с сборки 1903 и более поздних версий. Если TLS 1.3 не включен, его можно активировать через редактирование реестра.
// Пример редактирования реестра для включения TLS 1.3 (псевдокод)
uses
Registry;
procedure EnableTLS13;
var
RegistryKey: TRegistry;
begin
RegistryKey := TRegistry.Create(KEY_READ or KEY_WRITE);
try
RegistryKey.RootSeparator := '';
RegistryKey.RootKey := HKEY_CURRENT_USER;
RegistryKey.OpenKeyReadWrite('\Software\Microsoft\Windows\CurrentVersion\Internet Settings', FALSE);
RegistryKey.WriteInteger('Flags', $20000);
finally
RegistryKey.Free;
end;
end;
После активации TLS 1.3 проверьте свойство SecureFailureReasons объекта THTTPClient, чтобы получить информацию о причине отказа в безопасности:
if LHTTP.SecureFailureReasons <> [] then
begin
// Обработка информации о причинах отказа в безопасности
end;
Заключение
При работе с THTTPClient и сайтами, поддерживающими только TLS 1.3, важно убедиться, что TLS 1.3 активирован в операционной системе. Используйте свойство SecureFailureReasons для диагностики и устранения возможных проблем с безопасностью.
Надеемся, что эта информация поможет вам успешно решить проблему с доступом к сайтам на TLS 1.3 через THTTPClient в Delphi на Windows 10.
Проблема связана с необходимостью активации поддержки TLS 1.3 в Windows 10 для работы с компонентом `THTTPClient` в Delphi, чтобы обеспечить доступ к сайтам, использующим только этот протокол безопасности.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.