Un CSR consente a un utente di ottenere un'autorità di certificazione (CA) per fornire loro un certificato firmato, senza che la CA conosca effettivamente la chiave privata dell'utente. Un cert X.509 ha alcuni pezzi importanti: il soggetto (a chi è destinata la cert), il periodo di validità del cert, gli usi consentiti del cert, la chiave pubblica del soggetto e la firma dell'emittente (cioè una firma generata utilizzando il problema chiave privata, in cui l'emittente è generalmente una CA). Un CSR ha la maggior parte di queste informazioni, tranne che manca del cert dell'emittente (perché è generato dall'utente - che di solito è il soggetto - e inviato all'emittente, quindi non può ancora avere la firma dell'emittente). La CA firma il CSR, trasformandolo da una richiesta di firma del certificato in un certificato firmato.
La cosa bella è, per fare questo, l'emittente non deve mai vedere la chiave privata del soggetto, solo quella pubblica (che è, ovviamente, pubblica). L'utente deve avere una chiave privata corrispondente per la chiave pubblica inviata, altrimenti non sarebbe in grado di utilizzare il certificato restituito per nulla, ma l'emittente (vale a dire la CA) non deve sapere cosa quella chiave privata è.
Questa è un'alternativa migliore all'approccio semplice e ingenuo, che sarebbe l'emittente stesso a generare le coppie di chiavi pubblico-private, quindi a costruire un certificato con quella chiave pubblica, a firmarlo e a inviare sia il certificato che la chiave privata per l'utente. I problemi con questo:
- La CA conoscerebbe la tua chiave privata, almeno finché non l'avessero dimenticata / cancellata. Idealmente, nessuno altro dovrebbe mai conoscere la tua chiave privata.
- La chiave privata dovrebbe essere trasmessa in modo molto sicuro (in modo che una terza parte non possa intercettarla); questo è difficile. Meglio non trasmetterlo affatto.
- L'utente potrebbe voler generare la chiave in un modo particolare, ad esempio utilizzando un generatore di numeri casuali di cui si fidano particolarmente, piuttosto che affidarsi alla CA per produrre una chiave di qualità accettabile. (Devi aspettarti che gli altri si fidino della chiave master della CA - altrimenti la loro firma sul tuo cert non ha senso - ma non dovresti fidarti di loro per generare effettivamente la tua chiave in modo appropriato.)
- L'utente potrebbe voler riutilizzare una chiave pubblica esistente, ad esempio per mantenere valide le vecchie firme se un certificato esistente scadrà ma si ritiene che la chiave sia ancora sicura. Utilizzando una CSR, puoi sostanzialmente ottenere un certificato emesso di nuovo con un nuovo periodo di validità, usi consentiti (OID), ecc. Anche se non aggiorni la chiave.
I CSR sono ciò che rende possibile evitare tutti questi problemi.