本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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,仍然需要雙通道模式。