Knihovna pro přesměrování zpracování protokolu TLS pomocí spravovaného HSM Azure

Azure Managed HSM nabízí knihovnu pro snižování zátěže TLS, která je kompatibilní s PKCS#11 verze 2.40. Azure Managed HSM nepodporuje všechny funkce uvedené ve specifikaci PKCS#11. Knihovna tls Offload podporuje omezenou sadu mechanismů a funkcí rozhraní pro přesměrování zpracování SSL/TLS pouze pomocí F5 (BigIP) a Nginx, a to především pro generování klíčů certifikátu serveru TLS a generování digitálních podpisů během metody handshake protokolu TLS.

Další informace najdete v tématu Knihovna pro přesměrování zpracování TLS ve službě Azure Managed HSM na GitHubu.

Knihovna pro přesměrování zpracování TLS interně používá rozhraní Azure Key Vault REST API k interakci se službou Azure Managed HSM.

Začínáme

Atributy PKCS#11

Pro správnou integraci s PKCS#11 vyžaduje generování klíčů (prostřednictvím C_GenerateKeyPair) a vyhledání klíčových objektů (prostřednictvím C_FindObjectsInit/C_FindObjects) řešení pro ukládání atributů PKCS#11 do objektu klíče Key Vault Azure. Knihovna TLS Přesměrování zpracování převede tyto nezbytné atributy PKCS#11 na značky Azure Key Vault.

Tyto značky atributů mají speciální předponu:

  • p11_pri_{Název atributu P11} – atributy privátního klíče
  • p11_pub_{Název atributu P11} – atributy veřejného klíče

Knihovna přesměrování zpracování TLS správně nastavuje atributy Azure Key Vault Key Operations (Operace klíčů) a Key Lifetime (Životnost klíče), aby služba u vygenerovaných klíčů tato omezení správně vynucovala. Tyto atributy se také ukládají jako značky jako jiné atributy PKCS#11 pro podporu možností dotazů.

Aplikace, které používají knihovnu pro snižování zátěže TLS, používají k vyhledání a použití klíčových objektů jeden nebo více atributů PKCS#11.

Upozornění

Klíče vygenerované knihovnou TLS Offload Library a jejich značky jsou přístupné přes Azure Key Vault REST API. Manipulace s těmito značkami atributů P11 pomocí rozhraní Azure Key Vault REST API může poškodit aplikace knihovny pro snižování zátěže TLS.

Generování klíčů

Knihovna TLS Offload Library obsahuje nástroj pro vytvoření klíče, mhsm_p11_create_key. Spuštění nástroje bez argumentů příkazového řádku ukazuje správné použití nástroje.

Nástroj pro vytváření klíčů vyžaduje instanční objekt, který je přiřazený k roli "Spravovaný kryptografický uživatel HSM" v oboru "/keys".

Nástroj pro vytváření klíčů načte přihlašovací údaje instančního objektu z proměnných prostředí MHSM_CLIENT_ID a MHSM_CLIENT_SECRET:

  • MHSM_CLIENT_ID – musí být nastavené na ID aplikace (klienta) instančního objektu.
  • MHSM_CLIENT_SECRET – musí být nastavené na heslo instančního objektu (tajný klíč klienta).

Pro spravované identity výše uvedené proměnné prostředí nejsou potřeba.

  • Pomocí argumentu --identity povolte spravovanou identitu pomocí nástroje mhsm_p11_create_key.
  • Spravovaná client_id identita přiřazená uživatelem by měla být uvedená v konfiguračním souboru MHSM (mhsm-pkcs11.conf). client_id Pokud není zadána spravovaná identita přiřazená uživatelem, bude ji považovat za spravovanou identitu přiřazenou systémem.

Nástroj pro vytváření klíčů náhodně vygeneruje název klíče v době jeho vytvoření. Úplné ID klíče azure Key Vault a název klíče se pro usnadnění vytiskne do konzoly.

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

Argument --label nástroje pro vytváření klíčů určuje požadovanou CKA_LABEL pro vygenerované privátní a veřejné klíče. Tyto atributy se obvykle vyžadují ke konfiguraci podporovaných řešení pro snižování zátěže TLS (například nastavení konfigurace ssl nginx ssl_certificate_key).

Název klíče potřebujete pro všechny změny přiřazení rolí prostřednictvím Azure CLI.

Řízení přístupu

Knihovna TLS Offload Library přeloží C_FindObjectsInit na volání rozhraní REST API azure Key Vault, které funguje v oboru /keys. Služba MHSM vyžaduje oprávnění ke čtení v tomto oboru, aby mohl uživatel knihovny tls přesměrování zpracování dat autorizovat operaci hledání klíčů vytvořených pomocí nástroje pro vytváření klíčů.

Další informace o místním řízení přístupu na základě role (RBAC) služby Azure Managed HSM najdete tady:

Následující část popisuje různé přístupy k implementaci řízení přístupu pro instanční objekt knihovny pro snižování zátěže TLS a spravovanou identitu.

Přesměrování zpracování instančního objektu tls

Instanční objekt přesměrování zpracování TLS používá aplikace, která pro přístup ke klíčům používá knihovnu TLS Offload Library, a měla by mít minimálně následující oprávnění prostřednictvím přiřazení rolí:

  • Oprávnění ke čtení klíčů ke všem klíčům ve spravovaném HSM
  • KeySign oprávnění ke klíčům nezbytným pro přesměrování zpracování TLS

Uživatel s rolí správce

Uživatel Správa vytvoří vlastní definici role a přiřazení rolí. Uživatel Správa by proto měl být přiřazen k jedné z následujících předdefinovaných rolí v oboru /:

  • Spravovaný kryptografický pracovník HSM
  • Správce zásad spravovaného HSM
  • Správce spravovaného HSM

Instanční objekt generování klíčů

Instanční objekt generování klíčů se používá spolu s nástrojem pro vytváření klíčů (mhsm_p11_create_key) k vygenerování klíčů tls pro přesměrování zpracování. Tento instanční objekt by měl být přiřazený k roli "Spravovaný kryptografický uživatel HSM" v oboru "/keys".

Azure CLI

Azure CLI je možné použít k provádění úloh, jako je přiřazení role.

Permisivní přístup

Tento přístup je jednodušší a vhodný, pokud se spravovaný hsm Azure používá výhradně pro snižování zátěže TLS.

Přiřaďte roli Uživatele crypto k instančnímu objektu přesměrování zpracování TLS v oboru /keys. Tím se instančnímu objektu přesměrování zpracování TLS udělí oprávnění ke generování klíčů a jejich vyhledání pro snižování zátěže TLS.

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

V části Spravované identity zadejte argumenty příkazu následujícím způsobem:

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

Podrobný přístup

Podrobný přístup implementuje jemně odstupňované řízení přístupu. Vyžaduje dva instanční objekty (instanční objekt pro přesměrování zpracování TLS a instanční objekt generování klíčů) a Správa uživatele.

Cílem je omezit oprávnění instančního objektu pro snižování zátěže TLS tak, aby podporovala minimální požadavky pro přesměrování zpracování TLS. Pro podporu funkce C_FindObject* knihovny musí mít uživatel oprávnění ke čtení pro ostatní klíče.

Role čtení uživatele pro přesměrování zpracování knihovny TLS

Prvním krokem při implementaci podrobného přístupu je vytvoření vlastní role. Tuto operaci je potřeba provést pouze jednou.

Uživatel Správa (s rolí Správce spravovaného HSM Crypto Officer, Správce spravovaného HSM nebo Správce zásad spravovaného HSM) vytvoří vlastní definici role Čtení uživatele knihovny TLS:

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": [] \
}'

Generování klíčů

Klíče je možné generovat pomocí instančního objektu generování klíčů s nástrojem pro vytváření klíčů (mhsm_p11_create_key).

Udělení oprávnění

Uživatel Správa přiřadí instančnímu objektu přesměrování zpracování TLS následující role.

  • Přiřazení role Čtení uživatele knihovny TLS v oboru /keys
  • Přiřaďte roli Spravovaný kryptografický uživatel HSM v oboru /keys/{název_klíče}.

V následujícím příkladu je název klíče "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

Ukládání připojení do mezipaměti

Za účelem zlepšení výkonu podepisování volání spravované služby HSM knihovna přesměrování zpracování TLS ukládá svá připojení TLS do mezipaměti na servery služby Spravované HSM. Ve výchozím nastavení knihovna tls přesměrování zpracování ukládá do mezipaměti až 20 připojení TLS. Ukládání připojení do mezipaměti lze řídit prostřednictvím konfiguračního souboru MHSM (mhsm-pkcs11.conf).

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

Zakázat

Pokud je tato hodnota true, ukládání připojení do mezipaměti se zakáže. Ve výchozím nastavení je povolená.

Maxconnections

Určuje maximální počet připojení k mezipaměti. Maximální limit připojení by měl být nakonfigurovaný na základě počtu souběžných relací PKCS11, které aplikace používá. Aplikace obvykle vytvářejí fond relací PKCS11 a používají je z fondu vláken k paralelnímu generování žádostí o podepsání. Hodnota MaxConnections by se měla shodovat s počtem souběžných žádostí o podepsání generovaných aplikacemi.

Počet žádostí o podepsání za sekundu (RPS) závisí na počtu souběžných požadavků a počtu připojení uložených v mezipaměti. Pokud je počet souběžných žádostí o podepsání PKCS11 nižší než tento limit, zadáním vyššího čísla nebo dokonce výchozího limitu se podpisová služba nezlepší. Maximální počet souběžných připojení pro dosažení nárazového režimu fondu HSM úrovně Standard B1 je v závislosti na typu instance přibližně 30. Měli byste ale zkusit s různými čísly zjistit optimální počet souběžných připojení.

Další informace o tom, jak aplikace používá knihovnu PKCS11, najdete v dokumentaci k aplikaci nebo se obraťte na dodavatele aplikace.

Použití knihovny pro snižování zátěže TLS

Generování klíčů

Knihovna TLS Offload Library obsahuje nástroj pro vytvoření klíče, mhsm_p11_create_key. Spuštění nástroje bez argumentů příkazového řádku ukazuje správné použití nástroje.

Nástroj pro vytváření klíčů vyžaduje instanční objekt, který je přiřazený k roli "Spravovaný kryptografický uživatel HSM" v oboru "/keys".

Nástroj pro vytváření klíčů načte přihlašovací údaje instančního objektu z proměnných prostředí MHSM_CLIENT_ID a MHSM_CLIENT_SECRET.

  • MHSM_CLIENT_ID – musí být nastavené na ID aplikace (klienta) instančního objektu.
  • MHSM_CLIENT_SECRET – musí být nastavené na heslo instančního objektu (tajný klíč klienta).

Nástroj pro vytváření klíčů náhodně vygeneruje název klíče v době jeho vytvoření. Úplné ID klíče Azure Key Vault a název klíče se pro usnadnění vytiskne do konzoly.

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

Argument --label nástroje pro vytváření klíčů určuje požadovanou CKA_LABEL pro vygenerované privátní a veřejné klíče. Tyto atributy se obvykle vyžadují ke konfiguraci podporovaných řešení pro snižování zátěže TLS (například nastavení konfigurace ssl nginx ssl_certificate_key).

Název klíče se vyžaduje, pokud plánujete implementovat podrobný přístup ke klíčům.

Implementace protokolu TLS bez klíčů

Existují dva přístupy, jak vygenerovat klíč a použít ho pro protokol TLS bez klíče: jednodušší a přístup s větší úrovní oprávnění a odstupňovaný přístup, který nabízí lepší zabezpečení. Přístupy se liší v úsilí o implementaci a vynucování zabezpečení.

Jednodušší přístup

  1. Vytvoření instančního objektu pro knihovnu TLS Přesměrování zpracování (například TLSOffload ServicePrincipal)
  2. Přiřaďte instančnímu objektu přesměrování zpracování TLS v oboru /keys roli Spravovaný kryptografický uživatel HSM.
    az keyvault role assignment create --hsm-name ContosoMHSM \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys
    
  3. Vygenerujte klíč s požadovaným popiskem podle kroků v tématu Postup generování klíčů pomocí knihovny tls pro přesměrování zpracování.
  4. Nakonfigurujte server TLS tak, aby jako knihovnu rozhraní PKCS#11 používal knihovnu přesměrování zpracování TLS spravovaného HSM.
  5. Nakonfigurujte server TLS (například nastavení konfigurace SSL serveru nginx ssl_certificate_key) s popiskem klíče a přihlašovacími údaji instančního objektu přesměrování zpracování TLS.

Podrobný přístup

  1. Vytvořte uživatele Správa (například TLSOffloadAdminUser) s následující rolí:
    • Role Managed HSM Crypto Officer v oboru /
  2. Vytvořte instanční objekt generování klíčů (například TLSOffloadKeyGenServicePrincipal) pro generování klíče tls offload a přiřaďte následující roli:
    • Role "Spravovaný kryptografický uživatel HSM" v oboru "/keys".
  3. Vytvoření instančního objektu pro přesměrování zpracování TLS (například TLSOffload ServicePrincipal)
  4. Uživatel Správa vytvoří následující vlastní definici role:
    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. Vygenerujte klíč s požadovaným popiskem podle pokynů v tématu Jak vygenerovat klíče pomocí knihovny tls pro snižování zátěže. Při generování klíčů použijte instanční objekt generování klíčů (například TLSOffloadKeyGenServicePrincipal). Poznamenejte si popisek klíče a název klíče. Příklad:
    • Popisek klíče: tlsKey
    • Název klíče: p11-6a2155dc40c94367a0f97ab452dc216f
  6. Správa Uživatel přiřadí instančnímu objektu přesměrování zpracování TLS následující role.
    • Role Čtení uživatele knihovny TLS v oboru /keys
    • Role Spravovaný kryptografický uživatel HSM v oboru /keys/{název_klíče}
    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. Nakonfigurujte server TLS tak, aby jako knihovnu rozhraní PKCS#11 používal knihovnu přesměrování zpracování TLS služby Azure Managed HSM.
  8. Nakonfigurujte server TLS (například nastavení konfigurace SSL serveru nginx ssl_certificate_key) s popiskem klíče a přihlašovacími údaji instančního objektu přesměrování zpracování TLS.

Další kroky