TFPHTTPClient with GnuTLS fails on some TLS websites
## Summary
**Objective: do a GET request over HTTPS.**
Using TFPHTTPClient with GnuTLS gives positive results in some cases, but leads to exceptions in other cases. The successes/failures are consistent for a chosen web address. It may have to do with the settings or certificate of these websites, but `gnutls-cli` has no problem connecting to them and it concerns very common websites, like Google and Microsoft.
## System Information
- **Operating system:** Linux, both Ubuntu 22.10 and Arch
- **Processor architecture:** x86-64
- **Compiler version:** 3.2.2
- **Device:** Laptop
## Steps to reproduce
Pascal program to reproduce:
```pascal
program project1;
{$mode objfpc}{$H+}
uses SysUtils, fphttpclient, gnutls, gnutlssockets;
const URLS: array[0..7] of string = (
'https://www.belastingdienst.nl',
'https://www.overheid.nl',
'https://fancyssl.hboeck.de/',
'https://www.badssl.com',
'https://www.freepascal.org',
'https://www.ubuntu.com',
'https://www.google.com',
'https://www.microsoft.com'
);
procedure TryURLs;
var
URL: string;
begin
for URL in URLS do
try
with TFPHTTPClient.Create(nil) do
try
AllowRedirect := True;
Get(URL);
finally
Free;
end;
WriteLn(URL, ' succeeded.');
except
on E: Exception do
WriteLn(Format('%s failed! (%s)', [URL, E.Message]));
end;
end;
begin
TryURLs;
end.
```
Result of running this program:
```
$ ./project1
https://www.belastingdienst.nl succeeded.
https://www.overheid.nl succeeded.
https://fancyssl.hboeck.de/ succeeded.
https://www.badssl.com succeeded.
https://www.freepascal.org failed! (Error reading data from socket)
https://www.ubuntu.com failed! (Error reading data from socket)
https://www.google.com failed! (Error reading data from socket)
https://www.microsoft.com failed! (Error reading data from socket)
```
Result of using `gnutls-cli` for the same web addresses:
```
$ for url in www.belastingdienst.nl www.overheid.nl fancyssl.hboeck.de badssl.com www.freepascal.org www.ubuntu.com www.google.com www.microsoft.com; do echo $url; echo "^C" | gnutls-cli $url | grep -E "Status|Handshake"; done
www.belastingdienst.nl
- Status: The certificate is trusted.
- Handshake was completed
www.overheid.nl
- Status: The certificate is trusted.
- Handshake was completed
fancyssl.hboeck.de
- Status: The certificate is trusted.
- Handshake was completed
badssl.com
- Status: The certificate is trusted.
- Handshake was completed
www.freepascal.org
- Status: The certificate is trusted.
- Handshake was completed
www.ubuntu.com
- Status: The certificate is trusted.
- Handshake was completed
www.google.com
- Status: The certificate is trusted.
- Handshake was completed
www.microsoft.com
- Status: The certificate is trusted.
- Handshake was completed
```
## What is the current bug behavior?
For some web addresses, an exception is raised (Error reading data from socket).
For other web addresses, the GET request succeeds flawlessly.
## What is the expected (correct) behavior?
The GET request should succeed for all web addresses (at least those having a valid certificate).
issue