Domanda

Sto creando un'applicazione e sto pianificando di utilizzare OpenSSL per proteggere i trasferimenti di dati.

Sto pensando di far convalidare solo il client dal certificato del server. Sono confuso su come dovrei proteggere il certificato del server. Vorrei crittografare il certificato del server contenente la chiave privata, ma non voglio usare alcuna chiave codificata per questa crittografia.

Quali sono alcune delle pratiche comuni seguite dalle applicazioni che utilizzano SSL?

È stato utile?

Soluzione

Giusto per essere sicuri che la nostra terminologia sia chiara, un " certificato SSL " nel linguaggio comune è in realtà composto da due componenti:

  • Un certificato pubblico
  • Una chiave privata

Il componente di certificato pubblico è firmato dall'autorità di certificazione (autorità di certificazione) prescelta, dopo di che può essere distribuito liberamente. Non è necessario che sia protetto o crittografato, e in effetti verrà inviato ai client che si connettono al server come parte della negoziazione SSL.

Il componente chiave privata deve essere protetto. Nella maggior parte dei casi, questo è semplicemente archiviato come file crittografato sul server. Le soluzioni di alto livello utilizzano "antimanomissione" dedicato crypto hardware (HSMs - moduli di sicurezza hardware) per memorizzare la chiave privata. Questi vanno da soluzioni basate su smart card a dispositivi multi-chiave, abilitati alla rete con controlli m / n ecc. Ecc. Esistono rischi (per non parlare dei costi) associati agli HSM che non entrerò qui.

Molte applicazioni mantengono semplicemente la chiave privata su disco. Esistono un paio di opzioni per proteggere il file chiave:

  • Affidati alla sicurezza delle autorizzazioni di sistema e file (ovvero non crittografare la chiave privata). Ad esempio, la maggior parte dei demoni ssh lo fanno.
  • Utilizza qualsiasi meccanismo fornito dal tuo server per crittografare il file: la crittografia protetta da password è una funzionalità standard nella maggior parte dei server web. (Se esegui il roll-up usando l'API OpenSSL, scegli uno dei formati di chiave nativa ovvi).

Come sempre, c'è un compromesso di sicurezza. In particolare, se si utilizza la crittografia protetta da password sul file della chiave privata e si verifica un riavvio imprevisto dell'applicazione (ad esempio un'interruzione dell'alimentazione), sarà necessario che qualcuno sia disponibile per fornire la password all'app al riavvio. La memorizzazione della password in un file letto dagli script di inizializzazione del sistema (come incoraggiato da almeno due fornitori di server Web) aggiunge poco in termini di sicurezza reale. È difficile consigliare di non crittografare il file della chiave privata, ma se sei l'unico amministratore / tecnico in un piccolo negozio, dovresti assolutamente considerare cosa potrebbe accadere se il server si riavvia quando non sei disponibile e quali potrebbero essere i costi per la tua azienda .

Altri suggerimenti

non sono sicuro di cosa stai cercando di chiedere. il server cert ti viene inviato, il client; convalidi il certificato controllando la sua firma (usa SHA-1 non MD5, MD5 è stato craccato). La chiave che hai dalla CA è il lato pubblico; la CA e il titolare del certificato del server mantengono le proprie chiavi private per sé. Puoi convalidare il certificato perché la chiave pubblica è sufficiente per decrittografare un messaggio che è stato crittografato con la chiave privata. Quindi non devi preoccuparti, dal lato cient, di mantenere crittografato il certificato.

Dai un'occhiata all'articolo l'articolo di Wikipedia su SSL / TLS .

  

Sono confuso su come dovrei proteggere il certificato del server.

Non è necessario proteggere il certificato del server. È un documento pubblico

  

Vorrei crittografare il certificato del server contenente la chiave privata

Il certificato del server non contiene la chiave privata.

  

ma non voglio usare alcuna chiave codificata per questa crittografia.

Non è necessario eseguire alcuna crittografia. L'unica risorsa server che devi proteggere è la sua chiave privata, che è completamente distinta dal suo certificato. Nel caso di OpenSSL può anche essere un file diverso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top