OpenSSL SSL_read() gibt 0 zurück und SSL_get_error() gibt 6 zurück, was kann ich tun, um das zu beheben?

Ich empfange Daten über eine SSL-Verbindung und nach einigen Minuten gibt SSL_read() 0 zurück (ich verwende einen blockierenden Socket, also sollte es nicht 0 zurückgeben) und dann SSL_get_error() 6 zurückgeben. Ich kann jedoch nicht finden, was 6 bedeutet und was ich brauche zu tun, um dies zu beheben?

Es passiert mehrmals, jedes Mal einige Minuten nachdem ich die Verbindung hergestellt habe.

Da ich nur Daten streame, kann ich nicht viel falsch machen.

Irgendwelche Ratschläge, wie man zusätzliche Informationen zu SSL-Problemen protokolliert?

🤔 А знаете ли вы, что...
C позволяет определять и использовать макросы для автоматизации задачи исходного кода.


52
1

Antwort:

Gelöst

Ich kann jedoch nicht finden, was 6 bedeutet

Die relevanten Defines befinden sich in ssl.h:

$ grep  SSL_ERROR_ /usr/include/openssl/ssl.h 
# define SSL_ERROR_NONE                  0
...
# define SSL_ERROR_ZERO_RETURN           6
...

Aus der Dokumentation zu diesem Fehler:

SSL_ERROR_ZERO_RETURN
Der TLS/SSL-Peer hat die Verbindung für geschlossen Schreiben durch Senden des close_notify-Alarms. Es können keine Daten mehr gelesen werden. Beachten Sie, dass SSL_ERROR_ZERO_RETURN nicht unbedingt anzeigt, dass die zugrunde liegender Transport wurde geschlossen.

Mit anderen Worten: Der Peer hat die TLS-Sitzung heruntergefahren. Dies ist also eigentlich kein SSL-Problem, da sich der Peer beim Schließen der SSL-Sitzung so verhält, wie er soll.

was muss ich tun um das zu beheben?

Es ist nicht bekannt, warum der Peer die Verbindung schließt, aber es hat wahrscheinlich nichts mit SSL zu tun.

Leider ist nichts über den Peer oder das von Ihnen verwendete Anwendungsprotokoll bekannt. Es ist also unklar, wie sich der Peer überhaupt verhalten soll, d.h. ob das, was Sie sehen, normales Verhalten ist und Ihre Erwartungen falsch sind oder ob es ein Problem beim Peer gibt.

Der erste Schritt zur Behebung wäre also zu verstehen, welches Anwendungsprotokoll hier verwendet wird und ob das, was Sie sehen, möglicherweise sogar das erwartete Verhalten ist. Wenn dies nicht der Fall ist, überprüfen Sie eventuelle Log-Dateien auf der Peer-Seite oder analysieren Sie den Quellcode des Peers auf Fehler.

Wenn Sie weitere Hilfe von der Community erwarten, stellen Sie bitte genügend Kontext zum Anwendungsprotokoll und dem Peer bereit, damit andere im Idealfall reproduzieren und somit debuggen können, was Sie sehen.