Attualmente sto sviluppando un'applicazione per Android che consentirà agli utenti di eseguire il backup dei loro dati su un server, che sto sviluppando anche in Java. Ho praticamente completato lo sviluppo delle funzionalità come il trasferimento dei file, la registrazione e l'accesso e così via (database MySQL che registra i dati degli utenti e delle password) e così via. Mi sono fermato nel mio sviluppo quando ho cercato di implementare funzionalità di sicurezza. Voglio utilizzare la crittografia asimmetrica per l'autenticazione e la crittografia simmetrica per crittografare le comunicazioni tra client e server. Quindi, ecco l'accordo:
La comunicazione tra client e server verrà eseguita utilizzando AES. Questo si basa su una chiave pre-condivisa tra entrambe le parti. Questa chiave pre-condivisa verrà generata sul lato client ogni volta che viene avviata una sessione e verrà inviata al server, crittografata utilizzando la chiave pubblica dei server. In questo modo, solo il server che possiede la chiave privata sarà in grado di decifrare la chiave pre-condivisa e leggere la comunicazione. Dove sono un po 'confuso è la condivisione della chiave pubblica dei server. Ora so che il modo migliore per farlo è usare un certificato digitale contenente la chiave pubblica dei server. So anche che questo certificato dovrebbe provenire da una CA affidabile.
La mia domanda è: come posso ottenere un certificato digitale per il mio server? La mia applicazione Android richiederà questo certificato dal server o dalla CA? Il mio pensiero iniziale è che deve ricevere questo certificato da una CA, come se lo ricevesse dal server, potrebbe essere fraudolento. Qual è il processo e il modo corretto di fare questo? Ovunque io legga, parla solo della connessione HTTPS dal client al server Web. Sto scrivendo un server in Java che comunicherà tramite prese con la mia applicazione Android. Come faccio a creare, ricevere e verificare i certificati in relazione alle CA di fiducia?
Grazie