Oracle刚刚修改了加密路线图(https://www.java.com/en/jre-jdk-cryptoroadmap.html),它们不会反对SHA-1进行代码签名:2017-03-14 Target date changed from 2017-04-18 to 2017-07-18. Narrowed scope from all SHA-1 usage: only TLS will be affected, *code signing will not not be affected at this time*.
无论如何,这绝不会影响我在下面收到的好答案,因为毫无疑问,这将在将来应用。
--
原始帖子:
尝试在JRE 9 ea 153
上运行我们的Webstart部署的Java应用程序,我得到以下弹出窗口:
进一步查看细节,我发现证书在一段时间内仍然有效:
,因此,我想知道是否不赞成使用SHA1?
当然,这听起来确实像是符合(others' in the industry)的政策,但是该消息听起来并不是对新手友好的(特别是如果要面向最终用户的话),所以让我纳闷。
我在寻找路线图。 This是我找到的,但是我不确定我是否正确解释了此段落: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.
作为上述失败的原因。我非常感谢您的确认。
FWIW,我们的证书是由CA颁发的,我认为它不同于“企业”CA。
谢谢你。
最佳答案
如果该签名的Jar供最终用户使用,则2017年SHA1签名的软件包将无法正常工作。
逐步淘汰SHA1是很久以前宣布的。
唯一的方法是安装本地CA或其他某种方式,但这不会在最终用户计算机上发生(也不应该)。
要为最终用户签名一个Jar,您需要从您的CA处获得一个新的有效SHA-256证书,并重新签名在2016年12月31日之后与旧签名的任何Jar。
无论如何,您的证书将在几个月后过期。
是否必须对jar进行双重签名取决于您要定位的最旧的JVM版本。据我了解,任何> = 1.4.2都支持SHA-256。如果您想定位甚至更老的版本(在我开始编程Java 1.5时,它已经被认为是OLD),那么您将需要双重签名之类的东西。可以找到更多信息here和here
“如何对 jar 进行双重签名”可能是一个新话题,因为我认为它与该问题几乎没有关系。