6

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へのシンボリックリンクを作成することです。

/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 に切り替えると、https を使用しないため、JDK 7 で正常に動作します。 http://timestamp.digicert.com/

4

4 に答える 4

10

また、この問題が発生したのは過去 12 時間のみです。この問題は、証明書に関するものではなく、タイムスタンプ サーバーとの通信に使用されるプロトコルに関するものです。これは 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 パートナー: Transport Layer Security (TLS) バージョン 1.0 プロトコルの無効化

TLS、SSL、および HTTPS の診断

お役に立てれば。

于 2016-10-06T14:59:13.697 に答える
2

user1638152 の答えは間違いなく正しいです。誰かが同じ問題を抱えていて、jar 署名が Apache Ant を使用して行われている場合は、この情報を追加するだけです。

signjar タスク内に次の行を追加します。

<sysproperty key="https.protocols" value="TLSv1.2" />

これは、コマンド ラインで "-J-Dhttps.protocols=TLSv1.2" を実行するのとまったく同じことを行います。

于 2016-10-31T14:23:10.460 に答える