Udostępnij za pośrednictwem


Biblioteka odciążania protokołu TLS urządzenia HSM zarządzanego przez platformę Azure

Zarządzany moduł HSM platformy Azure oferuje bibliotekę odciążania protokołu TLS zgodną z protokołem PKCS#11 w wersji 2.40. Moduł HSM zarządzany przez platformę Azure nie obsługuje wszystkich funkcji wymienionych w specyfikacji PKCS#11; Zamiast tego biblioteka odciążania protokołu TLS obsługuje ograniczony zestaw mechanizmów i funkcji interfejsu dla odciążania protokołu SSL/TLS tylko za pomocą protokołu F5 (BigIP) i Nginx, głównie do generowania kluczy certyfikatów serwera TLS i generowania podpisów cyfrowych podczas uzgadniania protokołu TLS.

Aby uzyskać więcej informacji, zobacz Azure Managed HSM TLS Offload Library GitHub (Biblioteka odciążania protokołu TLS zarządzanego przez moduł HSM platformy Azure).

Biblioteka odciążania protokołu TLS wewnętrznie używa interfejsu API REST usługi Azure Key Vault do interakcji z zarządzanym modułem HSM platformy Azure.

Rozpocznij

Atrybuty PKCS#11

Aby prawidłowo zintegrować się z protokołem PKCS#11, generowanie kluczy (za pośrednictwem C_GenerateKeyPair) i lokalizowanie obiektów kluczy (za pośrednictwem C_FindObjectsInit/C_FindObjects) wymaga rozwiązania do przechowywania atrybutów PKCS#11 w obiekcie kluczy usługi Azure Key Vault. Biblioteka odciążania PROTOKOŁU TLS konwertuje te niezbędne atrybuty PKCS#11 na tagi usługi Azure Key Vault.

Te "Tagi atrybutów" mają specjalny prefiks:

  • p11_pri_{P11 Nazwa atrybutu} — atrybuty klucza prywatnego
  • p11_pub_{P11 Nazwa atrybutu} — atrybuty klucza publicznego

Biblioteka odciążania protokołu TLS prawidłowo ustawia atrybuty Operacje kluczy usługi Azure Key Vault i Okres istnienia klucza, aby usługa mogła prawidłowo wymuszać te ograniczenia dotyczące wygenerowanych kluczy. Te atrybuty są również przechowywane jako tagi, takie jak inne atrybuty PKCS#11 do obsługi możliwości zapytań.

Aplikacje korzystające z biblioteki odciążania PROTOKOŁU TLS używają co najmniej jednego atrybutu PKCS#11 do lokalizowania i używania obiektów kluczy.

Ostrzeżenie

Klucze generowane przez bibliotekę odciążania protokołu TLS i ich tagi są dostępne za pośrednictwem interfejsu API REST usługi Azure Key Vault. Manipulowanie tymi tagami atrybutów P11 przy użyciu interfejsu API REST usługi Azure Key Vault może spowodować przerwanie aplikacji biblioteki odciążania protokołu TLS.

Generowanie klucza

Biblioteka odciążania protokołu TLS zawiera narzędzie do tworzenia kluczy, mhsm_p11_create_key. Uruchomienie narzędzia bez żadnych argumentów wiersza polecenia pokazuje poprawne użycie narzędzia.

Narzędzie do tworzenia klucza wymaga jednostki usługi przypisanej do roli "Zarządzanego użytkownika kryptograficznego modułu HSM" w zakresie "/keys".

Narzędzie do tworzenia klucza odczytuje poświadczenia jednostki usługi ze zmiennych środowiskowych MHSM_CLIENT_ID i MHSM_CLIENT_SECRET:

  • MHSM_CLIENT_ID — musi być ustawiona na identyfikator aplikacji (klienta) jednostki usługi
  • MHSM_CLIENT_SECRET — należy ustawić hasło jednostki usługi (klucz tajny klienta)

W przypadku tożsamości zarządzanych powyższe zmienne środowiskowe nie są potrzebne.

  • Użyj argumentu --identity , aby włączyć tożsamość zarządzaną za pomocą narzędzia mhsm_p11_create_key.
  • Tożsamość client_id zarządzana przypisana przez użytkownika powinna być cytowana w pliku konfiguracji MHSM (mhsm-pkcs11.conf). client_id Jeśli tożsamość zarządzana przypisana przez użytkownika nie zostanie podana, zostanie ona uznana za tożsamość zarządzaną przypisaną przez system.

Narzędzie do tworzenia klucza losowo generuje nazwę klucza podczas tworzenia. Pełny identyfikator klucza usługi Azure Key Vault i nazwa klucza są drukowane w konsoli dla Wygody.

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 narzędzia do tworzenia klucza określa żądany CKA_LABEL dla wygenerowanych kluczy prywatnych i publicznych. Te atrybuty są zwykle wymagane do skonfigurowania obsługiwanych rozwiązań odciążania PROTOKOŁU TLS (na przykład ustawienia konfiguracji protokołu SSL nginx "ssl_certificate_key").

Potrzebna jest nazwa klucza dla wszystkich zmian przypisań ról za pośrednictwem interfejsu wiersza polecenia platformy Azure.

Kontrola dostępu

Biblioteka odciążania PROTOKOŁU TLS tłumaczy C_FindObjectsInit na wywołanie interfejsu API REST usługi Azure Key Vault, które działa w zakresie /keys. Usługa MHSM wymaga uprawnienia odczyt w tym zakresie, aby użytkownik biblioteki odciążania PROTOKOŁU TLS autoryzować operację znajdowania kluczy utworzonych za pomocą narzędzia do tworzenia klucza.

Aby uzyskać więcej informacji na temat lokalnej kontroli dostępu opartej na rolach modułu HSM zarządzanego przez usługę Azure, zobacz:

W poniższej sekcji opisano różne podejścia do implementowania kontroli dostępu dla jednostki usługi biblioteki odciążania PROTOKOŁU TLS i tożsamości zarządzanej.

Odciążanie jednostki usługi TLS

Jednostka usługi odciążania TLS jest używana przez aplikację, która używa biblioteki odciążania PROTOKOŁU TLS do uzyskiwania dostępu do kluczy i powinna mieć co najmniej następujące uprawnienia za pośrednictwem przypisań ról:

  • Uprawnienie KeyRead do wszystkich kluczy w zarządzanym module HSM
  • Uprawnienie KeySign do kluczy niezbędnych do odciążania protokołu TLS

Administrator

Administrator utworzy niestandardową definicję roli i przypisania ról. W związku z tym użytkownik administracyjny powinien być przypisany do jednej z następujących ról wbudowanych w zakresie "/":

  • Zarządzany oficer kryptograficzny modułu HSM
  • Administrator zasad zarządzanego modułu HSM
  • Administrator zarządzanego modułu HSM

Jednostka usługi generowania kluczy

Jednostka usługi generowania kluczy jest używana z narzędziem do tworzenia kluczy (mhsm_p11_create_key) do generowania kluczy odciążania protokołu TLS. Ta jednostka usługi powinna być przypisana do roli "Zarządzanego użytkownika kryptograficznego modułu HSM" w zakresie "/keys".

Interfejs wiersza polecenia platformy Azure

Interfejs wiersza polecenia platformy Azure może służyć do wykonywania zadań, takich jak przypisanie roli.

Podejście permissywne

Podejście permissive jest prostsze i odpowiednie, gdy zarządzany moduł HSM platformy Azure jest używany wyłącznie do odciążania protokołu TLS.

Przypisz rolę Użytkownika kryptograficznego do jednostki usługi odciążania protokołu TLS w zakresie "/keys". Daje to jednostce usługi odciążania protokołu TLS uprawnienie do generowania kluczy i znajdowania ich na potrzeby odciążania protokołu TLS.

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

W przypadku tożsamości zarządzanych określ argumenty poleceń w następujący sposób:

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

Szczegółowe podejście

Szczegółowe podejście implementuje szczegółową kontrolę dostępu. Wymaga dwóch jednostek usługi (odciążanie jednostki usługi TLS i jednostki usługi generowania kluczy) i administratora.

Celem jest ograniczenie uprawnień jednostki usługi odciążania protokołu TLS w celu obsługi minimalnego wymaganego odciążania protokołu TLS. Użytkownik musi mieć uprawnienie Odczyt dla innych kluczy, aby obsługiwać funkcję C_FindObject* biblioteki.

Rola odczytu użytkownika biblioteki odciążania protokołu TLS

Pierwszym krokiem implementacji szczegółowego podejścia jest utworzenie roli niestandardowej. Tę operację należy wykonać tylko raz.

Użytkownik administracyjny (z zarządzanym administratorem kryptograficznym modułu HSM lub administratorem zarządzanych modułów HSM lub administratorem zasad zarządzanego modułu HSM) tworzy niestandardową definicję roli "Odczyt użytkownika biblioteki 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": [] \
}'

Generowanie kluczy

Klucze można wygenerować przy użyciu jednostki usługi generowania kluczy za pomocą narzędzia do tworzenia klucza (mhsm_p11_create_key).

Udzielanie uprawnień

Administrator przypisuje następujące role do jednostki usługi odciążania PROTOKOŁU TLS.

  • Przypisywanie roli "Rola odczytu użytkownika biblioteki TLS" w zakresie "/keys"
  • Przypisywanie roli "Zarządzanego użytkownika kryptograficznego modułu HSM" w zakresie "/keys/{key name}"

W poniższym przykładzie nazwa klucza to "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

Buforowanie połączeń

Aby zwiększyć wydajność wywołań podpisywania do usługi zarządzanego modułu HSM, biblioteka odciążania PROTOKOŁU TLS buforuje połączenia TLS z serwerami usługi zarządzanego modułu HSM. Domyślnie odciążanie biblioteki TLS buforuje maksymalnie 20 połączeń TLS. Buforowanie połączeń można kontrolować za pomocą pliku konfiguracji MHSM (mhsm-pkcs11.conf).

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

Wyłącz

Jeśli ta wartość ma wartość true, buforowanie połączeń zostanie wyłączone. Jest ona domyślnie włączona.

Maksymalna liczba połączeń

Określa maksymalną liczbę połączeń z pamięcią podręczną. Maksymalny limit połączenia należy skonfigurować na podstawie liczby współbieżnych sesji PKCS11 używanych przez aplikację. Aplikacje zazwyczaj tworzą pulę sesji PKCS11 i używają ich z puli wątków do równoległego generowania żądań podpisywania. Maksymalna liczba równoczesnych żądań podpisywania generowanych przez aplikacje powinna być zgodna z liczbą współbieżnych żądań podpisywania.

Żądanie podpisania na sekundę (RPS) zależy od liczby współbieżnych żądań i liczby połączeń buforowanych. Określenie większej liczby lub nawet limitu domyślnego nie poprawi podpisywania RPS, jeśli liczba współbieżnych żądań podpisywania PKCS11 jest niższa niż ten limit. Maksymalna liczba współbieżnych połączeń w celu osiągnięcia trybu serii w puli modułów HSM w warstwie Standardowa B1 wynosi około 30 w zależności od typu wystąpienia. Należy jednak spróbować użyć różnych liczb, aby ustalić optymalną liczbę współbieżnych połączeń.

Zapoznaj się z dokumentacją aplikacji lub skontaktuj się z dostawcą aplikacji, aby dowiedzieć się więcej o sposobie korzystania z biblioteki PKCS11 przez aplikację.

Korzystanie z biblioteki odciążania protokołu TLS

Generowanie kluczy

Biblioteka odciążania protokołu TLS zawiera narzędzie do tworzenia kluczy, mhsm_p11_create_key. Uruchomienie narzędzia bez żadnych argumentów wiersza polecenia pokazuje poprawne użycie narzędzia.

Narzędzie do tworzenia klucza wymaga jednostki usługi przypisanej do roli "Zarządzanego użytkownika kryptograficznego modułu HSM" w zakresie "/keys".

Narzędzie do tworzenia klucza odczytuje poświadczenia jednostki usługi ze zmiennych środowiskowych MHSM_CLIENT_ID i MHSM_CLIENT_SECRET.

  • MHSM_CLIENT_ID — musi być ustawiona na identyfikator aplikacji (klienta) jednostki usługi
  • MHSM_CLIENT_SECRET — należy ustawić hasło jednostki usługi (klucz tajny klienta)

Narzędzie do tworzenia klucza losowo generuje nazwę klucza podczas tworzenia. Pełny identyfikator klucza usługi Azure Key Vault i nazwa klucza są drukowane w konsoli dla Twojej wygody.

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 narzędzia do tworzenia klucza określa żądany CKA_LABEL dla wygenerowanych kluczy prywatnych i publicznych. Te atrybuty są zwykle wymagane do skonfigurowania obsługiwanych rozwiązań odciążania PROTOKOŁU TLS (na przykład ustawienia konfiguracji protokołu SSL nginx "ssl_certificate_key").

Nazwa klucza jest wymagana, jeśli planujesz zaimplementować szczegółowy dostęp do kluczy.

Implementowanie bez klucza protokołu TLS

Istnieją dwa podejścia do generowania klucza i używania klucza dla protokołu TLS bez klucza: prostsze, bardziej permisywne podejście i szczegółowe podejście, które zapewnia lepsze zabezpieczenia. Podejścia różnią się nakładem pracy nad implementacją i wymuszaniem zabezpieczeń.

Prostsze podejście

  1. Tworzenie jednostki usługi dla biblioteki odciążania PROTOKOŁU TLS (na przykład TLSOffload ServicePrincipal)
  2. Przypisz rolę "Zarządzanego użytkownika kryptograficznego modułu HSM" do jednostki usługi odciążania PROTOKOŁU TLS w zakresie "/keys".
    az keyvault role assignment create --hsm-name ContosoMHSM \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys
    
  3. Wygeneruj klucz z wymaganą etykietą, wykonując kroki opisane w temacie Jak wygenerować klucze przy użyciu biblioteki odciążania protokołu TLS.
  4. Konfigurowanie serwera TLS do używania zarządzanej biblioteki odciążania protokołu TLS modułu HSM jako biblioteki interfejsu PKCS#11
  5. Skonfiguruj serwer TLS (na przykład ustawienie konfiguracji ssl nginx "ssl_certificate_key" przy użyciu etykiety klucza i poświadczeń jednostki usługi TLS odciążania

Szczegółowe podejście

  1. Utwórz użytkownika administratora (na przykład TLSOffloadAdminUser) z następującą rolą:
    • Rola "Managed HSM Crypto Officer" w zakresie "/"
  2. Utwórz jednostkę usługi generowania kluczy (na przykład TLSOffloadKeyGenServicePrincipal) dla generowania klucza odciążania PROTOKOŁU TLS i przypisz następującą rolę:
    • Rola "Zarządzanego użytkownika kryptograficznego modułu HSM" w zakresie "/keys".
  3. Tworzenie jednostki usługi dla odciążania protokołu TLS (na przykład TLSOffload ServicePrincipal)
  4. Administrator tworzy następującą definicję roli niestandardowej:
    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. Wygeneruj klucz z wymaganą etykietą zgodnie z instrukcjami "Jak wygenerować klucze przy użyciu biblioteki odciążania PROTOKOŁU TLS". Podczas generowania kluczy użyj jednostki usługi generowania kluczy (na przykład TLSOffloadKeyGenServicePrincipal). Zanotuj etykietę klucza i nazwę klucza. Na przykład: .
    • Etykieta klucza: tlsKey
    • Nazwa klucza: p11-6a2155dc40c94367a0f97ab452dc216f
  6. Administrator przypisuje następujące role do jednostki usługi odciążania PROTOKOŁU TLS
    • Rola "Rola odczytu użytkownika biblioteki TLS" w zakresie "/keys"
    • Rola "Zarządzanego użytkownika kryptograficznego modułu HSM" w zakresie "/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. Konfigurowanie serwera TLS do używania biblioteki odciążania protokołu TLS zarządzanego przez moduł HSM platformy Azure jako biblioteki interfejsu PKCS#11
  8. Skonfiguruj serwer TLS (na przykład ustawienie konfiguracji ssl nginx "ssl_certificate_key" przy użyciu etykiety klucza i poświadczeń jednostki usługi TLS odciążania

Następne kroki