即使指定了SHA2,Java Keytool也会创建SHA1证书

Pre*_*red 2 encryption ssl cryptography certificate keytool

到目前为止,出于大多数学习目的,我试图使用Java的keytool生成SHA2证书。但是,当我生成密钥时,它说证书指纹是SHA1,而不是SHA2。

keytool -genkey -alias test_sha2_rsa_key -keyalg RSA -keysize 2048 -keystore .keystore -sigalg "SHA256withRSA"
Run Code Online (Sandbox Code Playgroud)

这是列出键时的结果。

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
Run Code Online (Sandbox Code Playgroud)

我读错了还是做错了?

Maa*_*wes 5

SHA-1指纹是根据二进制(DER)编码的证书计算的。它不包含在证书中,并且-正如Dave已经规定的那样-与tbsCertificate(证书的“待签名”部分)上的签名无关。实际上,由于它遍及整个证书,因此签名算法参考(OID)和签名本身也包含在指纹数据中。


请注意,使用SHA-1对证书进行指纹签名与使用SHA-1签署证书一样安全。这取决于使用指纹的方式,但是原则上,如果(或何时)SHA-1损坏,这可能会引入漏洞。