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
Надеюсь это поможет.
Ответ 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? узнать больше об этом.