Codifica del traffico HTTP locale utilizzando un certificato autofirmato

12

Da un paio d'ore ho cercato di creare un certificato autofirmato che mi piacerebbe utilizzare per crittografare il traffico HTTP tra computer e un server sulla mia rete domestica (perché sono paranoico in quel modo) . Tuttavia, non sono sicuro di farlo correttamente perché continuo a ricevere avvisi di sicurezza nei miei browser web. Soprattutto a Google Chrome non piace quello che sto facendo.

Speriamo che qualcuno più esperto possa fornire una guida.

Il mio server (una Synology DiskStation) può essere raggiunto sia internamente (tramite il suo indirizzo IP locale o nome host), sia tramite internet (tramite un indirizzo IP pubblico o nome DNS). Sfortunatamente, l'indirizzo IP pubblico è dinamico. Tuttavia, un servizio in esecuzione sul mio server aggiorna la voce DNS ogni 60 minuti.

Quello che ho fatto è che ho usato OpenSSL per generare un certificato X.509 autofirmato (usando le impostazioni predefinite per la maggior parte). Non ho specificato un CN (Common Name), perché durante i test precedenti ho scoperto che avrebbe causato ancora più avvisi di sicurezza durante l'accesso al server internamente. Invece, ho incluso il nome DNS, il nome host e l'indirizzo IP locale nel campo dell'estensione subjectAltName .

Il certificato del mio server ora appare così: link

Ho quindi provveduto a installare questo certificato nell'archivio certificati Autorità di certificazione fonti attendibili sul mio computer Windows. Ora posso accedere al server web utilizzando HTTPS, ma non senza preavviso.

Gli errori includono:

  • (Google Chrome) Server's certificate does not match the URL. (quando si utilizza il nome host)
  • (Google Chrome) The identity of this website has not been verified. (quando si utilizza l'IP locale)
  • (Internet Explorer) The security certificate presented by this website was issued for a different website's address. (quando si utilizza l'IP locale)

Questi avvisi ritornano ogni volta che riavvio il browser. Se accedo al web server da internet (usando il nome DNS), nessuno dei miei browser si lamenta e tutto va bene.

Posso generare certificati per uso interno che non attivano tali errori? Apprezzerei molto il tuo aiuto.

    
posta Steven Liekens 12.01.2013 - 02:04
fonte

1 risposta

6

Quando si esegue l'accesso SSL a un server, il client esegue le seguenti verifiche:

  1. Il client convalida il certificato rispetto alle "ancore di fiducia" locali, note anche come "CA radice", che sono incorporate nel client (il browser o il sistema operativo) . La convalida riguarda la costruzione di una catena di certificati da un'ancora fidata fino al certificato del server SSL, ogni certificato che firma il successivo. Algoritmo è un po 'complesso nei suoi dettagli (sezione 6 di RFC 5280 ).

  2. Il client verifica che il nome del server previsto appaia nel certificato del server (la convalida gli dice che si tratta di un certificato valido per alcuni server, questo passo riguarda la verifica che sia il server giusto, non altri). Questo passaggio è descritto in RFC 2818 .

Per il primo passaggio, devi dire al tuo sistema client che dovrebbe accettare come valido il certificato autofirmato. Dal momento che parli di Internet Explorer, deduco un sistema operativo Windows; vedi questa risposta per come farlo (poiché Chrome utilizza anche gli archivi fiducia del sistema operativo, è probabile che lo risolva per Anche Chrome).

Per il secondo passaggio, devi utilizzare un URL con un nome server (non l'indirizzo IP) che corrisponda al nome di tipo dNSName che appare nell'estensione Subject Alt Name del certificato ( quando non c'è dNSName in quell'estensione o quando manca l'estensione, viene utilizzato Common Name nel campo subjectDN ). Se l'URL è simile a questo:

https://www.example.com/path/to/whatever.html

allora il browser proverà a trovare www.example.com nel certificato. Se lo trova non , allora ti verrà richiesto un avvertimento spaventoso, come prova.

Potrebbe essere necessario giocare un po 'con le impostazioni DNS in modo che lo stesso nome possa essere utilizzato indipendentemente dal luogo in cui ci si trova. Ricorda che è un abbinamento nome : non funziona con gli indirizzi IP. Inoltre, tieni presente che puoi inserire diversi nomi di tipo dNSName in un'estensione Subject Alt Name , utile per i server SSL che devono essere contattati con diversi nomi.

    
risposta data 12.01.2013 - 15:12
fonte

Leggi altre domande sui tag