Share via


Verwaltete Azure-HSMs: TLS-Auslagerungsbibliothek

Azure Managed HSM bietet eine TLS-Auslagerungsbibiliothek, die mit PKCS#11 in der Version 2.40 kompatibel ist. Azure Managed HSM unterstützt nicht alle Funktionen, die in der PKCS#11-Spezifikation aufgeführt sind. Stattdessen unterstützt die TLS-Auslagerungsbibiliothek nur einen begrenzten Umfang an Mechanismen und Schnittstellenfunktionen für SSL/TLS-Offload mit F5 (BigIP) und Nginx. Dies dient in erster Linie dazu, TLS-Serverzertifikatschlüssel und digitale Signaturen während TLS-Handshakes zu generieren.

Weitere Informationen finden Sie unter Azure Managed HSM TLS-Auslagerungsbibiliothek GitHub.

Die TLS-Auslagerungsbibliothek verwendet intern die REST-API von Azure Key Vault, um mit Azure Managed HSM zu interagieren.

Erste Schritte

PKCS#11-Attribute

Für die ordnungsgemäße Integration in PKCS#11 ist für das Generieren von Schlüsseln (mithilfe von C_GenerateKeyPair) und das Suchen von Schlüsselobjekten (mithilfe von C_FindObjectsInit/C_FindObjects) eine Lösung zum Speichern von PKCS#11-Attributen im Azure Key Vault-Schlüsselobjekt erforderlich. Die TLS-Auslagerungsbibliothek konvertiert diese erforderlichen PKCS#11-Attribute in Azure Key Vault-Tags.

Diese „Attributtags“ haben ein spezielles Präfix:

  • p11_pri_{P11 Attribut Name} – Attribute für private Schlüssel
  • p11_pub_{P11 Attribut Name} – Attribute für öffentliche Schlüssel

Die TLS-Auslagerungsbibliothek legt die Attribute für die Azure Key Vault-Schlüsseloperationen sowie für die Lebensdauer des Schlüssels ordnungsgemäß fest, damit der Dienst diese Einschränkungen für die generierten Schlüssel entsprechend erzwingen kann. Diese Attribute werden wie andere PKCS#11-Attribute auch als Tags gespeichert, um Abfragefunktionen zu unterstützen.

Anwendungen, die die TLS-Auslagerungsbibliothek nutzen, verwenden mindestens ein PKCS#11-Attribut, um die Schlüsselobjekte zu suchen und zu verwenden.

Warnung

Auf Schlüssel, die von der TLS-Auslagerungsbibliothek und ihren Tags generiert werden, kann mithilfe der REST-API von Azure Key Vault zugegriffen werden. Das Bearbeiten dieser P11-Attributtags mithilfe der REST-API von Azure Key Vault kann die Anwendungen der TLS-Auslagerungsbibliothek unterbrechen.

Schlüsselgenerierung

Die TLS-Auslagerungsbibliothek enthält ein Tool zur Schlüsselerstellung: mhsm_p11_create_key. Beim Ausführen des Tools ohne Befehlszeilenargumente wird die korrekte Verwendung des Tools angezeigt.

Das Tool zur Schlüsselerstellung erfordert einen Dienstprinzipal, der der Rolle „Managed HSM Crypto User“(Kryptografiebenutzer für verwaltete HSMs) im Bereich „/keys“ zugewiesen ist.

Das Tool zur Schlüsselerstellung liest die Anmeldeinformationen des Dienstprinzipals aus den Umgebungsvariablen MHSM_CLIENT_ID und MHSM_CLIENT_SECRET:

  • MHSM_CLIENT_ID: muss auf die Anwendungs-ID (Client-ID) des Dienstprinzipals festgelegt werden.
  • MHSM_CLIENT_SECRET: muss auf das Kennwort des Dienstprinzipals (geheimer Clientschlüssel) festgelegt werden.

Für verwaltete Identitäten sind die obigen Umgebungsvariablen nicht erforderlich.

  • Verwenden Sie das --identity-Argument, um die verwaltete Identität mit dem Tool „mhsm_p11_create_key“ zu aktivieren.
  • Die client_id der benutzerseitig zugewiesenen verwalteten Identität sollte in der MHSM-Konfigurationsdatei (mhsm-pkcs11.conf) angegeben werden. Wenn die client_id einer vom Benutzer zugewiesenen verwalteten Identität nicht bereitgestellt wird, wird sie als systemseitig zugewiesene verwaltete Identität betrachtet.

Das Tool zur Schlüsselgenerierung generiert zum Zeitpunkt der Erstellung einen Namen für den Schlüssel nach dem Zufallsprinzip. Die vollständige Azure Key Vault-Schlüssel-ID und der Schlüsselname werden zur Vereinfachung in die Konsole gedruckt.

MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey

Key is generated successfully. \
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f

Das Argument „--label“ für das Tool zur Schlüsselgenerierung gibt die gewünschte Bezeichnung „CKA_LABEL“ für die generierten privaten und öffentlichen Schlüssel an. Diese Attribute sind in der Regel erforderlich, um unterstützte TLS-Auslagerungslösungen zu konfigurieren (z. B. die SSL-Konfigurationseinstellung „ssl_certificate_key“ in NGINX).

Sie benötigen den Schlüsselnamen für jegliche Rollenzuweisungsänderungen mithilfe der Azure-Befehlszeilenschnittstelle.

Zugriffssteuerung

Die TLS-Auslagerungsbibliothek übersetzt die Funktion „C_FindObjectsInit“ in einen REST-API-Aufruf für die Azure Key Vault, der im Bereich „/keys“ ausgeführt wird. Der MHSM-Dienst erfordert die Leseberechtigung in diesem Bereich, damit der Benutzer der TLS-Auslagerungsbibliothek die Suche nach den Schlüsseln autorisieren kann, die mithilfe des Tools zur Schlüsselerstellung erstellt wurden.

Weitere Informationen zur lokalen RBAC in Azure Managed HSM finden Sie unter:

Im folgenden Abschnitt werden verschiedene Ansätze zum Implementieren der Zugriffssteuerung für den Dienstprinzipal der TLS-Auslagerungsbibliothek und der verwalteten Identität beschrieben.

Dienstprinzipal für die TLS-Auslagerung

Der Dienstprinzipal der TLS-Auslagerungsbibliothek wird von der Anwendung verwendet, die die TLS-Auslagerungsbibliothek für den Zugriff auf Schlüssel verwendet, und sollte mittels Rollenzuweisungen mindestens über die folgende Berechtigungen verfügen:

  • KeyRead-Berechtigung für alle Schlüssel im verwalteten HSM.
  • KeySign-Berechtigung für die Schlüssel, die für die TLS-Auslagerung erforderlich sind.

Administratorbenutzer

Der Administratorbenutzer erstellt eine benutzerdefinierte Rollendefinition sowie Rollenzuweisungen. Daher sollten der Administratorbenutzer einer der folgenden integrierten Rollen im Bereich „/“ zugewiesen werden:

  • Managed HSM Crypto Officer (Kryptoverantwortlicher für verwaltete HSMs)
  • Managed HSM Policy Administrator (Richtlinienadministrator für verwaltete HSMs)
  • Managed HSM Administrator (Administrator für verwaltete HSMs)

Schlüsselgenerierungsdienstprinzipal

Der Schlüsselgenerierungsdienstprinzipal wird mit dem Tool zur Schlüsselerstellung (mhsm_p11_create_key) verwendet, um TLS-Auslagerungsschlüssel zu generieren. Dieser Dienstprinzipal sollte der Rolle „Managed HSM Crypto User“ (Kryptografiebenutzer für verwaltete HSMs) im Bereich „/keys“ zugewiesen werden.

Azure CLI

Die Azure-Befehlszeilenschnittstelle kann zum Ausführen von Aufgaben wie der Rollenzuweisung verwendet werden.

Permissiver Ansatz

Der permissive Ansatz ist einfacher und eignet sich, wenn das Azure Managed HSM ausschließlich für die TLS-Auslagerung verwendet wird.

Weisen Sie dem Dienstprinzipal für die TLS-Auslagerung im Bereich „/keys“ die Rolle „Crypto User“ (Kryptografiebenutzer) zu. Dadurch erhält der Dienstprinzipal für die TLS-Auslagerung die Berechtigung, Schlüssel zu generieren und für die TLS-Auslagerung zu suchen.

az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys

Geben Sie für verwaltete Identitäten Befehlsargumente wie folgt an:

az keyvault role assignment create --hsm-name ContosoMHSM \
      --role "Managed HSM Crypto User"  \
       --assignee-object-id <object_id>  \
       --assignee-principal-type MSI \
       --scope /keys

Granularer Ansatz

Der granulare Ansatz implementiert eine fein abgestimmte Zugriffssteuerung. Dafür sind zwei Dienstprinzipale (Dienstprinzipal für die TLS-Auslagerung und Schlüsselgenerierungsdienstprinzipal) sowie ein Administratorbenutzer erforderlich.

Das Ziel besteht darin, die Berechtigungen des Dienstprinzipals für die TLS-Auslagerung einzuschränken, um lediglich das für die TLS-Auslagerung erforderliche Minimum zu unterstützen. Der Benutzer muss über die Leseberechtigung für andere Schlüssel verfügen, damit die „C_FindObject*“-Funktion der Bibliothek unterstützt wird.

Leserolle für Benutzer der TLS-Auslagerungsdatei

Der erste Schritt bei der Implementierung des granularen Ansatzes besteht darin, eine benutzerdefinierte Rolle zu erstellen. Dieser Vorgang muss nur einmal durchgeführt werden.

Der Administratorbenutzer (mit der Rolle „Managed HSM Crypto Officer“ (Kryptoverantwortlicher für verwaltete HSMs)) oder „Managed HSM Policy Administrator“ (Richtlinienadministrator für verwaltete HSMs)) erstellt eine benutzerdefinierte Rollendefinition namens „TLS Library User Read Role“(Leserolle für Benutzer der TLS-Bibliothek):

az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
"roleName": "TLS Library User Read Role", \
"description": "Grant Read access to keys", \
"actions": [], \
"notActions": [], \
"dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
"notDataActions": [] \
}'

Generieren von Schlüsseln

Schlüssel können mithilfe des Tools zur Schlüsselgenerierung (mhsm_p11_create_key) mit dem mit dem Schlüsselgenerierungsdienstprinzipal generiert werden.

Erteilen einer Berechtigung

Der Administratorbenutzer weist dem Dienstprinzipal für die TLS-Auslagerung die folgenden Rollen zu.

  • Zuweisen der Rolle „TLS Library User Read Role“ (Leserolle für Benutzer der TLS-Bibliothek) im Bereich „/keys“
  • Zuweisen der Rolle „Managed HSM Crypto User“ (Kryptografiebenutzer für verwaltete HSMs) im Bereich „/keys/{key name}“

Im folgenden Beispiel lautet der Schlüsselname „p11-6a2155dc40c94367a0f97ab452dc216f“.

az keyvault role assignment create --hsm-name ContosoMHSM  \
--role "TLS Library User Read Role"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys

az keyvault role assignment create --hsm-name ContosoMHSM  \
--role "Managed HSM Crypto User"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f

Verbindungszwischenspeicherung

Um die Leistung von Signieren-Aufrufen für den verwalteten HSM-Dienst zu verbessern, speichert die TLS-Auslagerungsbibliothek ihre TLS-Verbindungen auf die verwalteten HSM-Dienstserver zwischen. Standardmäßig speichert die TLS-Auslagerungsbibliothek bis zu 20 TLS-Verbindungen zwischen. Die Verbindungszwischenspeicherung kann über die MHSM-Konfigurationsdatei (mhsm-pkcs11.conf) gesteuert werden.

"ConnectionCache": {
        "Disable": false, 
        "MaxConnections": 20
}

Deaktivieren

Wenn dieser Wert WAHR ist, wird die Verbindungszwischenspeicherung deaktiviert. Es ist standardmäßig aktiviert.

MaxConnections

Gibt die maximale Anzahl von Verbindungen an, die zwischengespeichert werden sollen. Das maximale Verbindungslimit sollte basierend auf der Anzahl gleichzeitiger PKCS11-Sitzungen konfiguriert werden, die von der Anwendung verwendet werden. Anwendungen erstellen normalerweise einen Pool von PKCS11-Sitzungen und verwenden diese aus einem Pool von Threads, um Signaturanforderungen parallel zu generieren. Die MaxConnections sollten mit der Anzahl gleichzeitiger Signaturanforderungen übereinstimmen, die von den Anwendungen generiert werden.

Die Signaturanforderungen pro Sekunde (Signing Request Per Second, RPS) hängt von der Anzahl gleichzeitiger Anforderungen und der Anzahl der zwischengespeicherten Verbindungen ab. Wenn Sie eine höhere Anzahl oder sogar das Standardlimit angeben, wird die Signatur-RPS nicht verbessert, wenn die Anzahl gleichzeitiger PKCS11-Signaturanforderungen unter diesem Grenzwert liegt. Die maximale Anzahl gleichzeitiger Verbindungen zum Erreichen des Burstmodus des Standard B1 HSM-Pools beträgt je nach Instanztyp etwa 30. Sie sollten jedoch mit unterschiedlichen Zahlen versuchen, die optimale Anzahl gleichzeitiger Verbindungen zu ermitteln.

Weitere Informationen zur Verwendung der PKCS11-Bibliothek durch die Anwendung finden Sie in der Anwendungsdokumentation, oder wenden Sie sich an Ihren Anwendungsanbieter.

Verwenden der TLS-Auslagerungsbibliothek

Generieren von Schlüsseln

Die TLS-Auslagerungsbibliothek enthält ein Tool zur Schlüsselerstellung: mhsm_p11_create_key. Beim Ausführen des Tools ohne Befehlszeilenargumente wird die korrekte Verwendung des Tools angezeigt.

Das Tool zur Schlüsselerstellung erfordert einen Dienstprinzipal, der der Rolle „Managed HSM Crypto User“(Kryptografiebenutzer für verwaltete HSMs) im Bereich „/keys“ zugewiesen ist.

Das Tool zur Schlüsselerstellung liest die Anmeldeinformationen des Dienstprinzipals aus den Umgebungsvariablen „MHSM_CLIENT_ID“ und „MHSM_CLIENT_SECRET“ aus.

  • MHSM_CLIENT_ID: muss auf die Anwendungs-ID (Client-ID) des Dienstprinzipals festgelegt werden.
  • MHSM_CLIENT_SECRET: muss auf das Kennwort des Dienstprinzipals (geheimer Clientschlüssel) festgelegt werden.

Das Tool zur Schlüsselgenerierung generiert zum Zeitpunkt der Erstellung einen Namen für den Schlüssel nach dem Zufallsprinzip. Die vollständige Azure Key Vault-Schlüssel-ID und der Schlüsselname werden zur Vereinfachung in die Konsole gedruckt.

MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey

Key is generated successfully.
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f

Das Argument „--label“ für das Tool zur Schlüsselgenerierung gibt die gewünschte Bezeichnung „CKA_LABEL“ für die generierten privaten und öffentlichen Schlüssel an. Diese Attribute sind in der Regel erforderlich, um unterstützte TLS-Auslagerungslösungen zu konfigurieren (z. B. die SSL-Konfigurationseinstellung „ssl_certificate_key“ in NGINX).

Der Schlüsselname ist erforderlich, wenn Sie planen, einen granularen Zugriff auf Schlüssel zu implementieren.

Implementieren von schlüssellosem TLS

Es gibt zwei Ansätze zum Generieren und Verwenden eines Schlüssels für das schlüssellose TLS: einen einfacheren, permissiveren und einen granularen Ansatz, der eine höhere Sicherheit bietet. Die Ansätze unterscheiden sich im Implementierungsaufwand und in der erzwungenen Sicherheit.

Einfacherer Ansatz

  1. Erstellen eines Dienstprinzipals für die TLS-Auslagerungsbibliothek (z. B. „TLSOffload ServicePrincipal“)
  2. Weisen Sie dem Dienstprinzipal für die TLS-Auslagerung im Bereich „/keys“ die Rolle „Managed HSM Crypto User“ (Kryptografiebenutzer für verwaltete HSMs) zu.
    az keyvault role assignment create --hsm-name ContosoMHSM \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys
    
  3. Generieren Sie einen Schlüssel mit der erforderlichen Bezeichnung, indem Sie die Schritte unter Generieren von Schlüsseln mithilfe der TLS-Auslagerungsbibliothek ausführen.
  4. Konfigurieren des TLS-Servers für die Verwendung der TLS-Auslagerungsbibliothek in Managed HSM als PKCS#11-Schnittstellenbibliothek
  5. Konfigurieren des TLS-Servers (z. B. die SSL-Konfigurationseinstellung „ssl_certificate_key“ in NGINX) mit der Schlüsselbezeichnung und den Anmeldeinformationen des Dienstprinzipals für die TLS-Auslagerung

Granularer Ansatz

  1. Erstellen Sie einen Administratorbenutzer (z. B. „TLSOffloadAdminUser“) mit der folgenden Rolle:
    • Rolle „Managed HSM Crypto Officer“ (Kryptoverantwortlicher für verwaltete HSMs) im Bereich „/“
  2. Erstellen Sie einen Schlüsselgenerierungsdienstprinzipal (z. B. „TLSOffloadKeyGenServicePrincipal“) für die Schlüsselerstellung der TLS-Auslagerung, und weisen Sie die folgende Rolle zu:
    • Rolle „Managed HSM Crypto User“ (Kryptografiebenutzer für verwaltete HSMs) im Bereich „/keys“.
  3. Erstellen eines Dienstprinzipals für die TLS-Auslagerung (z. B. „TLSOffload ServicePrincipal“)
  4. Die Administratorbenutzer erstellt die folgende benutzerdefinierte Rollendefinition:
    az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
    "roleName": "TLS Library User Read Role", \
    "description": "Grant Read access to keys", \ 
    "actions": [], \
    "notActions": [], \
    "dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
    "notDataActions": []
    }'
    
  5. Generieren Sie gemäß den Anweisungen unter „Generieren von Schlüsseln mithilfe der TLS-Auslagerungsbibliothek“ einen Schlüssel mit der erforderlichen Bezeichnung. Verwenden Sie beim Generieren von Schlüsseln den Schlüsselgenerierungsdienstprinzipal (z. B. „TLSOffloadKeyGenServicePrincipal“). Notieren Sie sich die Schlüsselbezeichnung und den Schlüsselnamen. Zum Beispiel:
    • Schlüsselbezeichnung: tlsKey
    • Schlüsselname: p11-6a2155dc40c94367a0f97ab452dc216f
  6. Der Administratorbenutzer weist dem Dienstprinzipal für die TLS-Auslagerung die folgenden Rollen zu
    • Rolle „TLS Library User Read Role“ (Leserolle für Benutzer der TLS-Bibliothek) im Bereich „/keys“
    • Rolle „Managed HSM Crypto User“ (Kryptografiebenutzer für verwaltete HSMs) im Bereich „/keys/{key name}“
    az keyvault role assignment create --hsm-name ContosoMHSM  \
    --role " TLS Library User Read Role"  \
    --assignee TLSOffloadServicePrincipal @contoso.com  \
    --scope /keys
    
    az keyvault role assignment create --hsm-name ContosoMHSM  \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f
    
  7. Konfigurieren des TLS-Servers für die Verwendung der TLS-Auslagerungsbibliothek in Azure Managed HSM als PKCS#11-Schnittstellenbibliothek
  8. Konfigurieren des TLS-Servers (z. B. die SSL-Konfigurationseinstellung „ssl_certificate_key“ in NGINX) mit der Schlüsselbezeichnung und den Anmeldeinformationen des Dienstprinzipals für die TLS-Auslagerung

Nächste Schritte