Cloud IoT Core bietet Authentifizierung von öffentlichen/privaten Schlüsseln pro Gerät mithilfe von JSON Web Tokens (JWTs). Zur Erhöhung der Sicherheit kann Cloud IoT Core Public-Key-Zertifikate von Geräten mit CA-Zertifikaten auf Registry-Ebene verifizieren.
CA-Zertifikate auf Registry-Ebene sind eine optionale Funktion für zusätzliche Sicherheit; Sie müssen sie jedoch nicht verwenden.
Ein verifiziertes Zertifikat bestätigt, dass ein Paar aus öffentlichem/privatem Schlüssel zu einem legitimen Gerät gehört. Das kann besonders nützlich sein, wenn der Gerätehersteller öffentliche und private Schlüssel erstellt, den privaten Schlüssel auf dem Gerät speichert und der öffentliche Schlüssel von der CA signiert wird.
CA-Zertifikate generieren
Cloud IoT Core kann öffentliche Schlüsselzertifikate des Geräts mit selbst signierten CA-Zertifikaten und CA-Zertifikaten eines vertrauenswürdigen Drittanbieters abgleichen. Beide Arten von CA-Zertifikaten werden auf dieselbe Weise verwendet, aber jedes wird anders generiert.
Selbst signierte CA-Zertifikate | CA-Zertifikate von Drittanbietern |
---|---|
Inhaber von privaten Geräteschlüsseln können die Zertifikate generieren | Ein vertrauenswürdiger Drittanbieter muss die Zertifikate generieren |
Inhaber privater Geräteschlüssel erstellen und besitzen die privaten CA-Schlüssel, mit denen die Zertifikate signiert werden | Ein Drittanbieter erstellt und besitzt die privaten CA-Schlüssel, mit denen die Zertifikate signiert werden |
Frei generierbar | Drittanbieter erstellen Rechnungen, um Zertifikate zu generieren und eine Vertrauenskette mit der CA einzurichten |
Selbst signierte CA-Zertifikate
Führen Sie die folgenden Schritte aus, um ein selbst signiertes CA-Zertifikat und den entsprechenden privaten CA-Schlüssel zu generieren:
- Privaten CA-Schlüssel erstellen. Der private CA-Schlüssel wird dem CA-Zertifikat eindeutig zugeordnet. Mit dem folgenden Befehl können Sie einen privaten RSA-Schlüssel mit 2.048 Bit generieren:
openssl genpkey -algorithm RSA -out ca_private.pem -pkeyopt rsa_keygen_bits:2048
- Generieren Sie das selbst signierte CA-Zertifikat. Der folgende Befehl generiert ein RS256-Zertifikat, das die Anforderungen des CA-Zertifikats erfüllt:
openssl req -x509 -new -nodes -key ca_private.pem -sha256 -out ca_cert.pem -subj "/CN=unused"
Weitere Beispiele finden Sie unter RSA-Schlüssel mit einem selbst signierten X.509-Zertifikat generieren oder ES256-Schlüssel mit einem selbst signierten X.509-Zertifikat generieren.
CA-Zertifikate von Drittanbietern
Wenn Sie ein CA-Zertifikat von einem vertrauenswürdigen Drittanbieter erhalten möchten, senden Sie eine CSR an die Zertifizierungsstelle. Die CA sendet Ihnen dann ein CA-Zertifikat mit dem entsprechenden Zertifikat des öffentlichen Schlüssels des Geräts, das vom privaten Schlüssel der Zertifizierungsstelle signiert ist. So erhalten Sie CA-Zertifikate von Drittanbietern:
- Erstellen Sie einen privaten Geräteschlüssel. Mit dem folgenden Befehl können Sie einen privaten RSA-Schlüssel mit 2.048 Bit generieren:
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
- Erstellen Sie einen CSR aus dem privaten Schlüssel des Geräts. Der CSR behält das Secret des privaten Schlüssels. Der folgende Befehl generiert einen CSR mit einer SHA-256-Signatur:
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused"
- Senden Sie den CSR an eine CA und beantragen Sie ein Zertifikat. Jede CA hat ein anderes Anwendungsverfahren. Beispielsweise kann es sein, dass Sie ein Konto bei der CA registrieren und den CSR in ein Onlineportal hochladen müssen.
Anforderungen an CA-Zertifikate
Alle CA-Zertifikate auf Registry-Ebene müssen die folgenden Anforderungen erfüllen:
- Das CA-Zertifikat muss im Format X.509v3 (RFC 5280) vorliegen, in base64 codiert sein und in
-----BEGIN CERTIFICATE-----
und-----END CERTIFICATE-----
eingeschlossen sein. - Das CA-Zertifikat muss eine
.pem
-Datei sein, die mit einem unterstützten Algorithmus verschlüsselt ist:- RSA mit mindestens 2.048 Bit
- NIST P-256
- Das CA-Zertifikat muss gültig sein. Wenn Sie versuchen, ein Gerät einer Registry hinzuzufügen, und das Zertifikat der Registry abgelaufen ist, gibt Cloud IoT Core einen Fehler zurück.
- Optional können Sie die Google Cloud CLI verwenden, um die Ablaufzeit eines Zertifikats zu verfolgen.
CA-Zertifikate zu einer Registry hinzufügen
Fügen Sie CA-Zertifikate einer Registry hinzu. Cloud IoT Core verifiziert CA-Zertifikate auf Registry-Ebene. Daher müssen alle CA-Zertifikate einer Registry zugeordnet sein. Ein Zertifikat kann mehreren Registries hinzugefügt werden. Sie können CA-Zertifikate mit der Google Cloud Console, der API oder gcloud hinzufügen.
Console
- Rufen Sie in der Google Cloud Console die Seite Registrys (Registrys) auf.
Klicken Sie oben auf der Seite auf Registry erstellen.
Klicken Sie auf CA-Zertifikat hinzufügen, um ein Zertifikat einzugeben, einzufügen oder eine
.pem
-Zertifikatsdatei hochzuladen. Sie können beim Erstellen der Registry nur ein einzelnes Zertifikat hinzufügen, später können Sie jedoch bis zu zehn Zertifikate hinzufügen.
Die Detailseite der Geräte-Registry enthält den Tab Zertifikate, auf dem die vorhandenen Zertifikate angezeigt und weitere Zertifikate hinzugefügt werden können.
gcloud
Führen Sie einen der gcloud iot registries credentials
-Befehle aus, um CA-Zertifikate hinzuzufügen oder zu verwalten.
Führen Sie den Befehl gcloud iot registries credentials create
aus, um einer Registry ein neues Zertifikat hinzuzufügen:
gcloud iot registries credentials create \ --path=PATH_TO_CERTIFICATE \ --project=PROJECT_ID \ --registry=REGISTRY_ID \ --region=REGION
API
Die Ressource DeviceRegistry
enthält Felder zum Definieren von CA-Zertifikaten auf Registry-Ebene:
- Für die Prüfung von Geräteanmeldedaten können bis zu 10 Anmeldedaten (
RegistryCredential
-Objekte) definiert werden. - Jedes
RegistryCredential
-Objekt umfasst einPublicKeyCertificate
-Objekt, mit dem Sie Zertifikatdaten angeben können. Ein reines Ausgabefeld enthält X.509-Zertifikatdetails.
Auswirkungen auf vorhandene Geräte
Wenn Sie Zertifikate hinzufügen oder entfernen, sind vorhandene Geräte in der Registry (unabhängig davon, ob sie verbunden sind oder nicht) nicht betroffen. Wenn die mit einem Gerät verknüpften Zertifikate auf Registry-Ebene widerrufen, gelöscht oder geändert werden, kann das Gerät nicht dieselben Public-Key-Zertifikate verwenden, die bei der Erzwingung der Registry-Zertifikate verwendet wurden. Es kann jedoch weiterhin eine Verbindung zu Cloud IoT Core mit seinem privaten Schlüssel herstellen.
Public-Key-Zertifikate generieren
Cloud IoT Core überprüft Public-Key-Zertifikate eines Geräts, die von privaten CA-Schlüsseln signiert sind.
So generieren Sie ein signiertes Public-Key-Zertifikate:
- Wenn die Registry mit einem selbst signierten CA-Zertifikat konfiguriert ist, signieren Sie einen öffentlichen Schlüssel mit dem privaten CA-Schlüssel.
- Erstellen Sie einen privaten Schlüssel für das Gerät. Dieser Schlüssel unterscheidet sich vom CA-Zertifikat und vom privaten CA-Schlüssel. Mit dem folgenden Befehl können Sie einen privaten RSA-Schlüssel mit 2.048 Bit generieren:
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
- Erstellen Sie einen CSR aus dem privaten Schlüssel des Geräts. Der folgende Befehl generiert einen CSR mit einer SHA-256-Signatur:
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused-device"
- Erstellen Sie einen öffentlichen Schlüssel und signieren Sie ihn mit dem privaten CA-Schlüssel. Der folgende Befehl generiert ein signiertes RS256-Zertifikat, das die Anforderungen für Public-Key-Zertifikate erfüllt:
openssl x509 -req -in rsa_cert.csr -CA ca_cert.pem -CAkey ca_private.pem \ -CAcreateserial -sha256 -out rsa_cert.pem
- Erstellen Sie einen privaten Schlüssel für das Gerät. Dieser Schlüssel unterscheidet sich vom CA-Zertifikat und vom privaten CA-Schlüssel. Mit dem folgenden Befehl können Sie einen privaten RSA-Schlüssel mit 2.048 Bit generieren:
- Wenn eine Registry mit einem Drittanbieter-CA-Zertifikat konfiguriert ist, enthält das CA-Zertifikat ein Public-Key-Zertifikat des Geräts, das vom privaten CA-Schlüssel signiert wurde. Mit dem folgenden Befehl können Sie ein RSA-CA-Zertifikat aus einem RSA-CA-Zertifikat extrahieren:
openssl rsa -in ca_cert.pem -pubout -out rsa_cert.pem
Anforderungen an Public-Key-Zertifikate
Public-Key-Zertifikate von Geräten müssen (zusätzlich zu den Standardanforderungen für Cloud IoT Core für Geräteanmeldedaten die folgenden Anforderungen erfüllen, um sie mit CA-Zertifikaten auf Registry-Ebene verifizieren zu können:
- Das CA-Zertifikat muss im Format X.509v3 (RFC 5280) vorliegen, in base64 codiert sein und in
-----BEGIN CERTIFICATE-----
und-----END CERTIFICATE-----
eingeschlossen sein. - Das Public-Key-Zertifikat des Geräts muss durch ein bestimmtes CA-Zertifikat auf Registry-Ebene signiert werden; Zwischen-CAs werden nicht unterstützt.
- Das Public-Key-Zertifikat des Geräts darf nicht mit dem Zertifikat auf Registry-Ebene identisch sein.
- Keine öffentlichen Rohschlüssel.
- Unterstützte JWT-Algorithmen:
- Das Zertifikat für den öffentlichen Schlüssel des Geräts muss gültig sein. Wenn Sie versuchen, ein Gerät mit einem abgelaufenen Zertifikat zu erstellen oder zu aktualisieren, gibt Cloud IoT Core einen Fehler zurück.
- Optional können Sie die Google Cloud CLI verwenden, um die Ablaufzeit eines Zertifikats zu verfolgen.
Diese Anforderungen werden beim Erstellen oder Aktualisieren des Geräts erzwungen. Wenn für eine Registry keine CA-Zertifikate definiert sind, werden alle öffentlichen Geräteschlüssel bedingungslos akzeptiert.
Public-Key-Zertifikate prüfen
Cloud IoT Core verifiziert Zertifikate für öffentliche Schlüssel des Geräts anhand von CA-Zertifikaten auf Registrierungsebene, wenn Sie ein Gerät erstellen oder seine öffentlichen Schlüssel ändern. Sie können ein Gerät über die Google Cloud Console, die API oder gcloud erstellen. Sie können öffentliche Schlüssel mit der Google Cloud Console oder der API hinzufügen, entfernen und bearbeiten.
Console
- Rufen Sie in der Google Cloud Console die Seite Registrys (Registrys) auf.
Klicken Sie auf die ID der Registry für das Gerät.
Klicken Sie im Registry-Menü links auf Geräte.
Klicken Sie auf Gerät erstellen.
Um die öffentlichen Schlüssel eines Geräts zu ändern, klicken Sie auf der Seite Geräte auf die ID des Geräts und dann oben auf der Seite auf Gerät bearbeiten.
Geben Sie eine Geräte-ID ein, die das Gerät kurz beschreibt oder Ihnen bei der Identifizierung hilft. Dieses Feld kann später nicht mehr bearbeitet werden. Informationen zur Benennung und Größe von Geräten finden Sie unter Anforderungen an Zeichen und Größen.
Wählen Sie für Gerätekommunikation die Option Zulassen oder Blockieren aus. Mit dieser Option können Sie die Kommunikation bei Bedarf blockieren, beispielsweise wenn ein Gerät nicht ordnungsgemäß funktioniert. In den meisten Fällen sollten Sie die Kommunikation beim Erstellen des Geräts zulassen.
Wählen Sie für Format des öffentlichen Schlüssels die Option RS256_X509 oder ES256_X509 aus. Fügen Sie das Zertifikat für den öffentlichen Schlüssel des Geräts in das Feld Wert des öffentlichen Schlüssels ein. Sie können auch ein Ablaufdatum für den Schlüssel festlegen.
Klicken Sie auf der Seite Gerätedetails auf Öffentlichen Schlüssel hinzufügen, um einem vorhandenen Gerät einen Schlüssel hinzuzufügen.
So entfernen Sie einen Schlüssel von einem vorhandenen Gerät:
- Klicken Sie auf der Seite Gerätedetails auf das Kästchen neben dem Schlüssel.
- Klicken Sie auf Löschen, um den Schlüssel zu entfernen.
Klicken Sie zum Bearbeiten eines Schlüssels auf der Seite Gerätedetails neben dem Schlüssel auf das Symbol Bearbeiten.
Wählen Sie die Eingabemethode aus, mit der Sie das Public-Key-Zertifikat für den öffentlichen Schlüssel des Geräts eingeben möchten.
- Manuell: Kopieren Sie das Public-Key-Zertifikate des Geräts und fügen Sie es in das Feld Wert des öffentlichen Schlüssels ein.
- Hochladen: Klicken Sie im Feld Wert des öffentlichen Schlüssels auf Durchsuchen, um eine Datei auf Ihrem Computer auszuwählen.
Mit den Feldern Schlüssel und Wert können Sie optionale Gerätemetadaten hinzufügen, z. B. eine Seriennummer. Informationen zu den Benennungs- und Größenanforderungen für Metadatenschlüssel finden Sie unter Anforderungen an Zeichen und Größen.
Wählen Sie eine Cloud Logging-Ebene aus, um zu bestimmen, welche Geräteereignisse an Cloud Logging gesendet werden.
Klicken Sie auf Erstellen, um das Gerät zu erstellen.
gcloud
Führen Sie den Befehl gcloud iot devices create
aus, um ein Gerät zu erstellen.
Führen Sie den folgenden Befehl aus, um ein Gerät mit RS256-Anmeldedaten zu erstellen, die den Anforderungen an Gerätezertifikate entsprechen:
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=rsa_cert.pem,type=rsa-x509-pem
Führen Sie den folgenden Befehl aus, um ein Gerät mit ES256-Anmeldedaten zu erstellen, die die Anforderungen an Gerätezertifikate erfüllen:
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=ec_cert.pem,type=es256-x509-pem
API
Verwenden Sie die folgenden Methoden, um Geräte zu erstellen oder öffentliche Schlüssel zu bearbeiten:
- Gerätemethode
create
, um Geräte zu Registries hinzuzufügen. - Gerätemethode
patch
zum Hinzufügen, Entfernen oder Bearbeiten öffentlicher Schlüssel
Öffentliche Schlüssel werden im Feld credentials
der Ressource Device
in der Cloud IoT Core API angegeben. Weitere Informationen finden Sie unter DeviceCredential
in der Geräteressource.
Da ein oder mehrere Zertifikate auf Registry-Ebene vorhanden sind, muss die Ressource Device
die Anforderungen des Gerätezertifikats erfüllen.
- Das Feld
Device.credentials[i].public_key.key
muss auf den Inhalt des Public-Key-Zertifikats des Geräts gesetzt sein (einschließlich Kopf- und Fußzeile). - Das Feld
Device.credentials[i].public_key.format
muss aufRSA_X509_PEM
oderES256_X509_PEM
gesetzt sein.