2016-07-06 87 views
1

对于目前为止的主要学习目的,我试图使用Java的keytool生成SHA2证书。但是,当我生成密钥时,它说证书指纹是SHA1,而不是SHA2。即使指定了SHA2,Java Keytool也会创建SHA1证书

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 

我看到这个错误,或者做错了吗?

+4

指纹与签名无关。您可以拥有MD5,SHA1,SHA256,以及如果您希望使用SHA512签名的证书的Whirpool和/或Skein指纹等等。试试'-list -v'来查看(大部分)证书的细节,包括sigalg。 –

+0

谢谢。我会更新这个问题。我错了。你说得对。 – Pred

回答

2

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


请注意,使用SHA-1指纹证书与使用SHA-1签署证书一样安全。这取决于如何使用指纹,但原则上如果(或何时)SHA-1中断可能会引入漏洞。

+1

那么,有人必须回答评论之外,对吧? –

相关问题