Sto lavorando su una piccola applicazione web. L'applicazione web richiede l'accesso a un database, quindi l'applicazione deve accedere a un nome utente e una password del database.
L'applicazione viene eseguita in un ambiente in cui le macchine virtuali vengono e vengono e non ci sono dischi persistenti. L'unica configurazione dell'ambiente che possiamo impostare rimane nel tempo sono i certificati, tutte le altre configurazioni devono essere archiviate come parte dell'applicazione (che noi carichiamo al servizio di hosting in un file zip). I certificati che carichiamo ai provider di hosting vengono installati automaticamente nell'archivio certificati di Windows dal provider di hosting.
Il server di database che stiamo usando non supporta l'autenticazione usando i certificati - solo nome utente e password, quindi mi chiedo se il seguente schema abbia senso:
- Creiamo un certificato X509 autofirmato usando openssl o makecert.
- Carichiamo il certificato (con chiave privata) al provider di hosting (lo facciamo una volta o quando vogliamo rinnovare il certificato).
- Cifriamo le password del database nella configurazione dell'applicazione utilizzando la parte chiave pubblica del nostro certificato (utilizzando RSACryptoServiceProvider ).
- Carichiamo la password crittografata in un file di configurazione come parte del nostro pacchetto di applicazioni zip al provider
- Nel nostro codice applicazione, prima di connettersi al server del database, decifriamo la password del database utilizzando il certificato (di nuovo, utilizzando RSACryptoServiceProvider)
Con questo, otteniamo quanto segue:
- Chiunque (io o i miei amici) che lavora con l'applicazione può impostare una nuova password del database, crittografarla e aggiornare la configurazione dell'applicazione, senza accedere alla chiave privata nel certificato.
- Solo le persone con la chiave privata (che è installata sui server e memorizzate localmente da me) possono decodificare la password del database.
Sembra che questa sarebbe una soluzione abbastanza buona, ma sarei grato se qualcun altro potesse individuare un difetto.