Versione TLS non consentita di AnyConnect su Linux: delimitare prima l’ambito della correzione
Una policy LEGACY per l’intero host, una configurazione OpenSSL per processo e una VM usa e getta a confronto, più la modifica al gateway che elimina l’errore per sempre.
Questo errore arriva prima della richiesta della password, ed è la parte utile: nulla è ancora stato autenticato, quindi le credenziali non sono il problema. Su Linux la stessa finestra di AnyConnect può derivare da una vecchia versione del protocollo, da un gruppo di scambio chiavi a 1024 bit o da una suite di cifratura che la policy crittografica del sistema rifiuta. L’ho eliminato in tre modi diversi su tre macchine, e ciò che distingue queste correzioni è l’ambito, non l’astuzia. Ognuna è difendibile al posto giusto e una cattiva impostazione predefinita ovunque altro.
Leggere il messaggio prima di toccare la policy
Conservate la stringa esatta dalla finestra. Una lamentela sulla versione punta al livello del protocollo, una lamentela sul certificato punta alla fiducia o alla denominazione, e un accesso fallito punta alle credenziali. Un gateway che offre TLS 1.0 con un gruppo DHE a 1024 bit, AES-256-CBC e una firma SHA-1 può avere un certificato perfettamente valido ed essere comunque rifiutato da una policy moderna prima che le vostre credenziali vengano inviate.
Verificate l’endpoint con l’OpenSSL di sistema, usando il nome host reale e la porta usata dal client.
Il fallimento di openssl s_client -connect vpn.example.com:443 -servername vpn.example.com mentre -tls1 -cipher DEFAULT@SECLEVEL=0 riesce indica che il limite è versione e dimensione della chiave insieme. Se il primo comando segnala una chiave DH piccola invece di un avviso di protocollo, la versione è a posto e solo il gruppo richiede attenzione. Non inserite mai una chiave privata o una password nella verifica.
Opzione 1: allentare l’intero host con la policy crittografica
Su Fedora e RHEL 8 e 9, update-crypto-policies --set LEGACY abbassa la policy di sistema di OpenSSL, e update-crypto-policies --show conferma ciò che è attivo. Di solito ripristina il tunnel, ma la policy viene letta all’avvio di un processo, quindi riavviate il client e ogni helper che ha creato prima di riprovare. Consente anche protocolli più vecchi e gruppi più deboli a ogni client TLS della macchina, dal browser nella finestra accanto al gestore di pacchetti che aggiorna il kernel.
Questa ampiezza è tutto lo scopo e tutto il problema. LEGACY vale per l’intero host, persiste ed è facile da dimenticare, quindi dovrebbe essere un passo diagnostico o un’eccezione documentata su una build gestita, mai lo stato di riposo di una workstation. Ne ho visto uno rimasto su LEGACY per due anni perché un solo portale interno ne aveva bisogno, e nessuno sapeva dire quando fosse iniziato.
Debian e Ubuntu non hanno un interruttore unico per questo. L’equivalente è una modifica a /etc/ssl/openssl.cnf che imposta un MinProtocol più basso e CipherString = DEFAULT@SECLEVEL=0 nella sezione dei valori predefiniti di sistema. Stesso ambito, file diverso, un po’ più facile da perdere di vista durante un aggiornamento di versione.
Opzione 2: un file di configurazione per un solo client
Una configurazione OpenSSL per processo mantiene la modifica dentro un solo albero di processi, ma solo se il file è cablato come la libreria si aspetta. Nominare una sezione ssl_conf non basta: OpenSSL legge la chiave di primo livello openssl_conf, la segue fino a una sezione di inizializzazione e solo allora raggiunge i valori predefiniti di SSL.
openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=0Puntate OPENSSL_CONF a quel file e avviate il client VPN tramite un wrapper che lo esporta. Tutto il resto sull’host mantiene la policy predefinita, ed è la proprietà che conta quando arriva la domanda di conformità. Confermate che il file sia davvero in vigore prima di incolpare il gateway: OPENSSL_CONF=/path/to/file openssl ciphers -s -tls1 dovrebbe elencare cifrari TLS 1.0, e un risultato vuoto significa che la catena è rotta e il client ha silenziosamente mantenuto i valori predefiniti di sistema.
Il file è sensibile alla versione. OpenSSL 1.1.1 e 3.x accettano gli stessi nomi di sezione, ma la gestione delle direttive attorno ai provider è cambiata in 3.x, quindi verificate con il log del client e una stretta di mano di prova invece di dare per scontato che il file sia stato letto. Un errore di battitura nel nome della sezione fallisce in aperto, e il client usa silenziosamente i valori predefiniti di sistema.
Il limite è la copertura. Qualsiasi cosa collegata a GnuTLS o NSS ignora OPENSSL_CONF, e così ogni processo helper che il client avvia senza ereditare l’ambiente. Controllate con ldd a quale libreria TLS sia realmente collegato il binario prima di costruire il wrapper, perché la risposta decide se questa opzione esista affatto.
Opzione 3: una VM o un container usa e getta
Per un collaboratore esterno che per due settimane attacca un vecchio gateway, una VM dedicata con la policy allentata è un confine più pulito della workstation. La superficie vecchia e il profilo di navigazione quotidiano smettono di condividere una policy del kernel, e la dismissione è una cancellazione, non un rilievo di audit.
Resta una macchina in rete, quindi limitatene l’accesso e tenetela fuori dalla navigazione generale. Il costo di manutenzione è un’altra immagine da correggere, cosa reale ma circoscritta e visibile, al contrario di un flag LEGACY dimenticato su un portatile.
Che cosa lascia il confronto
Scegliete su tre domande: chi ha bisogno del vecchio protocollo, per quanto tempo, e chi se ne accorgerà se l’eccezione sopravvive alla sua ragione. Un’app, una persona, pochi giorni indicano la configurazione per processo. Un’intera flotta dietro un solo apparato indica il gateway stesso. Qualsiasi cosa richieda una policy LEGACY permanente sull’host è una decisione di acquisto travestita da soluzione tecnica.
La correzione duratura appartiene all’apparato: TLS 1.2 o successivo, un gruppo di almeno 2048 bit, un cifrario AEAD e un certificato con firma moderna. Chiedete quella modifica al proprietario dell’apparato, poi confermate la versione e il cifrario negoziati nel log del client. Annotate l’eccezione con host, gateway, protocollo negoziato, approvatore e una data di scadenza, perché è quella nota a impedire che una soluzione temporanea diventi il valore predefinito.