
使用Keytool,我們可以使用以下命令查看密鑰庫的詳細信息
keytool -list -v -keystore <KeystoreName>
這將傳回一組值,包括主題密鑰標識符
SubjectKeyIdentifier [
KeyIdentifier [
0000: 60 7B 66 1A 45 0D 97 4B CA 89 50 2F 7D 04 CD 34
0010: A8 FF FC FD
]
]
這是 SHA1 金鑰標識符。如何取得同一金鑰庫的 SHA 256 金鑰標識符?
答案1
這主題密鑰標識符(SKI 或 SKID)是單一憑證的屬性(X.509 擴充)。
當憑證被簽署時,它通常被計算為 SHA-1 雜湊,散列的資料可能會有所不同,但通常至少包括主題公鑰位元字串,並且它可能不是完整的 160 位元 SHA-1 值。
(技術上)唯一關心如何創建哈希值的是執行簽名的系統,或者有時是創建請求的系統,因為它可以添加到請求中。除此之外,它被視為不透明的指紋或唯一 ID - 只需比較其值即可識別特定證書或其頒發者(以協助和優化路徑檢查),不需要重新計算。
如果您想要正確計算 SHA-256 雜湊值,那麼您需要找出您的系統到底使用哪些欄位來計算雜湊值,並將其用作 SHA-256 的輸入。看RFC 5280, 尤其§4.2.1.1和§4.2.1.2。簽署後的資料為大概只是主題公鑰或者主題公鑰訊息在二進位 DER 格式中,後者似乎是 OpenSSL 簽章憑證的情況。
此(已過期)RFC 草案建議使用 SHA-2 雜湊值作為主題金鑰標識符: https://datatracker.ietf.org/doc/html/draft-turner-additional-methods-4kis-08
有一個功能請求和補丁可以解決這個問題OpenSSL 錯誤 #2599
答案2
它不存在,而且你真的不需要它存在。證書只需要一個獨特的主題密鑰標識符屬性中的標識符可以告訴您的系統使用哪個密鑰來解密它。它甚至不需要是散列,它只需要是唯一的。您也可以使用文字「Zeutheus Key #1」作為 SKID,只要您不重複使用它來標記不同的金鑰即可。
如果您確實想使用 SHA-256 產生 SKID,請繼續。取得該憑證後,您必須建立使用新值的新憑證要求,並對其進行簽署。有些工具(例如 Microsoft 的 certutil.exe)可讓您為憑證要求上的任何 OID 設定特定值。您可以產生公鑰的 SHA-256 雜湊值,然後將該值放入 SKID OID 中。但是,當預設產生足以滿足此目的的 SHA-1 雜湊值時,您無需執行大量工作。