java - 带有 https tsa 的 JDK 1.7 jarsigner 不再有效

标签 java jarsigner jdk1.7

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/

相关文章:

java - HibernatePersistenceProvider : Unsupported major. 次要版本 52.0 intellij

java - 使用 HTTP Apache 从 AJP 连接器后面的 Tomcat 传出连接

java - 池中没有可用连接,netstat 在 Recv-Q 中显示非零值

java - Runnable::new 与新的 Runnable()

java - 基于 no 的线程配置。 CPU 核心数

java - jarsigner 在退出 android 应用程序时返回 java.lang.NullPointerException 错误

gradle - 如何在 Gradle 中签署 jar 文件

java - 使用密码包含空格的 keystore 进行 jarsigning

java - String (bytes[] Charset) 在 Java7 和 Java 8 中返回不同的结果

java - 为什么 File.exists() 在多线程环境中表现异常?