
Ich migriere einen Server mit Debian 10 auf einen Server mit Debian 12 (und einem 6.x-Kernel) und das letzte, was nicht zu funktionieren scheint, ist TLS 1.0, das ich herauszufinden versuche.
Mir ist bewusst, dass ich das SECLEVEL
und MinProtocol
wie hier beschrieben ändern muss:https://stackoverflow.com/a/61568390/6110631, aber aus irgendeinem Grund hat das nicht funktioniert.
Auf dem Arbeitssystem habe ich:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = ALL:@SECLEVEL=1
Ich habe versucht, dies auf dem neuen System auf die gleiche Weise hinzuzufügen, aber TLS 1.0 scheint immer noch nicht zu funktionieren. Auf dem Apache-Server (der von der Anwendung abhängt) kann ich Folgendes sehen:
AH02039: Certificate Verification: Error (68): CA signature digest algorithm too weak
Ich hatte das irgendwie erwartet, da ich davon ausging, dass TLS 1.0 standardmäßig deaktiviert wäre, also habe ich weiter mit der Konfiguration herumgespielt. Keine der von mir vorgenommenen Änderungen schien zu funktionieren, und als ich Paketerfassungen aus der Client-Perspektive über einen Port-Mirror durchführte, konnte ich sehen, dass alle TLS-Verhandlungen komplett fehlschlugen (direkt nach Client Hello, Alert (Level: Fatal, Description: Protocol Version)
.
Bei näherer Untersuchung openssl s_client
scheint es, als ob bei TLS 1.0 insgesamt etwas nicht stimmt.
Auf dem vorhandenen Debian 10-Server erhalte ich:
# openssl version
OpenSSL 1.1.1n 15 Mar 2022
# openssl s_client -connect OLDHOST -tls1
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = OLDHOST
verify return:1
---
Certificate chain
0 s:CN = OLDHOST
i:C = US, O = Let's Encrypt, CN = R3
1 s:C = US, O = Let's Encrypt, CN = R3
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
2 s:C = US, O = Internet Security Research Group, CN = ISRG Root X1
i:O = Digital Signature Trust Co., CN = DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
Auf dem neuen Debian 12-Server erhalte ich jedoch:
# openssl version
OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)
# openssl s_client -connect NEWHOST -tls1
CONNECTED(00000003)
140101680407744:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../ssl/record/rec_layer_s3.c:1544:SSL alert number 80
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 136 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1695085443
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
TLS 1.2 funktioniert immer noch ordnungsgemäß, aber ich bekomme dies für TLS 1.0 und TLS 1.1.
Ich habe versucht DEFAULT:@SECLEVEL=1
, ALL:@SECLEVEL=1
und andere Kombinationen von Sicherheitsstufe 1, Sicherheitsstufe 0, ALL, DEFAULT, LEGACY usw. zu verwenden. Keine davon scheint zu funktionieren. Ich habe Apache und den gesamten Server zwischen den Änderungen regelmäßig neu gestartet.
Ich habe auch versucht, das zur Apache-Konfiguration hinzuzufügen, also habe ich Folgendes:
Protocols h2 http/1.1
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:@SECLEVEL=0
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
Weitere verwandte Fragen/Antworten, die leider zu keinen weiteren Erkenntnissen geführt haben:
An einigen Stellen scheint anzudeuten, dass man heutzutage SECLEVEL
von 1 auf 0 senken muss, damit es funktioniert, z. B. für SHA1-Zertifikate, was ich getan habe, aber es hat immer noch nicht geklappt.
TLS 1.0 und 1.1 Unterstützung hatnichtwurde in OpenSSL 3 entfernt (ich habe es überprüft), daher sollte es mit der richtigen Konfiguration unterstützt werden.
Alle dokumentierten Lösungen scheinen bei mir nicht zu funktionieren, und ich komme der Sache auch nicht näher, nachdem ich den ganzen Tag damit verbracht habe, das zu debuggen. Hat jemand eine andere Lösung gefunden, um ältere Chiffren zum Laufen zu bringen? Ich gebe ALL
Chiffren auf den Ebenen 0 und 1 an, und es scheint mir nicht zu gehorchen, also erscheint das ziemlich bizarr.
Antwort1
Ich wusste, dass dies möglich war und dass es sich wahrscheinlich um ein Konfigurationsproblem handelte ... und tatsächlich war es das.
Das Setzen von SECLEVEL auf 0 ist tatsächlich notwendig, aber ich hatte dies an mehreren Stellen und habe es nicht überall aktualisiert.
Insbesondere hatte der spezifische virtuelle Host noch SSLCipherSuite ALL:@SECLEVEL=1
, was mit älteren OpenSSL-Versionen problemlos funktionierte, jetzt muss jedoch sein SSLCipherSuite ALL:@SECLEVEL=0
.
(Ich hatte dies in der allgemeinen Apache-Konfiguration sowie in /etc/ssl/openssl.cf` festgelegt, aber da dies auf der Ebene des virtuellen Hosts festgelegt war, wurde dies überschrieben. Alle anderen virtuellen Hosts befanden sich zufällig bereits auf Ebene 0, und ich testete zufällig nur mit dem einen virtuellen Host, der natürlich auf 1 überschrieben war...)
Ich möchte noch einmal darauf hinweisen, dass Leute, die sagen, dass TLS 1.0 von aktuellen Kerneln, Apache oder OpenSSL nicht unterstützt wird (wie etwa in einem Kommentar zu dieser Frage),falschund sie arbeiten mitrichtigKonfiguration. Dies scheint ein weit verbreitetes Missverständnis zu sein.
Derzeit stellt der Endclient immer noch keine Verbindung her (Fehler beim TLS-Handshake), es stimmt also immer noch etwas nicht, aber openssl s_client
jetzt werden die Verhandlungen im Gegensatz zu vorher ordnungsgemäß durchgeführt, was ein Fortschritt ist.
DervollDie Lösung bestand auch darin, festzustellen, dass sowohl certbot als auch acme.sh jetzt standardmäßig ECDSA bevorzugen und Sie daher RSA explizit anfordern müssen, um die fehlenden Chiffren zu erhalten. Der alte Server „funktionierte“ einwandfrei, da die Zertifikate vom gleichen Typ erneuert wurden.
Ausschnitt aus openssl.cnf
einem neuen, funktionierenden System:
cat /etc/ssl/openssl.cnf | grep -v "#"
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = ALL@SECLEVEL=0