View a markdown version of this page

使用 AWS CloudHSM 用戶端 SDK 5 的 PKCS #11 程式庫擷取屬性 - AWS CloudHSM

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS CloudHSM 用戶端 SDK 5 的 PKCS #11 程式庫擷取屬性

當您的應用程式從金鑰或憑證物件讀取屬性時,PKCS #11 程式庫會針對每次C_GetAttributeValue呼叫傳送一個請求到您的叢集。範本中的屬性數目不會變更請求數目。一個請求十個屬性的呼叫會傳送一個請求。每個請求一個屬性傳送十個請求的十個呼叫。

每個呼叫會在一個請求中從您的叢集讀取物件的屬性,然後複製範本請求的值。PKCS #11 程式庫不會快取值,因此每次呼叫都會傳送新的請求。

若要減少應用程式傳送的請求數量,請遵循下列建議:

  • 在單一範本中請求您需要的每個屬性。建置單一範本,其中包含您想要的所有屬性,並將其傳遞給一個C_GetAttributeValue呼叫。下列範例會使用一個呼叫讀取金鑰的三個屬性。

    CK_OBJECT_CLASS obj_class; CK_BYTE label[128]; CK_BYTE id[128]; CK_ATTRIBUTE attrs[] = { {CKA_CLASS, &obj_class, sizeof(obj_class)}, {CKA_LABEL, label, sizeof(label)}, {CKA_ID, id, sizeof(id)}, }; rv = funcs->C_GetAttributeValue(session, object, attrs, sizeof(attrs) / sizeof(CK_ATTRIBUTE));

    如需詳細資訊,請參閱 GitHub 網站上的列出金鑰屬性。

  • 僅請求物件支援的屬性和您可以讀取的屬性。當您的範本命名物件沒有的屬性時, CK_UNAVAILABLE_INFORMATION會針對該屬性ulValueLen將 C_GetAttributeValue設定為 ,並傳回 CKR_ATTRIBUTE_TYPE_INVALID。敏感屬性的行為方式相同,並傳回 CKR_ATTRIBUTE_SENSITIVE。在這兩種情況下,範本中的其他屬性仍會收到其值。檢查ulValueLen每個屬性,而不是只檢查呼叫的傳回值。如需每個物件類型支援的屬性,以及敏感的屬性,請參閱 AWS CloudHSM 用戶端 SDK 5 的 PKCS #11 程式庫屬性資料表。

  • 檢查您的語言繫結進行多少呼叫。Python 或 Java 等語言的 PKCS #11 繫結決定其傳送的C_GetAttributeValue呼叫數量。有些繫結會為每個屬性傳送一個呼叫,有些則傳送兩個。使用繫結提供的界面一次讀取多個屬性,並測量應用程式傳送的呼叫。

  • 快取應用程式中的屬性值。一次讀取物件的屬性,並存放應用程式所需的值。您可以重複使用快取的值,直到有物件變更為止。當其他應用程式或使用者可以修改物件時,請在快取完成後重新整理快取。

  • 在讀取屬性之前配置緩衝區。PKCS #11 標準說明變數長度值的雙路模式。您的應用程式C_GetAttributeValue呼叫 並將 pValue 設定為 NULL_PTR 以學習長度,然後再次呼叫 以讀取值。兩個呼叫都會傳送請求。當您知道儲存您預期值的緩衝區大小時,請先配置緩衝區,並使用一次呼叫讀取值。

    緩衝區太小會CKR_BUFFER_TOO_SMALL傳回該屬性,而呼叫仍會傳送請求。針對您預期的值,選擇足夠寬鬆的緩衝區大小。保留範本的屬性,例如 CKA_WRAP_TEMPLATE,仍然需要雙通道模式。

注意

這些建議同時適用於金鑰物件和憑證物件,而不同的限制則適用於每個物件。憑證儲存體具有固定的讀取速率限制,而且憑證物件上的每個C_GetAttributeValue呼叫都會使用一個讀取操作。對於關鍵物件,您的 HSMs 調節屬性會在達到容量時讀取,而不是以固定速率讀取。PKCS #11 程式庫會自動重試這些請求。傳送較少的請求有助於您的應用程式保持在這兩個限制內。如需詳細資訊,請參閱憑證儲存限制及HSM 調節。