Pkcs11
使用 PKCS #11 證書對象進行驗證
X.509
使用證書中包含的公鑰的正確方法是什麼PKCS #11
?
C_VerifyInit
的hKey
輸入說“hKey 是驗證密鑰的句柄”是否允許傳遞包含公鑰的證書句柄?
還是要求從證書中提取公鑰並重新導入為單獨的公鑰,然後將此公鑰句柄用於驗證操作?
謝謝!
引用PKCS#11 規範:
證書對象(對像類 CKO_CERTIFICATE)持有公鑰或屬性證書。除了提供對證書對象的訪問之外,Cryptoki 沒有為證書附加任何特殊含義。(§4.6.2)
所以不,除了儲存和檢索它的屬性之外,你不能對證書對像做任何事情。
這在以下規範中得到證實
C_VerifyInit
:驗證密鑰的
CKA_VERIFY
屬性,指示密鑰是否支持驗證,其中籤名是數據的附錄,必須是CK_TRUE
.證書對像不是密鑰,
CKA_VERIFY
也未列為允許的屬性,因此不能用於C_VerifyInit
.當證書與私鑰一起儲存時,將證書儲存在令牌中的能力主要是有用的。您使用私鑰簽署數據(包括身份驗證質詢)並發送由 CA 簽署的證書作為身份驗證的一部分。將私鑰儲存在加密令牌中很有用,因為這樣可以更好地防止密鑰洩露。將公鑰或證書儲存在加密令牌中並不是特別有用,因為它不是機密的¹。將證書放入令牌的目的是,如果密鑰和相應的證書儲存在同一位置,則更容易管理密鑰生命週期(創建、註冊、銷毀……)。
¹將證書放入加密令牌可以保證其完整性,但這通常是沒有意義的,因為使用證書的程式碼在令牌之外。如果您可以更改使用證書的程式碼以使用不同的程式碼或忽略驗證結果,則阻止修改證書不會獲得任何收益。