Ho dispositivi incorporati che si trovano in citi diverse e sono collegati al mio server OpenVPN. Inizializzo i miei dispositivi prima di distribuirli e inserire la coppia di certificati / chiavi attraverso la rete locale. Quando i dispositivi passano online sul sito remoto, sono collegati al mio server openVPN tramite tunnel privato. Sto usando la versione OpenVPN: 2.3.10 con EasyRSA su Ubuntu 16.04 LTS
Ora i certificati stanno per scadere. Come posso rinnovare i certificati su questi dispositivi? Sto pensando a 2 approcci.
Approccio 1) Uno script sul dispositivo che verifica la validità del certificato ogni mese circa e quando il certificato sta per scadere dovrebbe inviare una richiesta di generazione del certificato (una richiesta https standard o simile). Sul lato server, devono essere offerte solo le richieste provenienti dal tunnel privato. Un certificato / chiave con lo stesso CN dovrebbe essere generato e trasferito al client.
Problemi con apporach 1)
- In che modo la coppia cert / chiave deve essere trasferita in modo sicuro? Non voglio scambiare la chiave privata dei clienti via rete.
- L'intero processo dovrebbe essere automatizzato in modo da non poter inserire la chiave manualmente.
- Come deve essere generata la chiave / chiave sul server? Inoltre, non desidero che l'utente web di Apache i.e www-data abbia accesso alla mia cartella easyRSA.
Approccio 2) Genera chiave privata sul lato client (il mio dispositivo incorporato). Creare una richiesta di firma del certificato (CSR) inviarlo al server OpenVPN (che è anche la mia CA). La CA genera un certificato e restituisce il certificato del cliente.
Problemi con apporach 2)
-
Come autenticare la CSR? come faccio a sapere che il CSR proviene dal mio dispositivo incorporato e non da un malintenzionato. L'unico modo che posso assicurare è se il CSR proviene dal tunnel privato.
-
Nel caso in cui il certificato sul mio dispositivo incorporato scada prima del rinnovo, il tunnel privato non esisterebbe. Come posso autenticare la RSI in questo caso? Qualsiasi persona con CA.crt (chiave pubblica CA) può generare una chiave privata e inviare un CSR a CA.
Penso che l'approccio 2 sia più ragionevole e sicuro, ma non conosco la soluzione ai problemi che sto affrontando. Voglio sapere se ho una corretta comprensione della sicurezza? o se c'è qualcosa che mi manca. Inoltre se vado con l'approccio 2, come sarebbe l'implementazione? Conosco la teoria ma non so come creare CSR e inviarlo a CA. E su CA termina come ricevere un CSR e generare un certificato e inviarlo di nuovo.