根据Java's deprecation of SHA-1 signed code,我正在转换到SHA-256。但是,我不确定为了符合新要求,我是否应该明确请求-digestalg SHA-256
(如果不是,则根据this向SHA-1发送sefaults)。 (旁注:虽然我的JKS中的公钥 - 私钥对是RSA
,但我发现我还必须明确询问-sigalg SHA256withRSA
。)
Java 9"早期访问"似乎只接受SHA1
摘要算法,只要签名算法是SHA256withRSA
。我搜索了这些确切术语的清晰解释(在上下文中......由jarsigner
验证报告:"摘要算法","签名算法")/他们但是,没有太大的成功,会产生影响。
我定位的JRE是6或更高。在构建机器上也使用Java 6。
[LE]对我来说更令人困惑的是,即使摘要算法和签名算法都是SHA-1
,似乎jarsigner(在Java 9中)验证了jar(阅读:没有提出任何抱怨)我使用SHA256
证书的帐户。
[L.E。 2]有趣的是,签署Java 9没有提供任何自定义标志,并使用相同的JKS,所有内容都按预期签名:
Digest algorithm: SHA-256
Signature algorithm: SHA256withRSA, 2048-bit key
我非常认为这种行为强调了#34;正确的做法"而不是Java 6。这很可能成为这个问题的答案......一旦Java 9发布。
另一方面,Java Crypto Roadmap也宣布了针对Java 6,7,8的相同计划(Disable SHA-1 in certificate chains anchored by roots included by default in Oracle's JDK; local or enterprise CAs are not affected. Signed code that is timestamped before 2017-01-01 is not affected.
)。