Certificati X.509

I certificati X.509 sono documenti digitali che rappresentano un utente, un computer, un servizio o un dispositivo. Un'autorità certificatrice (CA), una CA subordinata o un'autorità di registrazione rilasciano certificati X.509. I certificati contengono la chiave pubblica dell'oggetto del certificato. Non contengono la chiave privata del soggetto, che deve essere memorizzata in modo sicuro. L'RFC 5280 documenta i certificati di chiave pubblica, inclusi i loro campi ed estensioni. I certificati di chiave pubblica sono firmati digitalmente e tipicamente contengono le seguenti informazioni:

  • Informazioni sull'argomento del certificato
  • La chiave pubblica che corrisponde alla chiave privata del soggetto
  • Informazioni sull'AC emittente
  • Gli algoritmi di crittografia e/o firma digitale supportati
  • Informazioni per determinare lo stato di revoca e validità del certificato

Campi certificato

Esistono tre versioni incrementali dello standard certificato X.509, e ogni versione successiva aggiungeva campi di certificato allo standard:

  • La versione 1 (v1), pubblicata nel 1988, segue lo standard iniziale X.509 per i certificati.
  • La Versione 2 (v2), pubblicata nel 1993, aggiunge due campi ai campi inclusi nella Versione 1.
  • La versione 3 (v3), pubblicata nel 2008, rappresenta la versione attuale dello standard X.509. Questa versione aggiunge il supporto per le estensioni dei certificati.

Questa sezione è pensata come riferimento generale per i campi del certificato e le estensioni del certificato disponibili nei certificati X.509. Per ulteriori informazioni sui campi del certificato e sulle estensioni dei certificati, inclusi tipi di dati, vincoli e altri dettagli, consulta la specifica RFC 5280 .

Campi versione 1

La tabella seguente descrive i campi dei certificati della Versione 1 per i certificati X.509. Tutti i campi inclusi in questa tabella sono disponibili nelle versioni successive dei certificati X.509.

Name Descrizione
Versione Un intero che identifica il numero di versione del certificato.
Numero di serie Un intero che rappresenta il numero univoco per ciascun certificato rilasciato da un'autorità certificatrice (CA).
firma L'identificatore per l'algoritmo crittografico utilizzato dalla CA per firmare il certificato. Il valore include sia l'identificatore dell'algoritmo sia eventuali parametri opzionali utilizzati da quell'algoritmo, se applicabile.
Emittente Il nome distinto (DN) della CA che rilascia il certificato.
Validità Il periodo di tempo inclusivo per cui il certificato è valido.
Argomento Il nome distinto (DN) del soggetto del certificato.
Oggetto Informazioni sulla chiave pubblica La chiave pubblica di proprietà del soggetto del certificato.

Campi versione 2

La tabella seguente descrive i campi aggiunti per la Versione 2, contenenti informazioni sull'emittente del certificato. Questi campi, tuttavia, sono raramente utilizzati. Tutti i campi inclusi in questa tabella sono disponibili nelle versioni successive dei certificati X.509.

Name Descrizione
ID unico dell'emittente Un identificatore unico che rappresenta la CA emittente, come definita dalla CA emittente.
ID Unico del Soggetto Un identificatore unico che rappresenta il soggetto del certificato, come definito dalla CA emittente.

Campi della versione 3

La tabella seguente descrive il campo aggiunto per la Versione 3, che rappresenta una raccolta di estensioni dei certificati X.509.

Name Descrizione
Estensioni Una raccolta di estensioni di certificato standard e specifiche per Internet. Per maggiori informazioni sulle estensioni dei certificati disponibili per i certificati X.509 v3, vedi Estensioni dei certificati.

Estensioni dei certificati

Le estensioni dei certificati, introdotte con la Versione 3, forniscono metodi per associare più attributi agli utenti o alle chiavi pubbliche e per gestire le relazioni tra autorità di certificazione. Per ulteriori informazioni sulle estensioni dei certificati, consulta la sezione Estensioni dei Certificati della specifica RFC 5280 .

Estensioni standard

Lo standard X.509 definisce le estensioni incluse in questa sezione, per l'uso nell'infrastruttura di chiave pubblica di Internet (PKI).

Name Descrizione
Identificatore della chiave dell'autorità Un identificatore che rappresenta o l'oggetto del certificato e il numero di serie del certificato CA che ha rilasciato questo certificato, oppure un hash della chiave pubblica della CA emittente.
Identificatore chiave oggetto Un hash della chiave pubblica del certificato corrente.
Utilizzo delle chiavi Un valore bitmap che definisce i servizi per cui un certificato può essere utilizzato.
Periodo di utilizzo della chiave privata Il periodo di validità della parte chiave privata di una coppia di chiavi.
Politiche sui certificati Una raccolta di informazioni sulle polizze, usata per convalidare l'oggetto del certificato.
Mappature delle politiche Una raccolta di policy mapping, ognuna delle quali mappa una policy in un'organizzazione a una policy in un'altra.
Nome alternativo soggetto Una raccolta di nomi alternativi per il soggetto.
Nome alternativo dell'emittente Una raccolta di nomi alternativi per la CA emittente.
Attributi della Directory degli Soggetti Una raccolta di attributi da una directory X.500 o LDAP.
Vincoli di base Un insieme di vincoli che permettono al certificato di indicare se viene rilasciato a una CA, o a un utente, computer, dispositivo o servizio. Questa estensione include anche un vincolo sulla lunghezza del percorso che limita il numero di CA subordinate che possono esistere.
Vincoli di nome Un insieme di vincoli che indicano quali namespace sono consentiti in un certificato rilasciato dalla CA.
Vincoli politici Un insieme di vincoli che possono essere utilizzati per vietare la mappatura delle policy tra le CA.
Uso esteso delle chiavi Una raccolta di valori di scopo chiave che indicano come la chiave pubblica di un certificato può essere utilizzata, oltre agli scopi identificati nell'estensione di Uso della Chiave .
Punti di distribuzione CRL Una raccolta di URL in cui viene pubblicata la lista base di revoca dei certificati (CRL).
Inibire qualsiasi politica Inibisce l'uso dell'OID All Isliance Policies (2.5.29.32.0) nei certificati CA subordinati
CRL più fresco Questa estensione, nota anche come Delta CRL Distribution Point, contiene uno o più URL in cui viene pubblicato il delta CRL della CA emittente.

Estensioni Internet private

Le proroghe incluse in questa sezione sono simili alle estensioni standard e possono essere utilizzate per indirizzare le domande a informazioni online riguardanti l'oggetto emittente della CA o del certificato.

Name Descrizione
Accesso alle informazioni dell'autorità Una raccolta di voci che descrivono il formato e la posizione delle informazioni aggiuntive fornite dalla CA emittente.
Accesso alle informazioni dell'argomento Una raccolta di voci che descrivono il formato e la posizione delle informazioni aggiuntive fornite dal soggetto del certificato.

Formati dei certificati

I certificati possono essere salvati in vari formati. hub IoT di Azure autenticazione utilizza tipicamente i formati Privacy-Enhanced Mail (PEM) e Personal Information Exchange (PFX). La tabella seguente descrive i file e i formati comunemente usati per rappresentare i certificati.

Formato Descrizione
Certificato binario Un certificato binario grezzo utilizzando la codifica ASN.1 delle Distinguished Encoding Rules (DER).
Formato ASCII PEM Un file di certificato PEM (.pem) contiene un certificato codificato in Base64 che inizia e -----BEGIN CERTIFICATE----- termina con -----END CERTIFICATE-----. Uno dei formati più comuni per i certificati X.509, il formato PEM è richiesto da hub IoT quando carica determinati certificati, come i certificati dei dispositivi.
Chiave PEM ASCII Contiene una chiave DER codificata in Base64, opzionalmente con più metadati sull'algoritmo utilizzato per la protezione tramite password.
Certificato PKCS #7 Un formato progettato per il trasporto di dati firmati o criptati. Può includere l'intera catena di certificati. La RFC 2315 definisce questo formato.
Tasto PKCS #8 Il formato per un negozio di chiavi private. L'RFC 5208 definisce questo formato.
Chiave e certificato PKCS #12 Un formato complesso che può memorizzare e proteggere una chiave e l'intera catena di certificati. È comunemente usato con un'estensione .p12 o .pfx. PKCS #12 è sinonimo del formato PFX. La RFC 7292 definisce questo formato.

Certificati autofirmati

Puoi autenticare un dispositivo al tuo hub IoT per scopi di test utilizzando due certificati autofirmati. Questo tipo di autenticazione è talvolta chiamato autenticazione tramite impronta digitale perché i certificati sono identificati da valori hash calcolati chiamati impronte digitali o impronte digitali. Questi valori di hash calcolati sono utilizzati da hub IoT per autenticare i tuoi dispositivi.

Importante

Consigliamo di utilizzare certificati firmati da un'Autorità di Certificazione (CA) emittente, anche per scopi di test. Non usare mai certificati autofirmati in produzione.

Creare un certificato autofirmato

È possibile usare OpenSSL per creare certificati autofirmato. I passaggi seguenti ti mostrano come eseguire comandi OpenSSL in una bash shell per creare un certificato autofirmato e recuperare un'impronta digitale del certificato che può essere utilizzata per autenticare il tuo dispositivo in hub IoT.

Note

Se vuoi usare certificati autofirmati per i test, devi creare due certificati per ogni dispositivo.

  1. Esegui il seguente comando per generare una chiave privata e creare un file di chiave privata (.key) codificata in PEM, sostituendo i seguenti segnaposto con i loro valori corrispondenti. La chiave privata generata dal seguente comando utilizza l'algoritmo RSA con crittografia a 2048 bit.

    {KeyFile}. Il nome del tuo file di chiave privata.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Esegui il seguente comando per generare una richiesta di firma del certificato PKCS #10 (CSR) e crea un file CSR (.csr), sostituendo i seguenti segnaposto con i loro valori corrispondenti. Assicurati di specificare l'ID del dispositivo IoT per il certificato autofirmato quando ti viene richiesto.

    {KeyFile}. Il nome del tuo file di chiave privata.

    {CsrFile}. Il nome del tuo file CSR.

    {DeviceID}. Il nome del tuo dispositivo IoT.

    openssl req -new -key {KeyFile} -out {CsrFile}
    
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:{DeviceID}
    Email Address []:.
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:.
    An optional company name []:.
    
  3. Esegui il seguente comando per esaminare e verificare il tuo CSR, sostituendo i seguenti segnaposto con i loro valori corrispondenti.

    {CsrFile}. Il nome del tuo file certificato.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Esegui il seguente comando per generare un certificato autofirmato e creare un file di certificato codificato in PEM (.crt), sostituendo i seguenti segnaposto con i loro valori corrispondenti. Il comando converte e firma il tuo CSR con la chiave privata, generando un certificato autofirmato che scade entro 365 giorni.

    {KeyFile}. Il nome del tuo file di chiave privata.

    {CsrFile}. Il nome del tuo file CSR.

    {CrtFile}. Il nome del tuo file certificato.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Esegui il seguente comando per recuperare l'impronta digitale del certificato, sostituendo i seguenti segnaposto con i relativi valori. L'impronta digitale di un certificato è un valore hash calcolato che è unico per quel certificato. Serve l'impronta digitale per configurare il tuo dispositivo IoT in hub IoT per i test.

    {CrtFile}. Il nome del tuo file certificato.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Verifica manualmente il certificato dopo il caricamento

Quando carichi il certificato dell'autorità di certificazione root (CA) o il certificato CA subordinato sul tuo hub IoT, puoi scegliere di verificare automaticamente il certificato. Se non hai scelto di verificare automaticamente il certificato durante il caricamento, il certificato viene mostrato con lo stato impostato su Non verificato. Devi eseguire i seguenti passaggi per verificare manualmente il tuo certificato.

  1. Seleziona il certificato per visualizzare la finestra di dialogo Dettagli del Certificato .

  2. Seleziona Genera codice di verifica nella finestra di dialogo.

    Screenshot che mostra la finestra di dialogo dettagli del certificato.

  3. Copia il codice di verifica negli appunti. Devi utilizzare questo codice di verifica come soggetto del certificato nei passaggi successivi. Ad esempio, se il codice di verifica è 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3, aggiungilo come oggetto del tuo certificato come mostrato nel passo successivo.

  4. Ci sono tre modi per generare un certificato di verifica:

    • Se stai usando lo script PowerShell fornito da Microsoft, esegui New-CACertsVerificationCert "<verification code>" la creazione di un certificato chiamato VerifyCert4.cer, sostituendolo <verification code> con il codice di verifica generato in precedenza. Per altre informazioni, vedere Gestione dei certificati CA di prova per esempi e certificazioni nel repository GitHub per l'SDK per dispositivi dell'hub IoT di Azure per C.

    • Se stai usando lo script Bash fornito da Microsoft, esegui ./certGen.sh create_verification_certificate "<verification code>" la creazione di un certificato chiamato verification-code.cert.pem, sostituendolo <verification code> con il codice di verifica generato in precedenza. Per maggiori informazioni, consulta Managing test CA certificates per esempi e tutorial nel repository GitHub per l'hub IoT di Azure Device SDK for C.

    • Se stai usando OpenSSL per generare i tuoi certificati, devi prima generare una chiave privata, poi un file di richiesta di firma certificati (CSR). Nel seguente esempio, sostituisci <verification code> con il codice di verifica generato in precedenza:

    openssl genpkey -out pop.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
    openssl req -new -key pop.key -out pop.csr
    
    -----
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:<verification code>
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    

    Successivamente, crea un certificato utilizzando il file di configurazione appropriato per la CA radice o per la CA subordinata, e il file CSR. Il seguente esempio dimostra come utilizzare OpenSSL per creare il certificato da un file di configurazione CA radice e dal file CSR.

    openssl ca -config rootca.conf -in pop.csr -out pop.crt -extensions client_ext
    

    Per maggiori informazioni, consulta il Tutorial - Crea e carica certificati per i test.

  5. Seleziona il nuovo certificato nella vista Dettagli del Certificato .

  6. Dopo il caricamento del certificato, seleziona Verifica. Lo stato del certificato dovrebbe cambiare in Verificato.

Per altre informazioni

Per maggiori informazioni sui certificati X.509 e su come vengono utilizzati in hub IoT, consulta i seguenti articoli: