Java 即使指定了 SHA2,Keytool 也会创建 SHA1 证书
Java Keytool creates SHA1 certificate even though SHA2 is specified
到目前为止,出于主要学习目的,我正在尝试使用 Java 的密钥工具生成 SHA2 证书。但是,当我生成密钥时,它说证书指纹是 SHA1,而不是 SHA2。
keytool -genkey -alias test_sha2_rsa_key -keyalg RSA -keysize 2048 -keystore .keystore -sigalg "SHA256withRSA"
这是我列出键时的结果。
keytool -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
test_sha2_rsa_key, Jul 6, 2016, PrivateKeyEntry,
Certificate fingerprint (SHA1): DD:9E:55:B7:90:9F:91:6C:68:D3:5C:24:E7:D4:45:D1:7D:8C:3A:5A
我是看错了还是做错了?
SHA-1 指纹是根据二进制 (DER) 编码证书计算的。它不包含在证书中,并且 - 正如 Dave 已经规定的那样 - 与 tbsCertificate
(证书的一部分 "to be signed")上的签名无关。实际上,由于遍及整个证书,签名算法参考(OID)和签名本身也包含在指纹数据中。
请注意,使用 SHA-1 对证书进行指纹识别与使用 SHA-1 签署证书一样安全。这取决于指纹的使用方式,但原则上,如果(或何时)SHA-1 被破坏,这可能会引入漏洞。
到目前为止,出于主要学习目的,我正在尝试使用 Java 的密钥工具生成 SHA2 证书。但是,当我生成密钥时,它说证书指纹是 SHA1,而不是 SHA2。
keytool -genkey -alias test_sha2_rsa_key -keyalg RSA -keysize 2048 -keystore .keystore -sigalg "SHA256withRSA"
这是我列出键时的结果。
keytool -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
test_sha2_rsa_key, Jul 6, 2016, PrivateKeyEntry,
Certificate fingerprint (SHA1): DD:9E:55:B7:90:9F:91:6C:68:D3:5C:24:E7:D4:45:D1:7D:8C:3A:5A
我是看错了还是做错了?
SHA-1 指纹是根据二进制 (DER) 编码证书计算的。它不包含在证书中,并且 - 正如 Dave 已经规定的那样 - 与 tbsCertificate
(证书的一部分 "to be signed")上的签名无关。实际上,由于遍及整个证书,签名算法参考(OID)和签名本身也包含在指纹数据中。
请注意,使用 SHA-1 对证书进行指纹识别与使用 SHA-1 签署证书一样安全。这取决于指纹的使用方式,但原则上,如果(或何时)SHA-1 被破坏,这可能会引入漏洞。