Cloud HSM-Schlüssel mit OpenSSL verwenden

In dieser Anleitung wird beschrieben, wie Sie OpenSSL einrichten, um einen Cloud HSM-Schlüssel unter Debian 11 (Bullseye) zu verwenden. Diese Anleitung gilt im Allgemeinen auch dann, wenn Sie ein anderes Betriebssystem oder eine andere Umgebung verwenden. Beachten Sie jedoch, dass es geringfügige Unterschiede geben kann.

Voraussetzungen

Laden Sie als Erstes eine Version der Bibliothek herunter. Weitere Informationen zur PKCS #11-Bibliothek finden Sie im Nutzerhandbuch.

Installieren Sie zuerst das Paket libengine-pkcs11-openssl.

sudo apt-get update
sudo apt-get install libengine-pkcs11-openssl

Konfiguration

Umgebungsvariable PKCS11_MODULE_PATH festlegen.

Damit openssl unsere PKCS #11-Bibliothek verwenden kann, legen Sie die Umgebungsvariable PKCS11_MODULE_PATH fest:

export PKCS11_MODULE_PATH="/path/to/libkmsp11.so"

Um die Umgebungsvariable dauerhaft festzulegen, fügen Sie export PKCS11_MODULE_PATH="/path/to/libkmsp11.so" nach /etc/profile indem Sie den folgenden Befehl ausführen:

echo 'export PKCS11_MODULE_PATH="/path/to/libkmsp11.so"' | sudo tee -a /etc/profile

PKCS #11-Bibliothekskonfiguration

Die PKCS #11-Bibliothek erfordert eine YAML-Konfigurationsdatei, um Cloud KMS-Ressourcen zu finden. Die YAML-Datei muss mindestens ein einzelnes PKCS #11-Token konfigurieren.

Wenn Sie OpenSSL mit einem anderen Prozess verwenden, der eventuell eine Verzweigung verursacht, z. B. Apache oder Nginx, müssen Sie außerdem dafür sorgen, dass das Feld refresh_interval_secs nicht festgelegt oder auf 0 gesetzt ist.

Beispielkonfigurationsdatei:

---
tokens:
  - key_ring: "projects/my-project/locations/us-central1/keyRings/my-keyring"

Bei dieser Konfiguration sind alle asymmetrischen Signatur- und Entschlüsselungsschlüssel in my-keyring in der Bibliothek verfügbar.

Sie müssen die Berechtigungen für die Konfigurationsdatei so festlegen, dass sie nur vom Dateiinhaber geschrieben werden kann. Verweisen Sie KMS_PKCS11_CONFIG auf Ihre Konfigurationsdatei:

export KMS_PKCS11_CONFIG="/path/to/pkcs11-config.yaml"

Sie können diese Einstellung auch dauerhaft festlegen, indem Sie sie zu /etc/profile hinzufügen.

echo 'export KMS_PKCS11_CONFIG="/path/to/pkcs11-config.yaml"' | sudo tee -a /etc/profile

OpenSSL-Befehle ausführen

Wenn die Engine und die Bibliothek ordnungsgemäß konfiguriert sind, können Sie die Engine jetzt in OpenSSL-Befehlen verwenden.

Beachten Sie beim Erstellen asymmetrischer Signaturen, dass Cloud KMS-Schlüssel auf die Verwendung eines einzelnen Digests beschränkt sind. Beispiel: Eine CryptoKeyVersion mit dem Algorithmus EC_SIGN_P256_SHA256 muss immer in Verbindung mit einem SHA-256-Digest verwendet werden. Dies entspricht dem Flag -sha256 in OpenSSL. Schlüssel, für die SHA-384- oder SHA-512-Digests erforderlich sind, sollten mit den Flags -sha384 oder -sha512 verwendet werden.

Neue Signatur erstellen

Wenn Ihr konfigurierter Schlüsselbund einen Schlüssel mit dem Namen foo enthält, erstellen Sie mit dem folgenden Befehl eine Signatur über bar.txt:

openssl dgst -sha256 -engine pkcs11 -keyform engine -sign pkcs11:object=foo bar.txt

Die Ausgabe dieses Befehls ist nicht formatiert.

Dieser Befehl setzt voraus, dass Sie einen Schlüssel verwenden, der einen SHA-256-Digest verwendet. Daher wurde das Argument -sha256 verwendet. Die Optionen -sha384 oder -sha512 wären für Cloud HSM-Schlüssel geeignet, die diese Digesttypen verwenden.

Verwenden Sie für einen RSA-PSS-Schlüssel die zuvor beschriebenen Optionen -sigopt.

Neue Zertifikatsignierungsanfrage erstellen

Sie können auch eine Anfrage für die Signierung des Zertifikats (Certificate Signing Request, CSR) für einen Cloud HSM-Signaturschlüssel generieren. Dies ist nützlich, wenn Ihre Zertifizierungsstelle eine CSR benötigt, um ein neues Zertifikat für die Codesignierung zu generieren oder TLS-Websitzungen zu schützen.

openssl req -new -subj '/CN=test/' -sha256 -engine pkcs11 \
  -keyform engine -key pkcs11:object=foo > my-request.csr

Neues signiertes Zertifikat generieren

Für die lokale Entwicklung und für Testzwecke können Sie ein selbst signiertes Zertifikat für einen Cloud HSM-Signaturschlüssel verwenden. Selbst signierte Zertifikate sind auch für die Signierung von SAML-Tokens nützlich.

openssl req -new -x509 -days 3650 -subj '/CN=test/' -sha256 -engine pkcs11 \
  -keyform engine -key pkcs11:object=foo > my-request.crt

Fehlerbehebung mit PKCS #11 Spy

PKCS #11 Spy ist ein Open-Source-Tool, das den Inhalt von Interaktionen über eine PKCS #11-Schnittstelle protokolliert. Dies geschieht, indem es zwischen der Anwendung und die PKCS #11-Bibliothek und protokolliert alle erfolgten Aufrufe. Das kann bei der Fehlerbehebung hilfreich sein.

Wenn Sie PKCS #11 Spy verwenden möchten, muss das opensc-Paket installiert sein. Das Paket opensc enthält PKCS #11 Spy. Führen Sie den folgenden Befehl aus, um zu prüfen, ob opensc installiert ist:

sudo apt-get install opensc

Stellen Sie dann die Umgebungsvariable PKCS11_MODULE_PATH so ein, dass OpenSSL auf das PKCS #11-Spy-Bibliothek durch Ausführen des folgenden Befehls:

export PKCS11_MODULE_PATH=/usr/lib/x86_64-linux-gnu/pkcs11-spy.so

Verweisen Sie abschließend PKCS #11 Spy auf die Cloud HSM PKCS #11-Bibliothek, indem Sie die Umgebungsvariablen PKCS11SPY und PKCS11SPY_OUTPUT. Führen Sie die folgenden Befehle aus, um diese Umgebungsvariablen festzulegen:

export PKCS11SPY="/path/to/libkmsp11.so"
# Optional, stderr will be used for logging if not set
export PKCS11SPY_OUTPUT="/path/to/pkcs11-spy.log"