使用 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
它不存在,你也不需要它存在。证书只需要一个独特的主题密钥 IDentifier 属性中的标识符可以告诉您的系统使用哪个密钥来解密它。它甚至不需要是哈希,只需要是唯一的。您也可以将文本“Zeutheus Key #1”用作 SKID,只要您不重复使用它来标记不同的密钥即可。
如果您确实想使用 SHA-256 来生成 SKID,那就去做吧。一旦有了它,您就必须创建一个使用新值的新证书请求,并对其进行签名。某些工具(如 Microsoft 的 certutil.exe)允许您在证书请求上为任何 OID 设置特定值。您可以生成公钥的 SHA-256 哈希,然后将该值放入 SKID OID 中。但是,当默认生成足以满足此目的的 SHA-1 哈希时,您无需做这么多工作。