JDK 1.7.0_80 中的 Thawte 根证书似乎已被吊销。 https://www.thawte.com/roots/retired.html
使用 7u80 jarsigner 不再有效,几天前它还可以正常工作。
/usr/java/jdk1.7.0_80/jre/../bin/jarsigner -keystore /home/build/keystore.p12 -storepass storepass -storetype pkcs12 -tsa https://timestamp.geotrust.com/tsa /home/build/jenkins/workspace/my-gui/target/my-gui-3.0.29-SNAPSHOT.jar comp
jarsigner: unable to sign jar: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
删除旧证书后,我尝试将 Thawtes Timestamping CA 证书导入 cacerts。
wget https://www.thawte.com/roots/Thawte_Timestamping_CA.pem
/usr/java/jdk1.7.0_80/bin/keytool -import -trustcacerts -alias verisigntsaca -file Thawte_Timestamping_CA.pem -keystore jre/lib/security/cacerts
Enter keystore password:
Trust this certificate? [no]: yes
Certificate was added to keystore
使用 JDK 8u60 中的 jarsigner 可以,所以我尝试将它的 cacerts 复制到 JDK7,但这也没有用。
由于 Javadoc 错误,我们还无法使用 Java 8 进行编译。我看到的唯一解决方案是在 JDK7 中创建到 JDK8 jarsigner 的符号链接(symbolic link)。
/usr/java/jdk1.8.0_60/jre/../bin/jarsigner -keystore /home/build/keystore.p12 -storepass storepass -storetype pkcs12 -tsa https://timestamp.geotrust.com/tsa /home/build/jenkins/workspace/my-gui/target/my-gui-3.0.29-SNAPSHOT.jar comp
jar signed.
如果我将 tsa 从 geotrust 切换到 digicert,它可以在 JDK 7 上正常工作,因为它们不使用 https。 http://timestamp.digicert.com/
最佳答案
我也是在过去 12 小时内才遇到这个问题。这个问题与证书无关,而是与用于与时间戳服务器通信的协议(protocol)有关。这将适用于 JDK7,但是您需要将以下内容添加到 jarsigner 命令中
-J-Dhttps.protocols=TLSv1.2
因此,您的命令将如下所示:
/usr/java/jdk1.7.0_80/jre/../bin/jarsigner -J-Dhttps.protocols=TLSv1.2 -keystore /home/build/keystore.p12 -storepass storepass -storetype pkcs12 -tsa https://timestamp.geotrust.com/tsa /home/build/jenkins/workspace/my-gui/target/my-gui-3.0.29-SNAPSHOT.jar comp
似乎 GeoTrust 已经禁用了 Java 7 中默认的 TLS 版本 1.0。以下链接提供了这方面的更多信息:
GeoTrust Partner: Disable of Transport Layer Security (TLS) version 1.0 protocol
Diagnosing TLS, SSL, and HTTPS
希望这对您有所帮助。
关于java - 带有 https tsa 的 JDK 1.7 jarsigner 不再有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890580/