[更新]甲骨文刚刚修改了加密路线图(
https://www.java.com/en/jre-jdk-cryptoroadmap.html),他们不会弃用SHA-1进行代码签名:2017-03-14目标日期从2017-04-18更改为2017-07-18.所有SHA-1使用范围都缩小:只有TLS会受到影响,*代码签名此时不会受到影响*.
这无论如何都不会影响我在下面收到的正确答案,因为它将来会适用.
–
原帖:
试图在JRE 9 ea 153上运行我们的Webstart部署的Java应用程序,我得到以下弹出窗口:
进一步查看详细信息,我发现证书仍然有效一段时间:
因此,我想知道是否弃用SHA1是什么原因?
这肯定听起来像是符合(others’ in the industry)的政策,但是这个消息听起来并不是新手友好的(特别是如果它是面向最终用户的话),所以我不知道.
我找了一个路线图. This是我发现的,但我不确定我是否正确地正确解释了这一段:
在Oracle JDK中默认包含的根锚定的证书链中禁用SHA-1;本地或企业CA不受影响.在2017-01-01之前加上时间戳的签名代码不受影响.
作为上述失败的原因.我非常感谢确认.
FWIW,我们的证书由CA颁发,我认为它与“企业”CA不同.
谢谢.
解决方法
如果最终用户打算使用已签名的Jar,则2017年签署的SHA1包无法正常运行.
很久以前就宣布逐步淘汰SHA1.
唯一的办法就是安装本地CA或其他东西,但这不会发生在最终用户机器上(也不应该).
要为您的最终用户签署一个Jar,您需要从CA获得一个新的有效SHA-256证书,并重新签署任何使用旧版本签署的Jar,在2016年12月31日之后签署.
无论如何,您的证书将在几个月后到期.
是否必须对您的罐子进行双重签名取决于您要定位的最旧的JVM版本.据我所知,> = 1.4.2支持SHA-256.如果你想要甚至更老的版本(当我开始编程java 1.5时已经被认为是OLD),你需要像双签名这样的东西.更多信息可以在here和here找到
“如何对一个罐子进行双重签名”可能是一个新话题,因为它与我认为的这个问题几乎无关.