Un errore «nessuna cifratura condivisa» sembra un'unica impostazione da cambiare, e l'impostazione che la maggior parte delle persone cambia è quella sbagliata. OpenVPN tiene politiche separate per il canale di controllo che esegue l'handshake TLS e per il canale dati che trasporta pacchetti dentro il tunnel, e l'errore nomina il primo mentre le persone modificano il secondo. Confrontare ciò che ciascun peer consente, nell'ordine giusto, trasforma le congetture in due o tre decisioni: versione, poi elenco di suite, poi credenziali.

Sbaglia quell'ordine e puoi perdere un'ora ad aggiungere un nome AES a un elenco che non è mai stato consultato.

Due elenchi di cifratura, e solo uno rompe l'handshake

Il canale di controllo negozia una sessione TLS, e la sua politica si scrive con tls-cipher per TLS 1.2 e tls-ciphersuites per TLS 1.3. Il canale dati si configura a parte con data-ciphers, dove una discrepanza produce una connessione che si stabilisce e poi non riesce a far passare traffico. Entrambi producono errori che citano cifrature, ed è per questo che si confondono. Un handshake che non si completa mai punta al canale di controllo, mentre un tunnel stabilito che scarta pacchetti punta al canale dati.

Leggi il messaggio intero invece della prima riga. Una discrepanza di versione, una suite mancante, un algoritmo di firma del certificato che il peer rifiuta e un fallimento della verifica del nome host finiscono tutti in un errore TLS, e solo uno di essi riguarda il tuo elenco di suite. Distinguere queste categorie è la maggior parte della diagnosi.

Confronta le versioni prima delle suite

Un peer limitato a TLS 1.2 e un peer che richiede 1.3 non condividono alcuna versione, e nessuna stringa di cifratura colma il divario. Annota tls-version-min e tls-version-max su entrambi i lati, o i valori predefiniti delle build in uso, perché la politica OpenSSL di una distribuzione può alzare il limite minimo senza che nessuna opzione di OpenVPN lo dica. Se un lato è un apparato o un client di terze parti, la sua finestra è ciò che il firmware consente. Solo quando le finestre si sovrappongono un confronto di suite significa qualcosa.

Quei record dovrebbero anche nominare i binari reali. Un openvpn da riga di comando sul tuo portatile non è necessariamente il client che gestisce un profilo importato.

Gli elenchi TLS 1.2 e TLS 1.3 non si mescolano

I nomi delle suite TLS 1.2 assomigliano a ECDHE-RSA-AES256-GCM-SHA384 e vanno in tls-cipher, che accetta una stringa di cifratura OpenSSL. Le suite TLS 1.3 si chiamano come TLS_AES_256_GCM_SHA384 e vanno in tls-ciphersuites; aggiungerne una alla stringa 1.2 non configura l'elenco 1.3, e il parser può accettare il testo senza mai farlo combaciare. Un filtro corretto per una versione non dice nulla dell'altra. Annota per quale versione è pensato ogni elenco.

openvpn --show-tls stampa ciò che la build locale supporta, e questo è un inventario, non una promessa: il peer remoto può non permettere quelle suite, e il profilo attivo può non abilitarle. Usalo per escludere una build che non può offrire alcuna suite, poi confronta gli elenchi configurati.

Dimostra la negoziazione su una connessione nuova

Un handshake riuscito è l'unica prova che conta, e deve venire dal client reale con il profilo reale. Alza la verbosità del server, connettiti una volta e leggi dal log la versione di protocollo e la suite negoziate invece di supporre che abbia vinto il primo valore offerto. Poi conferma il canale dati a parte con traffico nel tunnel, perché un handshake che funziona e un canale dati che fallisce sono riparazioni diverse. Ripeti dopo ogni modifica di configurazione, perché un profilo client obsoleto è un falso negativo comune.

Se non esiste una configurazione comune approvata, la risposta è un aggiornamento o un piano di migrazione, non una politica indebolita. Abbassare tls-version-min, disattivare la verifica o abilitare tutte le suite obsolete elimina il rifiuto senza soddisfare il requisito di sicurezza che lo ha prodotto.

Annota la versione negoziata, la suite e la cifratura dei dati nel ticket di modifica. La prossima persona che incontrerà un errore TLS partirà da quel record e non da una stringa di cifratura trovata in un post del forum.

Articoli correlati