【问题标题】:Java Keytool creates SHA1 certificate even though SHA2 is specified即使指定了 SHA2,Java Keytool 也会创建 SHA1 证书
【发布时间】:2016-11-09 00:45:41
【问题描述】:

到目前为止,出于学习目的,我正在尝试使用 Java 的 keytool 生成 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

我读错了,还是做错了?

【问题讨论】:

  • 指纹与签名无关。您可以使用 MD5、SHA1、SHA256,如果您想要使用 SHA512 签名的证书的 Whirpool 和/或 Skein 指纹,等等所有组合。尝试-list -v 查看证书的(大部分)详细信息,包括 sigalg。
  • 谢谢。我会更新问题。我错了。你是对的。

标签: ssl encryption cryptography certificate keytool


【解决方案1】:

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


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

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 2018-04-08
    • 2016-06-27
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2014-11-06
    • 2013-12-03
    相关资源
    最近更新 更多