JSK 1.7 jarsigner с https tsa больше не работает

Похоже, что корневые сертификаты Thawte в JDK 1.7.0_80 отозваны. 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

Использование jarsigner из JDK 8u60 работает, поэтому я попытался скопировать его cacerts в JDK7, но это тоже не сработало.

Мы не можем скомпилировать с Java 8 из-за ошибок Javadoc. Единственное решение, которое я вижу, - это создание символической ссылки в 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, он отлично работает с JDK 7, потому что они не используют https. http://timestamp.digicert.com/

4 ответа

Решение

Я также столкнулся с этой проблемой только за последние 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 отключил использование TLS версии 1.0, которая используется по умолчанию в Java 7. Следующие ссылки предоставляют дополнительную информацию об этом:

GeoTrust Partner: отключение протокола TLS на уровне 1.0

Диагностика TLS, SSL и HTTPS

Надеюсь это поможет.

Ответ user1638152 определенно правильный. Просто добавьте эту информацию, если у кого-то возникли те же проблемы, и Jar-подпись выполняется с помощью Apache Ant.

Добавляем следующую строку внутри задачи signjar:

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

Это делает то же самое, что и "-J-Dhttps.protocols=TLSv1.2" в командной строке.

Из ссылки GeoTrust кажется, что все, что нужно, это TLSv1.1, а из ссылки "Диагностика TLS, SSL и HTTPS" кажется, что самая ранняя версия Java, поддерживающая TLSv1.1, - это обновление JDK 6 111. Поэтому решение может работать так же, как эти версии.

Я не переключился на обновление 111 JDK 6, чтобы проверить это; Я жду, чтобы услышать от клиентов, которые застряли на старых версиях Java, чтобы увидеть, насколько современную версию Java мы можем использовать, не отрезав их.

Приложение: клиенты работают на JDK8, поэтому я просто переключился на это, и, как было предложено выше, это работало без необходимости -J-Dhttps.protocols=TLSv1.2, потому что TLSv1.2 является значением по умолчанию для JDK 8.

Помните, что https://timestamp.geotrust.com/tsa более недоступен, вместо этого следует использовать http://sha256timestamp.ws.symantec.com/sha256/timestamp.

Посмотрите, это http://timestamp.geotrust.com/tsa больше не доступно для SignTool? узнать больше об этом.

Другие вопросы по тегам