Udostępnij przez


Uwierzytelnianie w module HSM w chmurze platformy Azure

Uwierzytelnianie jest kluczowym aspektem bezpiecznego uzyskiwania dostępu i działania w ramach modułu HSM w chmurze platformy Azure. W tym artykule opisano metody uwierzytelniania, w tym interfejs wiersza polecenia,PKCS#11, rozszerzenie kryptografii Języka Java (JCE) i protokół OpenSSL. Ten artykuł zawiera również najlepsze praktyki dotyczące obsługi wielowątkowości i sesji.

Uwierzytelnianie interfejsu wiersza polecenia modułu HSM w chmurze

Uwierzytelnianie można przeprowadzić przy użyciu narzędzi interfejsu wiersza polecenia, takich jak azcloudhsm_util w trybie interaktywnym lub w trybie pojedynczego polecenia. W trybie interaktywnym użyj polecenia loginHSM. W trybie pojedynczego polecenia uwzględnij singlecmd i parametry dla loginHSM. Zalecamy bezpieczne przechowywanie poświadczeń modułu HSM, gdy aplikacja ich nie używa.

Tryb interaktywny

./azcloudhsm_util
loginHSM -u CU -s cu1 -p user1234

Tryb pojedynczego polecenia

sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s cu1 -p user1234 findKey

Uwierzytelnianie PKCS#11

W pliku PKCS#11 logujesz się przy użyciu interfejsu API po otwarciu C_Login sesji przy użyciu polecenia C_OpenSession. Należy użyć C_Login tylko raz na każdy slot (klaster HSM w chmurze). Po pomyślnym zalogowaniu można otworzyć dodatkowe sesje przy użyciu C_OpenSession bez ponownego logowania.

char pPin[256] = "cu1:user1234";
…
rv = (func_list->C_Initialize) (NULL);
rv = (func_list->C_GetTokenInfo) (slot, &token_info);
rv = (func_list->C_OpenSession) (slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw);
rv = (func_list->C_Login) (session_rw, CKU_USER, (CK_UTF8CHAR_PTR) pPin, n_pin);
…

Aby uzyskać przykłady kodu uwierzytelniania w PKCS#11, zobacz przewodnik dotyczący integrowania protokołu PKCS#11 z modułem HSM w chmurze platformy Azure.

Uwierzytelnianie JCE

Dostawca JCE dla modułu HSM w chmurze platformy Azure oferuje obsługę metod logowania niejawnego i jawnego. Każda z nich jest odpowiednia dla różnych przypadków użycia.

Zalecamy używanie niejawnego logowania zawsze, gdy jest to możliwe, ponieważ zestaw SDK autonomicznie zarządza uwierzytelnianiem. Ta metoda jest szczególnie przydatna, jeśli aplikacja rozłącza się z klastrem i wymaga ponownego uwierzytelnienia. Niejawne logowanie ułatwia również dostarczanie poświadczeń do aplikacji podczas integracji z platformami, na których bezpośrednia kontrola nad kodem aplikacji nie jest możliwa.

LoginManager lm = LoginManager.getInstance();
lm.login("PARTITION_1","cu1", "user1234");
…
lm.logout();
…

Aby uzyskać więcej informacji na temat metod logowania, zapoznaj się z przewodnikiem integrowania aplikacji JCE z modułem HSM w chmurze platformy Azure.

Uwierzytelnianie OpenSSL

W przypadku korzystania z modułu OpenSSL dla sprzętowego modułu zabezpieczeń (HSM) w chmurze Azure, zmienne środowiskowe dostarczają poświadczenia. Zalecamy bezpieczne przechowywanie poświadczeń modułu HSM, gdy aplikacja ich nie używa. Najlepiej skonfigurować środowisko tak, aby automatycznie pobierało i ustawiało te zmienne środowiskowe, aby uniknąć ręcznego wprowadzania.

export azcloudhsm_password="cu1:user1234" 
export azcloudhsm_openssl_conf=/usr/local/bin/AzureCloudHSM-ClientSDK-1.0.4.0/azcloudhsm_openssl_dynamic.conf
export LD_LIBRARY_PATH=/usr/local/lib64/AzureCloudHSM-ClientSDK-1.0.4.0/:$LD_LIBRARY_PATH
…
sudo ./azcloudhsm_client azcloudhsm_client.cfg > /dev/null 2>&1 &
openssl genpkey -algorithm RSA -out private_key.pem -engine azcloudhsm_openssl
…

Aby uzyskać szczegółowe informacje na temat uwierzytelniania za pomocą protokołu OpenSSL, zapoznaj się z przewodnikiem dotyczącym integrowania biblioteki OpenSSL z modułem HSM w chmurze platformy Azure.

Techniki wielowątkowe

Moduł HSM w chmurze platformy Azure obsługuje aplikacje wielowątkowane, ale istnieją zagadnienia dotyczące ich obsługi:

  • PKCS#11: Zainicjuj bibliotekę PKCS#11 tylko C_Initialize raz. Przypisz każdemu wątkowi własną sesję przy użyciu C_OpenSession. Unikaj korzystania z tej samej sesji w wielu wątkach.
  • JCE: Zainicjuj dostawcę modułu HSM na platformie Azure tylko raz. Unikaj udostępniania wystąpień obiektów interfejsu dostawcy usług (SPI) między wątkami. Na przykład, używaj obiektów Cipher, Signature, Digest, Mac, KeyFactory, i KeyGenerator tylko w odpowiednich kontekstach wątków.

Ponowne próby integracji operacji HSM

Firma Microsoft może wymienić moduł HSM w klastrze HSM w chmurze Azure na potrzeby operacyjne lub konserwacyjne, na przykład w przypadku awarii urządzenia. Aby przygotować aplikację do takich scenariuszy, zalecamy dodanie logiki ponawiania po stronie klienta do wszystkich operacji wysyłanych do klastra. Ta konfiguracja przewiduje, że kolejne próby ponawiania prób w operacjach zakończonych niepowodzeniem, niezależnie od tego, czy z powodu zamian czy tymczasowych przestojów konserwacyjnych zakończy się powodzeniem.

Obsługa sesji klienta modułu HSM w chmurze

Klient modułu HSM w chmurze platformy Azure loguje się i wychodzi ze wszystkich sesji modułu HSM za każdym razem, gdy jakakolwiek aplikacja wykonuje logowanie lub wylogowanie. W związku z tym, jeśli druga aplikacja korzysta z azurecloudhsm_client, współdzieli te same sesje i dziedziczy te same poświadczenia logowania, jeśli jest uruchomiona z tego samego hosta. Narzędzie azurecloudhsm_client śledzi, które aplikacje próbują się zalogować. Umożliwia ona aplikacjom, które są prawidłowo zalogowane, uruchamianie poleceń wymagających uwierzytelnienia.

Jeśli na przykład jesteś zalogowany za pomocą azurecloudhsm_util i próbujesz uruchomić swoją aplikację lub narzędzie do zarządzania kluczami w innym oknie terminala z usługą Azure Cloud HSM, wystąpi błąd, ponieważ sesja jest już aktywna. Musisz zamknąć sesję azurecloudhsm_util dla aplikacji, aby utworzyć sesję z azurecloudhsm_client uruchomionym na hoście, aby ją uwierzytelnić.