Come viene inclusa la chiave pubblica nella CSR?

Aug 21 2020

Ho letto molti articoli sugli argomenti PKI e certificati digitali perché è molto raro trovare un articolo che copra tutti gli aspetti; anche l'argomento all'inizio è confuso (questa bellissima domanda è la mia ultima lettura: come funzionano i certificati in termini di crittografia, hashing e firma? ).

Ho disegnato questo grafico dal mio punto di comprensione: https://i.stack.imgur.com/sI7Od.png

Ho 2 domande:

  1. In realtà non capisco come la chiave pubblica e il testo cifrato siano "impacchettati" insieme (è il modo migliore a cui potrei pensare per passare al passaggio successivo!), Alla fine il file * .csr è solo un semplice base64, sono crittografati insieme, quindi l'ordine dei passaggi nel disegno è impreciso?

  2. Per verificare l'identità del mittente (ad esempio dal browser web), dovrebbe avere una copia della CSR, ma secondo la mia comprensione, il certificato ha solo l'hash?

Modifiche:

  1. Questo video potrebbe aiutare a comprendere la codifica ANS.1: https://www.youtube.com/watch?v=EccHushRhWs

  2. Ho corretto il diagramma, seguendo la risposta di Marc qui e qui e le specifiche nei campi IETF / Basic Certificate :

Risposte

5 Marc Aug 21 2020 at 21:35

Hai alcune idee sbagliate nel tuo diagramma.

La cosa più importante è che entrambe le encryptscatole siano sbagliate, dovrebbero dirlosign . A seguito di ciò, il CSR inviato alla CA include i vari campi (incluso Oggetto) e la chiave pubblica del soggetto , non c'è testo cifrato coinvolto solo dati semplici e una firma.

RFC2986: PKCS # 10: sintassi della richiesta di certificazione descrive in dettaglio i passaggi per creare una CSR:

The process by which a certification request is constructed involves the following steps:

        1. A CertificationRequestInfo value containing a subject
           distinguished name, a subject public key, and optionally a
           set of attributes is constructed by an entity requesting
           certification.

        2. The CertificationRequestInfo value is signed with the subject
           entity's private key.  (See Section 4.2.)

        3. The CertificationRequestInfo value, a signature algorithm
           identifier, and the entity's signature are collected together
           into a CertificationRequest value, defined below.

La chiave pubblica del soggetto (nel tuo caso: richiedente) è inclusa letteralmente nella CSR, così come le informazioni sul soggetto. Questo viene firmato utilizzando la chiave pubblica del soggetto e tutto viene inviato alla CA.

Non in forma di diagramma, ma qui ci sono i passaggi per costruire la CSR e quali dati sono inclusi: I passaggi corretti per costruire la CSR (non in forma di diagramma) sono:

  • Costruisci un CertificationRequestInfoutilizzo:
    • Subject Distinguished Name
    • Subject Public Key
    • Other attributes
  • Ottieni Signaturefirmando l' CertificationRequestInfoutilizzo Subject Public Keye un particolare algoritmo Signature Algorithm.
  • Costruisci un CSRoggetto includendo:
    • CertificationRequestInfo
    • Signature
    • Signature Algorithm
  • Invia questo CSRBLOB alla CA.

Si noti che la CSR contiene ancora testo in chiaro CertificationRequestInfoeSubject Public Key .

Al ricevimento CSR, la CA farà più o meno quanto segue:

  • analizzare la CSR
  • verificare che la firma corrisponda ai campi della CSR utilizzando la chiave pubblica del soggetto
  • verifica che i vari campi corrispondano ai suoi requisiti (es: non puoi chiedere CN=google.comsenza dimostrare di essere il proprietario del dominio)
  • creare un certificato utilizzando alcuni campi dalla CSR, alcuni da se stesso
  • firmare il certificato utilizzando la sua chiave privata (l'emittente)

Il certificato finale contiene ancora i campi dell'oggetto e la chiave pubblica del soggetto.

Per rispondere in modo più specifico alle tue due domande:

  1. la chiave pubblica del soggetto è uno dei campi della CSR . Niente è criptato, solo firmato.
  2. I campi dell'oggetto vengono copiati nel certificato finale , sono visibili a qualsiasi cliente.

È possibile visualizzare l'elenco dei campi del certificato in RFC5280 . Non c'è hash della CSR perché non ce n'è bisogno, tutte le informazioni rilevanti sono state copiate nei propri campi del certificato.