Scenario: creare un'istanza Digital Twin che utilizzi un certificato mTLS

Se ricevi dati da un dispositivo, devi utilizzare l'autenticazione con la tua istanza digital twin. Questo scenario spiega come utilizzare un certificato per autenticare un'istanza gemella digitale per un dispositivo.

Mutual TLS (mTLS) è un protocollo di sicurezza che garantisce sia il client che il server autenticano l'identità l'uno dell'altro durante la comunicazione. A differenza di TLS standard, che esegue l'autenticazione solo del server, mTLS aggiunge un livello di sicurezza richiedendo sia al client che al server di presentare certificati validi. In alternativa, se si sta impostando un ambiente di test, è possibile utilizzare un segreto per autenticare l'istanza gemella digitale.
  1. Crea chiave
  2. Crea un'autorità di certificazione
  3. Genera una nuova chiave privata
  4. Creare un certificato gestito esternamente
  5. Creare un'istanza digital twin che utilizza un certificato
  6. Ottenere i dettagli dell'istanza di un gemello digitale
  7. Eseguire la sottoscrizione a un argomento utilizzando MQTTx
  8. Visualizza dati dispositivo in APEX

Best practice
  • Ruota spesso i certificati.
  • Limita i periodi di validità del certificato.
  • Memorizzare le chiavi private utilizzando Valori predefiniti.
  • Monitorare e controllare i tentativi di connessione.

Informazioni preliminari

Assicurarsi di disporre delle autorizzazioni necessarie. Un amministratore concede l'accesso creando i criteri necessari. Per ulteriori informazioni, vedere Prerequisiti per i criteri richiesti per i certificati e Dettagli dei criteri per la piattaforma Internet of Things (IoT) per i criteri richiesti per le risorse IoT.

Criteri certificato

Quando si crea un'istanza digital twin se si utilizza un certificato per l'autenticazione, è necessario disporre del criterio seguente in modo che il dominio IoT possa leggere il certificato.

Consentire a qualsiasi utente IoT di leggere i certificati in un compartimento specifico per un dominio IoT:
Allow any-user to {CERTIFICATE_BUNDLE_READ, CERTIFICATE_READ} in compartment <compartment-name> where request.principal.type = 'iotdomain'
Allow any-user to {CERTIFICATE_AUTHORITY_BUNDLE_READ, CERTIFICATE_AUTHORITY_READ} in compartment <compartment-name> where request.principal.type = 'iotdomain'
Allow any-user to {CABUNDLE_READ} in compartment <compartment-name> where request.principal.type = 'iotdomain'

Passo 1: creazione di una Chiave

Devi disporre di una chiave di cifratura simmetrica protetta dall'hardware esistente in Oracle Cloud Infrastructure (OCI). Per verificare se si dispone di una chiave di cifratura principale o per crearne una nuova:

  1. Andare a Identità e sicurezza, quindi selezionare Vault.
  2. Selezionare il compartimento che si desidera utilizzare per le risorse IoT.
  3. Per creare una chiave, selezionare Crea chiave e seguire le istruzioni in Creazione di una chiave di cifratura master.
  4. In alternativa, dalla lista Valori predefiniti, selezionare il menu Azioni accanto al vault che si desidera utilizzare, quindi selezionare Visualizza dettagli vault.
  5. Selezionare Chiavi di cifratura principali per visualizzare Chiavi. Selezionare Visualizza dettagli chiave per trovare la modalità di protezione e confermare che si tratta di HSM (Hardware Security Module).

Passo 2: Creare un'autorità di certificazione

Utilizzare il servizio Certificati per creare un'autorità di certificazione radice (CA) o una CA subordinata. Per ulteriori informazioni, vedere Creazione di un'autorità di certificazione.

Questo task di esempio spiega come emettere un certificato con una chiave privata gestita esternamente utilizzando una CA subordinata.

È necessario disporre già di una CA radice per creare una CA subordinata.

  1. Eseguire il login come amministratore con i criteri corretti per eseguire queste azioni. Per creare una CA, è necessario disporre del livello di accesso di sicurezza appropriato.
  2. Nella pagina di elenco Autorità di certificazione, selezionare Crea autorità di certificazione. Per assistenza nella ricerca della pagina di elenco, vedere Elenca autorità di certificazione.
  3. Selezionare Compartimento, quindi selezionare il compartimento in cui si desidera creare la CA.
  4. In Tipo di autorità di certificazione, selezionare il tipo Autorità di certificazione subordinata: qualsiasi CA che non sia la CA principale in una gerarchia contenente altre CA.
  5. (Facoltativo) Immettere un nome di visualizzazione univoco per la CA. Questo nome consente di identificare la CA per scopi amministrativi, ma non viene visualizzato come parte del certificato CA. Evitare di fornire informazioni riservate.
    Nota

    Nessun due CA in una tenancy può condividere lo stesso nome, incluse le CA in attesa di eliminazione.
  6. (Facoltativo) Per applicare le tag, selezionare Mostra opzioni di applicazione tag. Per ulteriori informazioni sulle tag, vedere Tag risorsa.
  7. Selezionare Next.
  8. Immettere le informazioni sull'oggetto. Le informazioni sull'oggetto includono almeno un nome comune (CN) per identificare il proprietario del certificato CA. A seconda dell'uso previsto del certificato, il soggetto potrebbe identificare una persona, un'organizzazione, un endpoint del computer o un dispositivo. Il formato delle informazioni sull'oggetto deve essere conforme agli standard RFC 5280. È possibile utilizzare i caratteri jolly per emettere un certificato per più nomi di dominio o sottodominio.
  9. Selezionare Next.
  10. In Configurazione dell'autorità, confermare o selezionare il vault contenente la chiave di cifratura che si desidera utilizzare per il certificato CA. Facoltativamente, selezionare Modifica compartimento per specificare un compartimento diverso. Per informazioni sulla creazione e la gestione dei vault, vedere Gestione dei vault.
  11. In Chiave, selezionare la chiave nel vault che si desidera utilizzare. L'elenco include solo le chiavi asimmetriche nel vault perché Certificates supporta solo chiavi asimmetriche. È possibile selezionare da Rivest-Shamir-Adleman (RSA) chiavi che sono 2,048 bit o 4,096 bit. È inoltre possibile selezionare chiavi ECDSA (Elliptic Curve Cryptography Digital Signature Algoritmo) con ID curva ellittica NIST_P384. In particolare, l'elenco include solo i tipi di chiavi asimmetriche protette da un modulo HSM (Hardware Security Module). I certificati non supportano l'uso di chiavi protette da software. Per ulteriori informazioni sulla creazione e la gestione delle chiavi, vedere Gestione delle chiavi.
  12. In Algoritmo di firma, a seconda della famiglia di algoritmi chiave, selezionare una delle seguenti opzioni:
    • SHA256_WITH_RSA: chiave RSA con funzione hash SHA-256
    • SHA384_WITH_RSA: chiave RSA con funzione hash SHA-384
    • SHA512_WITH_RSA: chiave RSA con funzione hash SHA-512
    • SHA256_WITH_ECDSA: chiave ECDSA con funzione hash SHA-256
    • SHA384_WITH_ECDSA: chiave ECDSA con funzione hash SHA-384
    • SHA512_WITH_ECDSA: chiave ECDSA con funzione hash SHA-512
  13. Selezionare Next.
  14. Configurare la regola di scadenza. In Durata massima validità per certificati (giorni), specificare il numero massimo di giorni di validità di un certificato emesso da questa CA. Si consiglia vivamente un periodo di validità non superiore a 90 giorni.
  15. Nella pagina Configurazione revoca, se non si desidera configurare un elenco di revoca dei certificati (CRL), selezionare la casella di controllo Salta revoca.
  16. Selezionare Next.
  17. Verificare che le informazioni siano corrette, quindi selezionare Crea autorità di certificazione. La creazione di risorse correlate al certificato può richiedere alcuni minuti.
  18. Se l'autorità di certificazione è stata creata correttamente, vengono visualizzati i dettagli di riepilogo.

Passo 3: Genera una nuova chiave privata

Creare una chiave privata e una richiesta di firma certificato (CSR, Certificate Signing Request) utilizzando OpenSSL.

Nota

Per motivi di sicurezza, si consiglia di eseguire questa operazione sul dispositivo per mantenere la chiave privata e non condividerla mai esternamente.
  1. Utilizzare questo comando per generare una nuova chiave privata private.pem e una richiesta di firma certificato csr.pem con cifratura RSA a 2048 bit. Questo esempio mostra l'uso del parametro -nodes che specifica senza protezione tramite password e utilizza le estensioni v3_req.
    openssl req -nodes -newkey rsa:2048 -keyout private.pem -out csr.pem -extensions v3_req
    Nota

    Se si utilizza Linux, per impostazione predefinita il file OpenSSL.cnf commenta l'estensione, ad esempio se nel file di configurazione OpenSSL viene visualizzato qualcosa del genere: /etc/pki/tls/openssl.cnf
     # req_extensions = v3_req # The extensions to add to a certificate request
    Quindi rimuovere # per scommentare le estensioni, in modo che il file assomigli a questo:
    req_extensions = v3_req  # The extensions to add to a certificate request
    Per verificare che OpenSSL utilizzi extensions v3_req, è possibile verificare che l'output contenga:
    X509v3 extensions:
        X509v3 Basic Constraints: critical
            CA:FALSE
  2. Questo esempio mostra i campi di input della richiesta di certificato e i valori di esempio. Immettere le informazioni che verranno incorporate nel report del certificato come nome distinto (DN).

    Immettere il nome comune. È possibile trovare il nome comune nella scheda Informazioni oggetto della pagina Dettagli certificato. Vedere il passo 8 Creazione di un'autorità di certificazione oppure per informazioni sulla ricerca della pagina dei dettagli del certificato. Vedere Elenco certificati:
    Country Name (2 letter code) []: US
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) []:
    Organizational Unit Name (eg, section) []:
    Common Name (Enter common name from the certificate details.) []:common-name
    Email Address [your@email.com]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

Passo 4: Creare un certificato gestito esternamente

È possibile generare una richiesta di firma certificato (CSR) e una chiave privata sul server in cui si prevede di installare il certificato, quindi sottomettere tale richiesta di firma certificato a una CA per emettere un certificato, gestendo la chiave privata esternamente.

In questo task viene descritto come emettere un certificato con una chiave privata gestita esternamente. Per ulteriori informazioni su altri modi di utilizzare un certificato, vedere Creazione di un certificato da gestire esternamente e Gestione dei certificati.
  1. Nella console aprire il menu di navigazione e selezionare Identità e sicurezza.
  2. Nella pagina elenco Certificati viene visualizzata la lista di autorità di certificazione per un compartimento specifico.
  3. Trovare il Certificato da utilizzare, quindi selezionare il menu Azioni alla fine della riga.
  4. Selezionare Certificato problema.
  5. In Tipo di certificato, per emettere un certificato da una CA del servizio Certificati gestita da una CA esterna di terze parti, selezionare Emesso da una CA interna, gestito esternamente.
  6. Inserire un nome di visualizzazione univoco per il certificato. Evitare di fornire informazioni riservate.
    Nota

    Nessun certificato nella tenancy può condividere lo stesso nome, inclusi i certificati in attesa di eliminazione.
  7. (Facoltativo) Immettere una descrizione che consenta di identificare il certificato. Evitare di fornire informazioni riservate.
  8. Per i certificati gestiti da una CA di terze parti, non è necessario fornire informazioni sull'oggetto. Selezionare invece Successivo.
  9. In Richiesta di firma certificato, fornire il contenuto del certificato selezionando Carica file, quindi selezionare Seleziona uno per caricare il certificato come file in formato PEM.
  10. In alternativa, selezionare Incolla contenuto, quindi selezionare la casella di testo per incollare direttamente il contenuto del certificato.
  11. Selezionare Next.
  12. Impossibile configurare il rinnovo automatico per i certificati non gestiti dal servizio Certificati. Selezionare Avanti per continuare.
  13. Verificare che le informazioni di riepilogo siano corrette, quindi selezionare Crea certificato.
  14. Viene visualizzata la pagina Dettagli certificato. In Versioni, trovare il nome del certificato che si desidera visualizzare, andare al menu Azioni alla fine della riga, quindi selezionare Visualizza contenuto. Per ulteriori informazioni, vedere Visualizzazione dei dettagli del certificato.
  15. Selezionare Scarica e Salva il file PEM certificato.
  16. Nella pagina dei dettagli del certificato, andare alla scheda Informazioni sull'oggetto, copiare il nome comune per il certificato da utilizzare nel passo successivo.

Passo 5: Creare un'istanza Digital Twin che utilizzi un certificato

Per autenticare un dispositivo per inviare dati, è possibile creare un'istanza gemella digitale utilizzando il parametro --auth-id e il parametro <certificate-OCID> creato nel passo precedente.

Utilizzare questo comando e parametri per creare un'istanza gemella digitale. Sostituire <common-name-for-the-certificate>. Sostituire <certificate-OCID> con l'OCID certificato per l'ambiente in uso. Trovare questi valori nei dettagli del certificato. Per ulteriori informazioni, vedere Visualizzazione dei dettagli del certificato:

oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --auth-id <certificate-OCID> --external-key <common-name-from-certificate-details>

Per un elenco completo dei parametri CLI, vedere oci iot digital-twin-instance create e vedere Creating a Digital Twin Instance per ulteriori informazioni.

Passo 6 opzionale: ottenere i dettagli dell'istanza di un gemello digitale

Utilizzare questo comando per visualizzare i dettagli di un'istanza gemella digitale. La risposta contiene l'OCID dell'istanza del gemello digitale, l'ID di autenticazione e la chiave esterna.
oci iot digital-twin-instance get --digital-twin-instance-id <digital-twin-instance-OCID>
Per ulteriori informazioni, vedere Ottenere i dettagli dell'istanza di un Digital Twin.

Passo 7: inviare i dati

A seconda dello scenario in uso, è possibile connettersi all'istanza digital twin utilizzando MQTTS, HTTPS o WebSocket. Per altri scenari di esempio, vedere Connessione di un dispositivo.

  • Uso di Curl

    Shell in stile POSIX: utilizzare questo comando curl quando si utilizza bash, zsh, macOS Terminal, Linux o Git Bash in Windows per inviare messaggi di testo non codificato di esempio per verificare la connessione. Sostituire device-cert.pem e device-key.pem con il percorso dei file per l'ambiente in uso.
    curl --cert /path/device-cert.pem --key /path/device-key.pem \
    -H "Content-Type: text/plain" \
    -d "sample data 1" \
    "https://<iot-domain-short-id>.device.iot.<region>.oci.oraclecloud.com/sampletopic"

    Windows Powershell: utilizzare questo comando curl, sostituire device-cert.pem e device-key.pem con i valori per l'ambiente.

    curl.exe --cert /path/device-cert.pem --key /path/device-key.pem \
    -H "Content-Type: text/plain" \
    -d "sample data 1" \
    "https://<iot-domain-short-id>.device.iot.<region>.oci.oraclecloud.com/sampletopic"

    Quando si completa il Passo 3: Creazione di un'istanza Digital Twin, se è stato definito il valore del parametro chiave esterna con virgolette, è necessario includere i preventivi quando si inviano i dati: "external-key". Per informazioni sulle procedure ottimali per la presentazione dei preventivi, vedere Risoluzione dei problemi.

  • Utilizzare qualsiasi client MQTT per eseguire la sottoscrizione a un argomento utilizzando MQTTS. In questo esempio viene utilizzato MQTTx.

    Per inviare dati di esempio e testare la connessione:

    1. Immettere l'host del dispositivo come host, ad esempio:
      mqtts://<domain-short-id>.device.iot.<region>.oci.oraclecloud.com
    2. Immettere la porta: 8883
    3. ID client: your-client-ID
    4. Avvio pulito: Vero
    5. Attivare questa attivazione/disattivazione per abilitare TLS.
    6. Selezionare l'opzione: Certificati CA o con firma automatica
    7. Immettere la posizione del file del certificato client, dal passo 15 in Creazione di un certificato gestito esternamente: your-certificate.pem
    8. Immettere la posizione del file di chiavi del client, dal passo 1 in Genera nuova chiave privata: your-private-key.pem
    9. Selezionare Connetti.

      MQTTx

      Connettersi utilizzando MQTTx.

    10. Selezionare Nuova sottoscrizione per ricevere i dati da un dispositivo.
    11. Immettere l'endpoint come argomento.
    12. Questo esempio mostra i messaggi pubblicati nell'argomento /endpoints/4321, al livello 1 Qualità del servizio (QoS).
      {
        "pulse": 300,
        "s02": 400
      }
      {
        "test": 100
      }

      Eseguire la sottoscrizione a un argomento in MQTTx.

Passo 7 facoltativo: monitorare i dati IoT in APEX

Se si ha configurato l'accesso per visualizzare i dati in APEX e il dispositivo ha inviato dati raw, è possibile utilizzare questa istruzione SQL per visualizzare la risposta dei dati raw dell'istanza digital twin in APEX.
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA
where digital_twin_instance_id = '<digital-twin-instance-ocid>'