Certificati dei client autofirmati e loro distribuzione, è la seguente procedura audio?

4

Ho un caso a portata di mano come segue:

  1. C'è un numero di client in Internet (cioè un canale non affidabile), inizialmente in centinaia ma in numero crescente.
  2. C'è un server che esegue l'elaborazione relativa a questi client. Questa relazione viene stabilita prima altrove, ad esempio un portale web.
  3. I client dovrebbero essere in grado di connettersi al server tramite un software (non gestito dall'utente, ad esempio non un browser) su Internet per caricare il materiale in modo che il canale sia crittografato e che il server sappia quale client è connesso .
  4. Non dovrebbe esserci un problema che i clienti potrebbero affermare di non aver richiesto il materiale quando è stata effettuata una connessione e il materiale è stato trasmesso. Come una modifica relativa alla domanda di Thomas sul non ricevere materiale quando lo facevano: se dovessi usare qui una password semplice, ci sarebbe il pericolo che la password si diffonda più facilmente del cert e qualcun altro che la usa per ottenere il materiale essere trasferito? Tuttavia, ho pensato di mitigarlo contro una situazione del genere usando questo "id di sequenza" (vedi il punto 6 nella seguente lista), che probabilmente aiuta con o senza i certificati.
  5. Il client non accetta mai le connessioni in entrata. Li avvia solo a questo server ben noto.
  6. Quelli che gestiscono i client di solito non hanno i loro certificati emessi da qualche autorità di certificazione.
  7. Il programma del processore server ha un certificato rilasciato da un'autorità di certificazione (ad esempio Thawte).

Domanda: quale sarebbe un buon modo per ottenere questo risultato in modo sicuro e gestibile?

Per quanto ne so, non esiste alcun software PKI che possa essere utilizzato. Ho pianificato quanto segue:

  1. Consenti ai client di scaricare il software di trasferimento, ad esempio dal portale. Il portale può includere un file di impostazioni con un ID client di qualche tipo (e, ad esempio, una password monouso vedere il punto 4).
  2. Quando il client installa il software di trasferimento sul server, genera un certificato autofirmato con l'ID client nel CN. Ad esempio makecert -r -n "CN=SomeClientId" -pe -ss my .
  3. Questo software invia l'identificazione personale del certificato generato al server insieme all'ID client e utilizza una password monouso ottenuta altrove (vedi punto 1).
  4. Il server memorizza l'identificazione personale insieme all'ID client.
  5. Ora, quando il software di trasferimento si connette al server, può verificare a quale client appartiene tramite l'impronta digitale trasmessa e il canale è protetto.
  6. Per maggiore sicurezza il server mantiene un numero di sequenza che deve corrispondere a quello di un rispettivo client di trasferimento. Se non vengono sincronizzati, si sospetta una violazione e il client deve almeno andare al portale per reimpostare il contatore e reimpostare nel software di trasferimento (ad esempio, impostare 0 nel file delle impostazioni).

Questo sembra un arrangiamento sonoro? Ci sarebbe uno migliore? Sembra che se l'accesso di determinati client deve essere negato, è sufficiente impostare un flag nel database del server per indicare che una determinata identificazione personale non è più consentita. Navigando attraverso SE, mi sono imbattuto in Come distribuire il client certificati senza esporre la chiave privata? . Prendendo spunto dalla risposta di Thomas Pornin , vedo che potrei modificare questo processo in modo tale da generare il certificato. Come per un esempio:

  1. Crea il file someclient.inf con i parametri appropriati (in Windows, altrimenti in altri sistemi operativi, ad esempio usando openssl).
  2. Esegui certreq -new someclient.inf request.csr per creare il file di richiesta.
  3. Invia il csr al server usando la password monouso.
  4. Il server riceve e csr file e crea il certificato, salva l'identificazione personale e restituisce il certificato.
  5. Il client installa facoltativamente il certificato con certreq -accept someclient.cer .

Un'altra domanda: questo porterebbe ulteriori vantaggi oltre alla procedura che ho delineato inizialmente (ed è una procedura valida)?

Domande addizionali: non mi è chiaro su come il server dovrebbe fare la firma. Quale programma? Con quali parametri? Ma forse queste dovrebbero essere altre domande se questa procedura è utilizzabile.

Come nota: potrebbe non essere possibile accedere a tutto il software sulla riga di comando o scrivere il codice sul lato client, quindi forse dovrò ricorrere a qualcosa come BouncyCastle .

    
posta Veksi 08.08.2014 - 15:20
fonte

1 risposta

2

Il tuo punto 4 è un po 'oscuro: è un problema se i clienti iniziano a sostenere di non aver ricevuto il "materiale", mentre in effetti lo hanno fatto?

Se è non un problema, allora ciò di cui hai bisogno è fondamentalmente:

  • Una connessione SSL al tuo server. Il certificato del server deve essere riconoscibile come valido dai client. Poiché il software client è sotto il tuo controllo, non è necessario un certificato da una CA commerciale esterna (come Thawte); quello di cui hai bisogno è un certificato che sarà accettato dal software client. È possibile creare il proprio certificato autofirmato per il server, purché si incorpori una copia di tale certificato nel codice client e il client verifichi che il certificato inviato dal server sia bit-to-bit uguale a quello previsto .

  • Alcuni valori segreti specifici del client S memorizzati sul lato client. Questo valore può essere pensato come una sorta di password, tranne per il fatto che nessun cervello umano è coinvolto nell'operazione, può essere strong - ad esempio, una stringa arbitraria a 128 bit, generata in modo casuale e uniforme. Il client memorizza S e il server memorizza h (S) (per qualche funzione di hash h () ).

  • Quando il client si connette, invia S al server attraverso la connessione SSL. Il server calcola h (S) e lo cerca nel suo database, per sapere quale client è connesso.

Non è necessario aggiungere un certificato sul lato client in questo modello. È possibile , ma ciò non apporta ulteriori vantaggi al modello di sicurezza. Un buon motivo per utilizzare i certificati client è quello di interoperare con gli elementi hardware progettati per i certificati (smart card); finché rimani sul lato software delle cose, un semplice valore segreto farà il trucco (in ogni caso, il client ha per memorizzare qualche valore segreto, ad esempio la sua chiave privata se possiede un certificato ).

    
risposta data 11.08.2014 - 22:34
fonte