Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
PKCS11Kernbibliothek
Anmerkung
Der Inhalt dieser Seite ist möglicherweise nicht. up-to-date Das neueste Update finden Sie auf der Seite der RTOS Free.org-Bibliothek
Übersicht
Der Public Key Cryptography Standard #11 definiert eine plattformunabhängige Methode API zur Verwaltung und Verwendung kryptografischer Token. PKCS#11
Die PKCS11 Kernbibliothek enthält eine softwarebasierte Scheinimplementierung der Schnittstelle PKCS #11 (API), die die von Mbed bereitgestellte kryptografische Funktionalität verwendet. TLS Die Verwendung eines Softwaremocks ermöglicht eine schnelle Entwicklung und Flexibilität. Es wird jedoch erwartet, dass Sie das Modell durch eine Implementierung ersetzen, die speziell auf den sicheren Schlüsselspeicher zugeschnitten ist, der in Ihren Produktionsgeräten verwendet wird. Im Allgemeinen verteilen Anbieter sicherer Kryptoprozessoren, wie Trusted Platform Module (TPM), Hardware Security Module (HSM), Secure Element oder jede andere Art von sicherer Hardware-Enklave, zusammen mit der Hardware eine PKCS #11 -Implementierung. Der Zweck der rein PKCS11 softwarebasierten Modellbibliothek besteht daher darin, eine nicht hardwarespezifische PKCS #11 -Implementierung bereitzustellen, die ein schnelles Prototyping und eine schnelle Entwicklung ermöglicht, bevor auf eine kryptoprozessorspezifische PKCS #11 -Implementierung in Produktionsgeräten umgestellt wird.
Nur ein Teil des PKCS #11 -Standards ist implementiert, wobei der Schwerpunkt auf Operationen mit asymmetrischen Schlüsseln, Generierung von Zufallszahlen und Hashing liegt. Zu den gezielten Anwendungsfällen gehören die Verwaltung von Zertifikaten und Schlüsseln für die TLS Authentifizierung sowie die Überprüfung von Signaturen auf kleinen eingebetteten Geräten. Die Datei pkcs11.h
(bezogen aus dem OASIS Standardtext) finden Sie im kostenlosen RTOS Quellcode-Repository. In der RTOSFree-Referenzimplementierung werden PKCS #11 API -Aufrufe von der TLS Helper-Schnittstelle ausgeführt, um währenddessen die TLS Client-Authentifizierung durchzuführenSOCKETS_Connect
. PKCS#11 API -Aufrufe werden auch im Rahmen unseres einmaligen Workflows zur Bereitstellung durch Entwickler ausgeführt, um ein TLS Client-Zertifikat und einen privaten Schlüssel für die Authentifizierung beim AWS IoT MQTT Broker zu importieren. Für diese beiden Anwendungsfälle, Bereitstellung und TLS Client-Authentifizierung, muss nur ein kleiner Teil des Schnittstellenstandards PKCS #11 implementiert werden.
Features
Die folgende Teilmenge von PKCS #11 wird verwendet. Diese Liste entspricht ungefähr der Reihenfolge, in der die Routinen zur Unterstützung der Bereitstellung, TLS Clientauthentifizierung und Bereinigung aufgerufen werden. Eine ausführliche Beschreibung der Funktionen finden Sie in der PKCS #11 -Dokumentation, die vom Standard Committee zur Verfügung gestellt wurde.
Allgemeiner Aufbau und Abbau API
-
C_Initialize
-
C_Finalize
-
C_GetFunctionList
-
C_GetSlotList
-
C_GetTokenInfo
-
C_OpenSession
-
C_CloseSession
-
C_Login
Bereitstellung API
-
C_CreateObject CKO_PRIVATE_KEY
(für privaten Schlüssel des Geräts) -
C_CreateObject CKO_CERTIFICATE
(für Gerätezertifikat und Codeverifizierungszertifikat) -
C_GenerateKeyPair
-
C_DestroyObject
Client-Authentifizierung
-
C_GetAttributeValue
-
C_FindObjectsInit
-
C_FindObjects
-
C_FindObjectsFinal
-
C_GenerateRandom
-
C_SignInit
-
C_Sign
-
C_VerifyInit
-
C_Verify
-
C_DigestInit
-
C_DigestUpdate
-
C_DigestFinal
Unterstützung asymmetrischer Kryptosysteme
Die kostenlose RTOS Referenzimplementierung verwendet PKCS #11 2048-Bit RSA (nur Signierung) und die ECDSA NIST P-256-Kurve. Die folgenden Anweisungen beschreiben, wie Sie AWS IoT etwas erstellen, das auf einem P-256-Client-Zertifikat basiert.
Stellen Sie sicher, dass Sie die folgenden (oder neueren) Versionen von AWS CLI und Open SSL verwenden:
aws --version aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34 openssl version OpenSSL 1.0.2g 1 Mar 2016
Beim folgenden Verfahren wird davon ausgegangen, dass Sie den aws configure
Befehl zur Konfiguration von verwendet haben AWS CLI. Weitere Informationen finden Sie unter Schnellkonfiguration mit aws configure
im AWS Command Line Interface Benutzerhandbuch.
Um AWS IoT etwas zu erstellen, das auf einem P-256-Client-Zertifikat basiert
-
Erstelle ein AWS IoT Ding.
aws iot create-thing --thing-name
thing-name
-
Verwenden Sie OpenSSL, um einen P-256-Schlüssel zu erstellen.
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out
thing-name
.key -
Erstellen Sie eine Zertifikatregistrierungsanfrage, die mit dem in Schritt 2 erstellten Schlüssel signiert ist.
openssl req -new -nodes -days 365 -key
thing-name
.key -outthing-name
.req -
Senden Sie die Zertifikatsregistrierungsanfrage an. AWS IoT
aws iot create-certificate-from-csr \ --certificate-signing-request file://
thing-name
.req --set-as-active \ --certificate-pem-outfilething-name
.crt -
Hängen Sie das Zertifikat (auf das in der ARN Ausgabe des vorherigen Befehls verwiesen wird) an das Ding an.
aws iot attach-thing-principal --thing-name
thing-name
\ --principal "arn:aws:iot:us-east-1
:123456789012
:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729
" -
Erstellen Sie eine Richtlinie. (Diese Richtlinie ist zu freizügig. Sie sollte nur für Entwicklungszwecke verwendet werden.)
aws iot create-policy --policy-name FullControl --policy-document file://policy.json
Im Folgenden finden Sie die Datei policy.json, die im Befehl
create-policy
angegeben ist. Sie können diegreengrass:*
Aktion auslassen, wenn Sie die kostenlose RTOS Demo für Greengrass Connectivity and Discovery nicht ausführen möchten.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
-
Fügen Sie den Prinzipal (Zertifikat) und die Richtlinie an das Objekt an.
aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:
123456789012
:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729
"
Führen Sie nun die Schritte im Abschnitt Erste Schritte mit AWS IoT in diesem Handbuch aus. Vergessen Sie nicht, das von Ihnen erstellte Zertifikat und den privaten Schlüssel in die aws_clientcredential_keys.h
-Datei zu kopieren. Kopieren Sie den Objektnamen in aws_clientcredential.h
.
Anmerkung
Das Zertifikat und der private Schlüssel sind nur für Demonstrationszwecke hardcodiert. Anwendungen auf Produktionsebene sollten diese Dateien an einem sicheren Ort speichern.
Portierung
Informationen zur Portierung der PKCS11 Core-Bibliothek auf Ihre Plattform finden Sie unter Portierung der PKCS11 Core-Bibliothek im Free RTOS Porting Guide.
Speichernutzung
Codegröße des Kerns PKCS11 (Beispiel generiert mit GCC für ARM Cortex-M) | ||
---|---|---|
Datei | Mit -O1-Optimierung | Mit -Os-Optimierung |
core_pkcs11.c | 0,8 K | 0,8 K |
core_pki_utils.c | 0,5 K | 0,3 K |
core_pkcs11_mbedtls.c | 8,9 K | 7,5 K |
Schätzungen insgesamt | 10,2 K | 8,6 K |