Tutorial: Erstellen und Hochladen von Zertifikaten zum Testen

Sie können Geräte mithilfe von X.509-Zertifikaten bei Ihrem IoT-Hub authentifizieren. Für Produktionsumgebungen empfehlen wir, dass Sie ein X.509-Zertifizierungsstellenzertifikat von einem professionellen Zertifikatdienstanbieter erwerben. Sie können dann Zertifikate innerhalb Ihrer Organisation aus einer internen, selbstverwalteten Zertifizierungsstelle (ZS) ausstellen, die im Rahmen einer umfassenden Strategie einer Public Key-Infrastruktur (PKI) mit dem erworbenen Zertifizierungsstellenzertifikat verkettet wird. Weitere Informationen zum Abrufen eines X.509-Zertifizierungsstellenzertifikats bei einem professionellen Zertifikatdienstanbieter finden Sie unter Authentifizieren von Geräten mithilfe von X.509-Zertifizierungsstellenzertifikaten im Abschnitt Abrufen eines X.509-Zertifizierungsstellenzertifikats.

Das Erstellen Ihrer eigenen selbstverwalteten privaten Zertifizierungsstelle, die eine interne Stammzertifizierungsstelle als Vertrauensanker verwendet, eignet sich jedoch für Testumgebungen. Eine selbstverwaltete private Zertifizierungsstelle mit mindestens einer untergeordneten Zertifizierungsstelle, die mit Ihrer internen Stammzertifizierungsstelle verkettet ist, mit Clientzertifikaten für Ihre Geräte, die von Ihren untergeordneten Zertifizierungsstellen signiert werden, ermöglicht es Ihnen, eine empfohlene Produktionsumgebung zu simulieren.

Wichtig

Wir raten davon ab, selbstsignierte Zertifikate für Produktionsumgebungen zu verwenden. Dieses Tutorial dient ausschließlich Demonstrationszwecken.

Im folgenden Tutorial werden OpenSSL und das OpenSSL-Cookbook zur Beschreibung verwendet, wie Sie die folgenden Aufgaben ausführen:

  • Erstellen einer internen Stammzertifizierungsstelle und eines Zertifikats der Stammzertifizierungsstelle
  • Erstellen einer internen untergeordneten Zertifizierungsstelle und eines untergeordneten Zertifizierungsstellenzertifikats, das von Ihrem internen Zertifikat der Stammzertifizierungsstelle signiert wurde
  • Hochladen Ihres untergeordneten Zertifizierungsstellenzertifikats in Ihren IoT-Hub zu Testzwecken
  • Verwenden der untergeordneten Zertifizierungsstelle zum Erstellen von Clientzertifikaten für die IoT-Geräte, die Sie bei Ihrem IoT-Hub testen möchten

Hinweis

Microsoft stellt PowerShell- und Bash-Skripts bereit, die Sie beim Erstellen eigener X.509-Zertifikate und beim Authentifizieren dieser Zertifikate bei einer IoT Hub-Instanz unterstützen. Die Skripts sind im Azure IoT Hub Device SDK für C enthalten. Die Skripts werden nur zu Demonstrationszwecken bereitgestellt. Diese Zertifikate dürfen nicht für die Produktion verwendet werden. Die Zertifikate enthalten hartcodierte Kennwörter („1234“) und laufen nach 30 Tagen ab. Sie müssen Ihre eigenen bewährten Methoden für die Zertifikaterstellung und die Lebensdauerverwaltung in einer Produktionsumgebung verwenden. Weitere Informationen finden Sie unter Verwalten von ZS-Zertifikaten für Beispiele und Tutorials im GitHub-Repository für das Azure IoT Hub Device SDK für C.

Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  • Ein IoT Hub in Ihrem Azure-Abonnement. Wenn Sie noch keinen Hub haben, können Sie die Schritte unter Erstellen eines IoT-Hubs ausführen.

  • Die neueste Version von Git. Stellen Sie sicher, dass Git den Umgebungsvariablen hinzugefügt wurde, auf die das Befehlsfenster Zugriff hat. Unter den Git-Clienttools von Software Freedom Conservancy finden Sie die neueste Version der zu installierenden git-Tools. Hierzu zählt auch die Befehlszeilen-App Git Bash, über die Sie mit Ihrem lokalen Git-Repository interagieren können.

  • Eine OpenSSL-Installation. Unter Windows enthält Ihre Git-Installation eine Installation von OpenSSL. Sie können über die Git Bash-Eingabeaufforderung auf OpenSSL zugreifen. Zur Überprüfung, ob OpenSSL installiert ist, öffnen Sie eine Git Bash-Eingabeaufforderung, und geben Sie openssl version ein.

    Hinweis

    Außer wenn Sie mit OpenSSL vertraut sind und es auf Ihrem Windows-Computer bereits installiert haben, empfehlen wir die Verwendung von OpenSSL über die Git Bash-Eingabeaufforderung. Alternativ können Sie den Quellcode herunterladen und OpenSSL erstellen. Weitere Informationen dazu finden Sie auf der Seite OpenSSL-Downloads. Oder Sie können vordefiniertes OpenSSL von einem Drittanbieter herunterladen. Weitere Informationen dazu finden Sie im OpenSSL-Wiki. Microsoft garantiert nicht die Gültigkeit von Paketen, die von Drittanbietern heruntergeladen wurden. Wenn Sie OpenSSL erstellen oder herunterladen möchten, sorgen Sie dafür, dass auf die OpenSSL-Binärdatei in Ihrem Pfad zugegriffen werden kann und dass die Umgebungsvariable OPENSSL_CNF auf den Pfad Ihrer Datei openssl.cnf festgelegt wird.

Erstellen einer Stamm-CA

Sie müssen zuerst eine interne Stammzertifizierungsstelle (ZS) und ein selbstsigniertes Zertifikat der Stammzertifizierungsstelle als Vertrauensanker erstellen, aus dem Sie andere Zertifikate zum Testen erstellen können. Die zum Erstellen und Verwalten Ihrer internen Stammzertifizierungsstelle verwendeten Dateien werden in einer Ordnerstruktur gespeichert und im Rahmen dieses Prozesses initialisiert. Führen Sie die folgenden Schritte aus:

  • Erstellen und Initialisieren der Ordner und Dateien, die von Ihrer Stammzertifizierungsstelle verwendet werden
  • Erstellen einer Konfigurationsdatei, die von OpenSSL zum Konfigurieren Ihrer Stammzertifizierungsstelle und der Zertifikate verwendet werden, die mit Ihrer Stammzertifizierungsstelle erstellt wurden
  • Anfordern und Erstellen eines selbstsignierten Zertifizierungsstellenzertifikats, das als Ihr Zertifikat der Stammzertifizierungsstelle dient
  1. Starten Sie ein Git Bash-Fenster, und führen Sie den folgenden Befehl aus. Ersetzen Sie dabei {base_dir} durch das gewünschte Verzeichnis, in dem die Zertifikate für diesem Tutorial erstellt werden soll.

    cd {base_dir}
    
  2. Führen Sie im Git Bash-Fenster die folgenden Befehle nacheinander aus. In diesem Schritt werden die folgenden Verzeichnisstruktur- und Unterstützungsdateien für die Stammzertifizierungsstelle erstellt.

    Verzeichnis oder Datei BESCHREIBUNG
    rootca Das Stammverzeichnis der Stammzertifizierungsstelle.
    rootca/certs Das Verzeichnis, in dem Zertifizierungsstellenzertifikate für die Stammzertifizierungsstelle erstellt und gespeichert werden.
    rootca/db Das Verzeichnis, in dem die Zertifikatdatenbank und die Unterstützungsdateien für die Stammzertifizierungsstelle gespeichert werden.
    rootca/db/index Die Zertifikatdatenbank für die Stammzertifizierungsstelle. Der Befehl touch erstellt eine Datei ohne Inhalt zur späteren Verwendung. Die Zertifikatdatenbank ist eine von OpenSSL verwaltete Nur-Textdatei mit Informationen zu ausgestellten Zertifikaten. Weitere Informationen zur Zertifikatdatenbank finden Sie auf der Handbuchseite openssl-ca.
    rootca/db/serial Eine Datei zum Speichern der Seriennummer des nächsten Zertifikats, das für die Stammzertifizierungsstelle erstellt werden soll. Der Befehl openssl erstellt eine 16-Byte-Zufallszahl im Hexadezimalformat und speichert sie dann in dieser Datei, um die Datei zum Erstellen des Stammzertifikats der Zertifizierungsstelle zu initialisieren.
    rootca/db/crlnumber Eine Datei zum Speichern von Seriennummern für widerrufene Zertifikate, die von der Stammzertifizierungsstelle ausgestellt wurden. Der Befehl echo leitet eine Beispielseriennummer, „1001“, in die Datei weiter.
    rootca/private Das Verzeichnis, in dem private Dateien für die Stammzertifizierungsstelle, einschließlich des privaten Schlüssels, gespeichert werden.
    Die Dateien in diesem Verzeichnis müssen gesichert und geschützt werden.
    mkdir rootca
    cd rootca
    mkdir certs db private
    chmod 700 private
    touch db/index
    openssl rand -hex 16 > db/serial
    echo 1001 > db/crlnumber
    
  3. Erstellen Sie eine Textdatei namens rootca.conf im rootca Verzeichnis, das im vorherigen Schritt erstellt wurde. Öffnen Sie diese Datei in einem Text-Editor und kopieren und speichern Sie dann die folgenden OpenSSL-Konfigurationseinstellungen in dieser Datei.

    Die Datei stellt OpenSSL die Werte bereit, die zum Konfigurieren Ihrer Test-Stammzertifizierungsstelle erforderlich sind. In diesem Beispiel konfiguriert die Datei eine Stammzertifizierungsstelle namens rootca unter Verwendung der Verzeichnisse und Dateien, die in den vorherigen Schritten erstellt wurden. Die Datei enthält auch Konfigurationseinstellungen für Folgendes:

    • Die Zertifizierungsstellenrichtlinie, die von der Stammzertifizierungsstelle für „Distinguished Name“ (DN)-Felder des Zertifikats verwendet wird
    • Von der Stammzertifizierungsstelle erstellte Zertifikatanforderungen
    • X.509-Erweiterungen, die auf Zertifikate der Stammzertifizierungsstelle, untergeordnete Zertifizierungsstellenzertifikate und Clientzertifikate angewendet werden, die von der Stammzertifizierungsstelle ausgestellt wurden

    Hinweis

    Das home-Attribut im Abschnitt ca_default ist auf ../rootca festgelegt, da diese Konfigurationsdatei auch beim Erstellen des Zertifikats für Ihre untergeordnete Zertifizierungsstelle verwendet wird. Mit dem angegebenen relativen Pfad kann OpenSSL während dieses Vorgangs von Ihrem untergeordneten Zertifizierungsstellenordner zu Ihrem Stammordner der Zertifizierungsstelle navigieren.

    Weitere Informationen zur Syntax von OpenSSL-Konfigurationsdateien finden Sie in der OpenSSL-Dokumentation auf der Handbuchseite config.

    [default]
    name                     = rootca
    domain_suffix            = exampledomain.com
    aia_url                  = http://$name.$domain_suffix/$name.crt
    crl_url                  = http://$name.$domain_suffix/$name.crl
    default_ca               = ca_default
    name_opt                 = utf8,esc_ctrl,multiline,lname,align
    
    [ca_dn]
    commonName               = "rootca_common_name"
    
    [ca_default]
    home                     = ../rootca
    database                 = $home/db/index
    serial                   = $home/db/serial
    crlnumber                = $home/db/crlnumber
    certificate              = $home/$name.crt
    private_key              = $home/private/$name.key
    RANDFILE                 = $home/private/random
    new_certs_dir            = $home/certs
    unique_subject           = no
    copy_extensions          = none
    default_days             = 3650
    default_crl_days         = 365
    default_md               = sha256
    policy                   = policy_c_o_match
    
    [policy_c_o_match]
    countryName              = optional
    stateOrProvinceName      = optional
    organizationName         = optional
    organizationalUnitName   = optional
    commonName               = supplied
    emailAddress             = optional
    
    [req]
    default_bits             = 2048
    encrypt_key              = yes
    default_md               = sha256
    utf8                     = yes
    string_mask              = utf8only
    prompt                   = no
    distinguished_name       = ca_dn
    req_extensions           = ca_ext
    
    [ca_ext]
    basicConstraints         = critical,CA:true
    keyUsage                 = critical,keyCertSign,cRLSign
    subjectKeyIdentifier     = hash
    
    [sub_ca_ext]
    authorityKeyIdentifier   = keyid:always
    basicConstraints         = critical,CA:true,pathlen:0
    extendedKeyUsage         = clientAuth,serverAuth
    keyUsage                 = critical,keyCertSign,cRLSign
    subjectKeyIdentifier     = hash
    
    [client_ext]
    authorityKeyIdentifier   = keyid:always
    basicConstraints         = critical,CA:false
    extendedKeyUsage         = clientAuth
    keyUsage                 = critical,digitalSignature
    subjectKeyIdentifier     = hash
    
  4. Führen Sie im Git Bash-Fenster den folgenden Befehl aus, um eine Zertifikatsignieranforderung (Certificate Signing Request, CSR) im Verzeichnis rootca und einen privaten Schlüssel im Verzeichnis rootca/private zu generieren. Weitere Informationen zum OpenSSL-Befehl req finden Sie in der OpenSSL-Dokumentation auf der Handbuchseite openssl-req.

    Hinweis

    Obwohl diese Stammzertifizierungsstelle zu Testzwecken dient und nicht als Teil einer Public Key-Infrastruktur (PKI) verfügbar gemacht wird, raten wir davon ab, den privaten Schlüssel zu kopieren oder freizugeben.

    winpty openssl req -new -config rootca.conf -out rootca.csr -keyout private/rootca.key
    

    Sie werden aufgefordert, eine PEM-Passphrase – wie im folgenden Beispiel gezeigt – für die Datei mit dem privaten Schlüssel einzugeben. Geben Sie eine Passphrase zum Generieren Ihres privaten Schlüssels und Ihrer CSR ein, und bestätigen Sie sie.

    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    

    Vergewissern Sie sich, dass die CSR-Datei rootca.csr im Verzeichnis rootca vorhanden ist, und dass die private Schlüsseldatei rootca.key im Unterverzeichnis private vorhanden ist, bevor Sie fortfahren.

  5. Führen Sie im Git Bash-Fenster den folgenden Befehl zum Erstellen eines selbstsignierten Zertifikats der Stammzertifizierungsstelle aus. Der Befehl wendet die ca_ext-Erweiterungen der Konfigurationsdatei auf das Zertifikat an. Diese Erweiterungen geben an, dass das Zertifikat für eine Stammzertifizierungsstelle gilt und zum Signieren von Zertifikaten und Zertifikatsperrlisten (CRLs) verwendet werden kann. Weitere Informationen zum OpenSSL-Befehl ca finden Sie in der OpenSSL-Dokumentation auf der Handbuchseite openssl-ca.

    winpty openssl ca -selfsign -config rootca.conf -in rootca.csr -out rootca.crt -extensions ca_ext
    

    Sie werden aufgefordert, die PEM-Passphrase – wie im folgenden Beispiel gezeigt – für die Datei mit dem privaten Schlüssel einzugeben. Nach Ihrer Eingabe der Passphrase generiert OpenSSL ein Zertifikat und fordert Sie dann auf, das Zertifikat für Ihre Stammzertifizierungsstelle zu signieren und zu committen. Geben Sie y für beide Eingabeaufforderungen zum Generieren des selbstsignierten Zertifikats für Ihre Stammzertifizierungsstelle an.

    Using configuration from rootca.conf
    Enter pass phrase for ../rootca/private/rootca.key:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
        {Details omitted from output for clarity}
    Certificate is to be certified until Mar 24 18:51:41 2033 GMT (3650 days)
    Sign the certificate? [y/n]:
    
    
    1 out of 1 certificate requests certified, commit? [y/n]
    Write out database with 1 new entries
    Data Base Updated
    

    Nachdem OpenSSL die Zertifikatdatenbank aktualisiert wurde, vergewissern Sie sich, dass sowohl die Zertifikatdatei rootca.crt im Verzeichnis rootca als auch die PEM-Zertifikatdatei (.pem) für das Zertifikat im Verzeichnis rootca/certs vorhanden ist. Der Dateiname der PEM-Datei stimmt mit der Seriennummer des Zertifikats der Stammzertifizierungsstelle überein.

Erstellen einer untergeordneten Zertifizierungsstelle

Nachdem Sie Ihre interne Stammzertifizierungsstelle erstellt haben, sollten Sie eine untergeordnete Zertifizierungsstelle erstellen, die als Zwischenzertifizierungsstelle zum Signieren von Clientzertifikaten für Ihre Geräte verwendet werden soll. Theoretisch müssen Sie keine untergeordnete Zertifizierungsstelle erstellen. Sie können Ihr Zertifikat der Stammzertifizierungsstelle in Ihren IoT-Hub hochladen und Clientzertifikate direkt aus Ihrer Stammzertifizierungsstelle signieren. Die Verwendung einer untergeordneten Zertifizierungsstelle als Zwischenzertifizierungsstelle zum Signieren von Clientzertifikaten simuliert jedoch eine empfohlene Produktionsumgebung, in der Ihre Stammzertifizierungsstelle offline beibehalten wird. Sie können auch eine untergeordnete Zertifizierungsstelle zum Signieren einer anderen untergeordneten Zertifizierungsstelle verwenden, die wiederum eine andere untergeordnete Zertifizierungsstelle signieren kann usw. Durch die Verwendung untergeordneter Zertifizierungsstellen zum Signieren anderer untergeordneter Zertifizierungsstellen wird eine Hierarchie von Zwischenzertifizierungsstellen als Teil einer Zertifikatvertrauenskette erstellt. In einer Produktionsumgebung ermöglicht die Zertifikatvertrauenskette eine Delegierung der Vertrauensstellung zum Signieren von Geräten. Weitere Informationen zum Signieren von Geräten in einer Zertifikatvertrauenskette finden Sie unter Authentifizieren von Geräten mithilfe von X.509-Zertifizierungsstellenzertifikaten.

Ähnlich wie bei Ihrer Stammzertifizierungsstelle werden die zum Erstellen und Verwalten Ihrer untergeordneten Zertifizierungsstelle verwendeten Dateien in einer Ordnerstruktur gespeichert und im Rahmen dieses Prozesses initialisiert. Führen Sie die folgenden Schritte aus:

  • Erstellen und Initialisieren der Ordner und Dateien, die von Ihrer untergeordneten Zertifizierungsstelle verwendet werden
  • Erstellen einer Konfigurationsdatei, die von OpenSSL zum Konfigurieren Ihrer untergeordneten Zertifizierungsstelle und der Zertifikate verwendet wird, die mit Ihrer untergeordneten Zertifizierungsstelle erstellt wurden
  • Anfordern und Erstellen eines von Ihrer Stammzertifizierungsstelle signierten Zertifizierungsstellenzertifikats, das als Ihr untergeordnetes Zertifizierungsstellenzertifikat dient
  1. Kehren Sie zum Basisverzeichnis zurück, welches das rootca-Verzeichnis enthält. In diesem Beispiel befinden sich sowohl die Stammzertifizierungsstelle als auch die untergeordnete Zertifizierungsstelle im gleichen Basisverzeichnis.

    cd ..
    
  2. Führen Sie im Git Bash-Fenster die folgenden Befehle nacheinander aus.

    In diesem Schritt wird eine Verzeichnisstruktur und Unterstützungsdateien für die untergeordnete Zertifizierungsstelle erstellt, die der Ordnerstruktur und den Dateien ähnelt, die für die Stammzertifizierungsstelle im vorherigen Abschnitt erstellt wurden.

    mkdir subca
    cd subca
    mkdir certs db private
    chmod 700 private
    touch db/index
    openssl rand -hex 16 > db/serial
    echo 1001 > db/crlnumber
    
  3. Erstellen Sie eine Textdatei namens subca.conf im subca-Verzeichnis, das im vorherigen Schritt erstellt wurde. Öffnen Sie diese Datei in einem Text-Editor und kopieren und speichern Sie dann die folgenden OpenSSL-Konfigurationseinstellungen in dieser Datei.

    Wie bei der Konfigurationsdatei für Ihre Test-Stammzertifizierungsstelle stellt diese Datei OpenSSL die Werte bereit, die zum Konfigurieren Ihrer untergeordneten Test-Zertifizierungsstelle erforderlich sind. Sie können mehrere untergeordnete Zertifizierungsstellen zum Verwalten von Testszenarien oder -umgebungen erstellen.

    Weitere Informationen zur Syntax von OpenSSL-Konfigurationsdateien finden Sie in der OpenSSL-Dokumentation auf der Masterhandbuchseite config.

    [default]
    name                     = subca
    domain_suffix            = exampledomain.com
    aia_url                  = http://$name.$domain_suffix/$name.crt
    crl_url                  = http://$name.$domain_suffix/$name.crl
    default_ca               = ca_default
    name_opt                 = utf8,esc_ctrl,multiline,lname,align
    
    [ca_dn]
    commonName               = "subca_common_name"
    
    [ca_default]
    home                     = ../subca
    database                 = $home/db/index
    serial                   = $home/db/serial
    crlnumber                = $home/db/crlnumber
    certificate              = $home/$name.crt
    private_key              = $home/private/$name.key
    RANDFILE                 = $home/private/random
    new_certs_dir            = $home/certs
    unique_subject           = no
    copy_extensions          = copy
    default_days             = 365
    default_crl_days         = 90
    default_md               = sha256
    policy                   = policy_c_o_match
    
    [policy_c_o_match]
    countryName              = optional
    stateOrProvinceName      = optional
    organizationName         = optional
    organizationalUnitName   = optional
    commonName               = supplied
    emailAddress             = optional
    
    [req]
    default_bits             = 2048
    encrypt_key              = yes
    default_md               = sha256
    utf8                     = yes
    string_mask              = utf8only
    prompt                   = no
    distinguished_name       = ca_dn
    req_extensions           = ca_ext
    
    [ca_ext]
    basicConstraints         = critical,CA:true
    keyUsage                 = critical,keyCertSign,cRLSign
    subjectKeyIdentifier     = hash
    
    [sub_ca_ext]
    authorityKeyIdentifier   = keyid:always
    basicConstraints         = critical,CA:true,pathlen:0
    extendedKeyUsage         = clientAuth,serverAuth
    keyUsage                 = critical,keyCertSign,cRLSign
    subjectKeyIdentifier     = hash
    
    [client_ext]
    authorityKeyIdentifier   = keyid:always
    basicConstraints         = critical,CA:false
    extendedKeyUsage         = clientAuth
    keyUsage                 = critical,digitalSignature
    subjectKeyIdentifier     = hash
    
  4. Führen Sie im Git Bash-Fenster die folgenden Befehle zum Generieren eines privaten Schlüssels und einer Zertifikatsignaturanforderung (Certificate Signing Request, CSR) im untergeordneten Zertifizierungsstellenverzeichnis aus.

    winpty openssl req -new -config subca.conf -out subca.csr -keyout private/subca.key
    

    Sie werden aufgefordert, eine PEM-Passphrase – wie im folgenden Beispiel gezeigt – für die Datei mit dem privaten Schlüssel einzugeben. Geben Sie eine Passphrase zum Generieren Ihres privaten Schlüssels und Ihrer CSR ein, und überprüfen Sie sie.

    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    

    Vergewissern Sie sich, dass die CSR-Datei subca.csr im untergeordneten Zertifizierungsstellenverzeichnis vorhanden ist, und die private Schlüsseldatei subca.key im Unterverzeichnis private vorhanden ist, bevor Sie fortfahren.

  5. Führen Sie im Git Bash-Fenster den folgenden Befehl zum Erstellen eines untergeordneten Zertifizierungsstellenzertifikats im untergeordneten Zertifizierungsstellenverzeichnis aus. Der Befehl wendet die sub_ca_ext-Erweiterungen der Konfigurationsdatei auf das Zertifikat an. Diese Erweiterungen geben an, dass das Zertifikat für eine untergeordnete Zertifizierungsstelle gilt und auch zum Signieren von Zertifikaten und Zertifikatssperrlisten (Certificate Revocation Lists, CRLs) verwendet werden kann. Im Gegensatz zum Zertifikat der Stammzertifizierungsstelle ist dieses Zertifikat nicht selbstsigniert. Stattdessen wird das untergeordnete Zertifizierungsstellenzertifikat mit dem Zertifikat der Stammzertifizierungsstelle signiert, wodurch eine Zertifikatkette ähnlich derjenigen erstellt wird, die Sie für eine Public Key-Infrastruktur (PKI) verwenden würden. Mit dem untergeordneten Zertifizierungsstellenzertifikat werden dann Clientzertifikate zum Testen Ihrer Geräte signiert.

    winpty openssl ca -config ../rootca/rootca.conf -in subca.csr -out subca.crt -extensions sub_ca_ext
    

    Sie werden aufgefordert, die Passphrase – wie im folgenden Beispiel gezeigt – für die Datei mit dem privaten Schlüssel Ihrer Stammzertifizierungsstelle einzugeben. Nachdem Sie die Passphrase eingegeben haben, generiert OpenSSL die Details des Zertifikats, zeigt sie an und fordert Sie dann auf, das Zertifikat für Ihre untergeordnete Zertifizierungsstelle zu signieren und zu committen. Geben Sie y für beide Eingabeaufforderungen zum Generieren des Zertifikats für Ihre untergeordnete Zertifizierungsstelle an.

    Using configuration from rootca.conf
    Enter pass phrase for ../rootca/private/rootca.key:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
        {Details omitted from output for clarity}
    Certificate is to be certified until Mar 24 18:55:00 2024 GMT (365 days)
    Sign the certificate? [y/n]:
    
    
    1 out of 1 certificate requests certified, commit? [y/n]
    Write out database with 1 new entries
    Data Base Updated
    

    Nachdem OpenSSL die Zertifikatdatenbank aktualisiert hat, vergewissern Sie sich, dass die Zertifikatdatei subca.crt im untergeordneten Zertifizierungsstellenverzeichnis vorhanden ist und die PEM-Zertifikatdatei (.pem) für das Zertifikat im Verzeichnis rootca/certs. Der Dateiname der PEM-Datei stimmt mit der Seriennummer des untergeordneten Zertifizierungsstellenzertifikats überein.

Registrieren Ihres untergeordneten Zertifizierungsstellenzertifikats bei Ihrem IoT-Hub

Registrieren Sie das untergeordnete Zertifizierungsstellenzertifikat auf Ihrem IoT-Hub, der es verwendet, um Ihre Geräte während der Registrierung und Verbindung zu authentifizieren. In den folgenden Schritten wird beschrieben, wie Sie Ihr untergeordnetes Zertifizierungsstellenzertifikat in Ihren IoT-Hub hochladen und dann automatisch überprüfen lassen.

  1. Navigieren Sie im Azure-Portal zu Ihrem IoT-Hub, und wählen Sie im Ressourcenmenü unter Sicherheitseinstellungen die Option Zertifikate aus.

  2. Wählen Sie auf der Befehlsleiste Hinzufügen aus, um ein neues Zertifizierungsstellenzertifikat hinzuzufügen.

  3. Geben Sie im Feld Zertifikatname einen Anzeigenamen für Ihr untergeordnetes Zertifizierungsstellenzertifikat ein.

  4. Wählen Sie die PEM-Zertifikatdatei (.pem) Ihres untergeordneten Zertifizierungsstellenzertifikats aus dem Verzeichnis rootca/certs aus, um sie im Feld PEM- oder CRT-Zertifikatdatei hinzuzufügen.

  5. Aktivieren Sie das Kontrollkästchen neben Set certificate status to verified on upload (Zertifikatstatus beim Hochladen auf „überprüft“ festlegen).

    Der Screenshot zeigt, wie der Zertifikatstatus beim Upload automatisch überprüft wird.

  6. Wählen Sie Speichern aus.

Ihr hochgeladenes untergeordnetes Zertifizierungsstellenzertifikat wird angezeigt, und sein Status wurde auf der Registerkarte Zertifikate des Arbeitsbereichs auf Überprüft festgelegt.

Erstellen eines Clientzertifikats für ein Gerät

Nachdem Sie Ihre untergeordnete Zertifizierungsstelle erstellt haben, können Sie Clientzertifikate für Ihre Geräte erstellen. Die für Ihre untergeordnete Zertifizierungsstelle erstellten Dateien und Ordner werden zum Speichern der CSR-Datei, der Datei mit dem privaten Schlüssel und der Zertifikatdateien für Ihre Clientzertifikate verwendet.

Beim Clientzertifikat muss der Wert des Feldes „Allgemeiner Name des Antragstellers“ (Subject Common Name, CN) auf den Wert der Geräte-ID festgelegt werden, der beim Registrieren des entsprechenden Geräts in Azure IoT Hub verwendet wurde.

Führen Sie die folgenden Schritte aus:

  • Erstellen eines privaten Schlüssels und einer Zertifikatsignieranforderung (Certificate Signing Request, CSR) für ein Clientzertifikat
  • Erstellen eines von Ihrem untergeordneten Zertifizierungsstellenzertifikat signierten Clientzertifikats
  1. Stellen Sie in Ihrem Git Bash-Fenster sicher, dass Sie sich noch im subca-Verzeichnis befinden.

  2. Führen Sie im Git Bash-Fenster die folgenden Befehle nacheinander aus. Ersetzen Sie den Platzhalter durch einen Namen für Ihr IoT-Gerät, z. B. testdevice. In diesem Schritt werden der private Schlüssel und die CSR für Ihr Clientzertifikat erstellt.

    In diesem Schritt wird ein privater 2048-Bit-RSA-Schlüssel für Ihr Clientzertifikat erstellt und dann eine Zertifikatsignieranforderung (Certificate Signing Request, CSR) unter Verwendung dieses privaten Schlüssels generiert.

    winpty openssl genpkey -out private/<DEVICE_NAME>.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    winpty openssl req -new -key private/<DEVICE_NAME>.key -out <DEVICE_NAME>.csr
    
  3. Wenn Sie aufgefordert werden, geben Sie die Zertifikatdetails an, wie im folgenden Beispiel gezeigt.

    Die einzige Eingabeaufforderung, für die Sie einen bestimmten Wert angeben müssen, ist Common Name, die den gleichen Gerätenamen haben muss, der im vorherigen Schritt angegeben wurde. Sie können beliebige Werte für die restlichen Eingabeaufforderungen angeben oder sie überspringen.

    Nachdem Sie die Zertifikatdetails bereitgestellt haben, generiert OpenSSL die Details des Zertifikats, zeigt sie an und fordert Sie dann auf, das Zertifikat für Ihre untergeordnete Zertifizierungsstelle zu signieren und zu committen. Geben Sie y für beide Eingabeaufforderungen zum Generieren des Zertifikats für Ihre untergeordnete Zertifizierungsstelle an.

    -----
    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) []:'<DEVICE_NAME>'
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    
    

    Vergewissern Sie sich, dass die CSR-Datei im untergeordneten Zertifizierungsstellenverzeichnis vorhanden ist, und die private Schlüsseldatei im Unterverzeichnis private vorhanden ist, bevor Sie fortfahren. Weitere Informationen zu den Formaten der CSR-Datei und der Datei mit dem privaten Schlüssel finden Sie unter X.509-Zertifikate.

  4. Führen Sie im Git Bash-Fenster den folgenden Befehl aus, und ersetzen Sie die Gerätenamenplatzhalter durch denselben Namen, den Sie in den vorherigen Schritten verwendet haben.

    In diesem Schritt wird ein Clientzertifikat im untergeordneten Zertifizierungsstellenverzeichnis erstellt. Der Befehl wendet die client_ext-Erweiterungen der Konfigurationsdatei auf das Zertifikat an. Diese Erweiterungen geben an, dass das Zertifikat für ein Clientzertifikat gilt, das nicht als Zertifizierungsstellenzertifikat verwendet werden kann. Das Clientzertifikat ist mit dem untergeordneten Zertifizierungsstellenzertifikat signiert.

    winpty openssl ca -config subca.conf -in <DEVICE_NAME>.csr -out <DEVICE_NAME>.crt -extensions client_ext
    

    Sie werden aufgefordert, die Passphrase – wie im folgenden Beispiel gezeigt – für die Datei mit dem privaten Schlüssel Ihrer untergeordneten Zertifizierungsstelle einzugeben. Nachdem Sie die Passphrase eingegeben haben, generiert OpenSSL die Details des Zertifikats, zeigt sie an und fordert Sie dann auf, das Clientzertifikat für Ihr Gerät zu signieren und zu committen. Geben Sie y für beide Eingabeaufforderungen zum Generieren des Clientzertifikats an.

    Using configuration from subca.conf
    Enter pass phrase for ../subca/private/subca.key:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
        {Details omitted from output for clarity}
    Certificate is to be certified until Mar 24 18:51:41 2024 GMT (365 days)
    Sign the certificate? [y/n]:
    
    
    1 out of 1 certificate requests certified, commit? [y/n]
    Write out database with 1 new entries
    Data Base Updated
    

    Nachdem OpenSSL die Zertifikatdatenbank aktualisiert hat, vergewissern Sie sich, dass die Zertifikatdatei für das Clientzertifikat im untergeordneten Zertifizierungsstellenverzeichnis vorhanden ist und die PEM-Zertifikatdatei (.pem) für das Clientzertifikat im Unterverzeichnis certs des untergeordneten Zertifizierungsstellenverzeichnisses. Der Dateiname der PEM-Datei stimmt mit der Seriennummer des Clientzertifikats überein.

Nächste Schritte

Sie können Ihr Gerät bei Ihrem IoT-Hub zum Testen des Clientzertifikats registrieren, das Sie für dieses Gerät erstellt haben. Weitere Informationen zum Registrieren eines Geräts finden Sie unter Erstellen eines IoT-Hubs über das Azure-Portal im Abschnitt Registrieren eines neuen Geräts beim IoT-Hub.

Wenn Sie mehrere verwandte Geräte testen müssen, können Sie mithilfe des Azure IoT Hub Device Provisioning Service mehrere Geräte in einer Registrierungsgruppe bereitstellen. Weitere Informationen zur Verwendung von Registrierungsgruppen im Device Provisioning Service finden Sie im Tutorial: Bereitstellen mehrerer X.509-Geräte mithilfe von Registrierungsgruppen.

Weitere Informationen zu den Formaten der Zertifikatdateien finden Sie unter X.509-Zertifikate.