OpenVPN-TLS-cifferfout: vergelijk eerst beide kanten
Een fout over geen gedeelde ciffer hoort bij het TLS-controlekanaal, niet bij data-ciphers. Vergelijk eerst de versies, dan de suitelijsten en bewijs daarna de onderhandeling.
Een fout over geen gedeelde ciffer klinkt als één instelling die je moet wijzigen, en de instelling die de meeste mensen wijzigen is de verkeerde. OpenVPN houdt aparte beleidsregels voor het controlekanaal dat de TLS-handshake uitvoert en voor het datakanaal dat pakketten in de tunnel draagt, en de fout noemt het eerste terwijl mensen het tweede aanpassen. Vergelijken wat elke kant toestaat, in de juiste volgorde, maakt van het giswerk twee of drie beslissingen: versie, dan suitelijst, dan inloggegevens.
Zit je volgorde fout, dan kun je een uur besteden aan het toevoegen van een AES-naam aan een lijst die nooit is geraadpleegd.
Twee cifferlijsten, en slechts één breekt de handshake
Het controlekanaal onderhandelt een TLS-sessie, en het beleid ervan wordt geschreven met tls-cipher voor TLS 1.2 en tls-ciphersuites voor TLS 1.3. Het datakanaal wordt apart geconfigureerd met data-ciphers, waar een mismatch een verbinding oplevert die tot stand komt en daarna geen verkeer doorlaat. Beide leveren fouten op die cijfers noemen, en daarom worden ze verward. Een handshake die nooit voltooid wordt, wijst op het controlekanaal, terwijl een opgezette tunnel die pakketten laat vallen op het datakanaal wijst.
Lees het hele bericht in plaats van de eerste regel. Een versieverschil, een ontbrekende suite, een certificaathandtekeningalgoritme dat de andere kant weigert en een mislukte hostnaamverificatie eindigen allemaal in een TLS-fout, en slechts één daarvan gaat over jouw suitelijst. Die categorieën uit elkaar houden is het grootste deel van de diagnose.
Vergelijk versies voordat je suites vergelijkt
Een kant die beperkt is tot TLS 1.2 en een kant die 1.3 vereist, delen geen versie, en geen cifferstring overbrugt dat. Noteer tls-version-min en tls-version-max aan beide kanten, of de standaardwaarden van de gebruikte builds, want het OpenSSL-beleid van een distributie kan de ondergrens verhogen zonder dat een OpenVPN-optie dat zegt. Is één kant een apparaat of een client van derden, dan is het venster wat de firmware toestaat. Pas als de vensters overlappen, betekent een suitevergelijking iets.
Die aantekeningen moeten ook de werkelijke binaries noemen. Een commandoregel-openvpn op je laptop is niet per se de client die een geïmporteerd profiel afhandelt.
Lijsten voor TLS 1.2 en TLS 1.3 mengen niet
Suitenamen voor TLS 1.2 zien er zo uit: ECDHE-RSA-AES256-GCM-SHA384 en horen in tls-cipher, dat een OpenSSL-cifferstring accepteert. TLS 1.3-suites heten TLS_AES_256_GCM_SHA384 en horen in tls-ciphersuites; er één aan de 1.2-string toevoegen configureert de 1.3-lijst niet, en de parser kan de tekst accepteren zonder die ooit te matchen. Een filter dat voor de ene versie klopt, zegt niets over de andere. Schrijf op voor welke versie elke lijst bedoeld is.
openvpn --show-tls drukt af wat de lokale build ondersteunt, en dat is een inventaris, geen belofte: de externe kant staat die suites misschien niet toe, en het actieve profiel schakelt ze misschien niet in. Gebruik het om een build uit te sluiten die helemaal geen suite kan bieden, en vergelijk daarna de geconfigureerde lijsten.
Bewijs de onderhandeling op een nieuwe verbinding
Een geslaagde handshake is het enige bewijs dat telt, en die moet van de echte client met het echte profiel komen. Verhoog de uitvoerigheid van de server, verbind één keer en lees de onderhandelde protocolversie en suite uit het log in plaats van aan te nemen dat de eerst aangeboden waarde heeft gewonnen. Bevestig daarna het datakanaal apart met verkeer door de tunnel, want een werkende handshake en een falend datakanaal zijn verschillende reparaties. Herhaal dit na elke configuratiewijziging, want een verouderd clientprofiel is een veelvoorkomende valse negatief.
Bestaat er geen goedgekeurde gemeenschappelijke configuratie, dan is het antwoord een upgrade of een migratieplan, geen verzwakt beleid. tls-version-min verlagen, verificatie uitschakelen of elke oude suite inschakelen haalt de afwijzing weg zonder aan de beveiligingseis te voldoen die haar veroorzaakte.
Noteer de onderhandelde versie, de suite en het datacijfer in de wijzigingsticket. De volgende persoon die een TLS-fout tegenkomt, begint bij die aantekening en niet bij een cifferstring uit een forumbericht.