Einfach Code:tidhttp: weird SSLv3_READ_BYTES Fehler (einrichten direkt TLSv1_2 Verbindung)
procedure TForm1.Button1Click(Sender: TObject);
//var
//h: tIdHTTP;
//SSL: TIdSSLIOHandlerSocketOpenSSL;
begin
h.IOHandler := SSL;
SSL.SSLOptions.Method := sslvTLSv1_2;
SSL.SLLOptions.SSLVersion := [sslvTLSv1_2]; //must be set automatically after SetMethod, but just to be sure
h.Get('https://www.deviantart.com/users/login');
end;
Das einfache Code gibt mir eine Fehlermeldung:
Error connecting with SSL.
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Ich benutze Delphi XE3 und OpenSSL 1.0.2b Bibliotheken. Ich kann es nicht herausgefunden, untersuchend Quellen gibt es Strings in Verbindung Einleitung, die Versionen nicht verwendet deaktivieren:
if not (sslvSSLv2 in SSLVersions) then begin
SSL_CTX_set_options(fContext, SSL_OP_NO_SSLv2);
end;
if not (sslvSSLv3 in SSLVersions) then begin
SSL_CTX_set_options(fContext, SSL_OP_NO_SSLv3);
end;
if not (sslvTLSv1 in SSLVersions) then begin
SSL_CTX_set_options(fContext, SSL_OP_NO_TLSv1);
end;
Aber SSLv3- Operationen noch in irgendwie zu bekommen. Sieht nicht wie der Fehler einer Komponente aus. Etwas Bibliothek intern oder Indy berücksichtigt nicht etwas beim Einrichten von Parametern?
Oder ist es eigentlich ich, der nichts Wichtiges bemerkt hat? Ich hoffe wirklich, dass ich nicht durch eine Hölle namens "Indy Components Update" gehen muss.
-Test auf (versucht, alle Verfahren, einschließlich TLS1.2) https://www.deviantart.com/users/login
Resolving hostname www.deviantart.com.
Connecting to 54.230.96.81.
Handshake Start: before/connect initialization
Connect Loop: before/connect initialization
Connect Loop: SSLv3 write client hello A
fatal Read Alert: handshake failure
Connect Failed: SSLv3 read server hello A
ERROR: Error connecting with SSL.
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
- für SSL3 und TLS1/1.1/1.2 Ergebnis ist identisch;
- für SSLv23-Antworten SSL23_GET_SERVER_HELLO: sslv3-Alert-Handshake-Fehler;
- für SSLv2 antwortet nicht;
-Test auf ähnliche Ressource (TLS1.2 ONLY) https://files.yande.re/image/da9afa6d9ca43a9f154fad69f76adb85.jpg
Resolving hostname files.yande.re.
Connecting to 5.39.10.56.
Handshake Start: before/connect initialization
Connect Loop: before/connect initialization
Connect Loop: SSLv3 write client hello A
Connect Loop: SSLv3 read server hello A
Connect Loop: SSLv3 read server certificate A
Connect Loop: SSLv3 read server key exchange A
Connect Loop: SSLv3 read server done A
Connect Loop: SSLv3 write client key exchange A
Connect Loop: SSLv3 write change cipher spec A
Connect Loop: SSLv3 write finished A
Connect Loop: SSLv3 flush data
Connect Loop: SSLv3 read server session ticket A
Connect Loop: SSLv3 read finished A
Handshake Done: SSL negotiation finished successfully
Connect Exit: SSL negotiation finished successfully
Meine Wireshark-Tests:
- Indy:
http://imgur.com/BZ84Cl3
(Antwort Handshake-Fehler ist); - Firefox:
http://imgur.com/pkYJvnO
; - Antwort auf Firefox-Anfrage:
http://imgur.com/M9ni3TV
;
TLS1 ist im Grunde nur eine Erweiterung von SSL3.OpenSSL implementiert TLS1 innerhalb seiner SSL3-Routinen. –
Sie können einfach neuere Versionen von Indy ausprobieren, wenn Sie die Indy-Quellenverzeichnisse zum Projektsuchpfad hinzufügen und die Komponente dynamisch erstellen. Siehe auch: [TIdHTTP erstellt jetzt einen Standard-SSLIOHandler beim Anfordern einer HTTPS-URL] (http://www.indyproject.org/Sockets/Blogs/ChangeLog/20141222.DE.aspx) – mjn
mjn, danke für einen Tipp, nicht Denken Sie darüber nach, aus irgendeinem Grund. – avil