Что происходит с приложением Java Web Start (подписанным без отметки времени) по истечении срока действия сертификата?

У нас есть приложение Java Web Start, подписанное сертификатом CA (Thawte). Приложение распространяется среди сотен клиентов. Они размещали его на своих серверах и запускали через Интернет или интранет на своих клиентских компьютерах. Теперь он работает идеально. Проблема в том, что приложение подписано без отметки времени. Что происходит с клиентами, когда срок действия сертификата истекает? Должны ли они иметь возможность запустить приложение? Если нет, то как мы можем им помочь? Помогает ли им добавление URL-адреса их сервера в список сайтов-исключений?

Мы попытались изменить местное время, чтобы имитировать истечение срока действия сертификата. Затем приложение блокируется из соображений безопасности. Добавление URL-адреса в список сайтов-исключений не помогает:

java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
at com.sun.deploy.security.RevocationChecker.checkOCSP(Unknown Source)
at com.sun.deploy.security.RevocationChecker.check(Unknown Source)
at com.sun.deploy.security.TrustDecider.checkRevocationStatus(Unknown Source)
at com.sun.deploy.security.TrustDecider.getValidationState(Unknown Source)
at com.sun.deploy.security.TrustDecider.validateChain(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGrantedInt(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Suppressed: com.sun.deploy.security.RevocationChecker$StatusUnknownException
    at com.sun.deploy.security.RevocationChecker.checkCRLs(Unknown Source)
    ... 19 more
Caused by: java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
at sun.security.provider.certpath.OCSPResponse.verify(Unknown Source)
at sun.security.provider.certpath.OCSP.check(Unknown Source)
at sun.security.provider.certpath.OCSP.check(Unknown Source)
at sun.security.provider.certpath.OCSP.check(Unknown Source)
at com.sun.deploy.security.RevocationChecker$2.run(Unknown Source)
at com.sun.deploy.security.RevocationChecker$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.RevocationChecker.doPrivilegedOCSPCheck(Unknown Source)
... 20 more

Что мы можем сделать? Конечно, мы попросили Thawte обновить наш сертификат и собираемся попросить наших клиентов обновить приложение до измененного. Но мы не можем охватить их все. Нам нужно дать им быстрый совет, когда они нас спросят. Подходит время истечения срока действия, поэтому любые комментарии приветствуются.


person stepand76    schedule 09.10.2015    source источник
comment
Подпишите его еще раз, на этот раз с включенной отметкой времени, и предоставьте своим клиентам обновленное приложение до истечения срока действия вашей первоначальной подписи.   -  person jariq    schedule 09.10.2015
comment
@jariq Мы собираемся это сделать, но связаться со всеми клиентами невозможно. Мы не знаем, кто и где работает наше приложение. Это пакетное программное обеспечение. Мы его разрабатываем, продаем системным интеграторам, а они устанавливают у конечного пользователя...   -  person stepand76    schedule 09.10.2015


Ответы (1)


Что происходит?

Поведение WebStart сильно зависит от версии JRE, к которой он принадлежит.

Это результаты нашего теста с приложением, подписанным действительным сертификатом официального центра сертификации, но без отметки времени после истечения срока действия сертификата. Протестировано в Windows 7 с x64 JRE путем прямого выполнения javaws.exe в разных версиях и изменения системных часов для моделирования:

  • ‹= 7u21: предупреждающее сообщение (можно скрыть с помощью флажка)
  • 7u25 - 7u40: WebStart ломается по-разному, меняется поведение в каждом выпуске обновления, все равно не использовать
  • От 7u45 до 7u51: приложение заблокировано при настройке безопасности «очень высокий», предупреждающее сообщение при настройке «высокий» (можно скрыть с помощью флажка)
  • ›= 7u55: приложение заблокировано
  • ›= 8u0: приложение заблокировано

Мы заметили, что WebStart пытается использовать самую последнюю версию, установленную в настоящее время в системе, при запуске из браузера. Недостаточно изменить приложение для файлов JNLP в браузере (Firefox). Существует стратегия поиска с использованием JRE и JDK, установленных в папке Programm Files\Java. Вызов javaws.exe из командной строки или ссылки Windows действительно запускает тестируемую версию. Вы можете увидеть версию в консоли Java (успешный запуск) или в столбце командной строки диспетчера задач (делегирует jp2launcher.exe другой версии).

Временное решение

Подписание с отметкой времени и предупреждением

Oracle заявляет, что подписание с отметкой времени от официального органа по отметке времени (TSA) предотвратит истечение срока действия подписи. Это позволяет предотвратить проблему в будущих выпусках и выпускать обновления.

Обратите внимание на это предупреждение: WebStart поддерживает подписи с отметками времени даже после истечения срока действия сертификата подписи. Однако он заблокирует приложение и укажет, что «сертификат просрочен или еще не действителен» в момент истечения срока действия сертификата TSA. В наших тестах это 16 марта 2020 г. с использованием TSA http://tsa.starfieldtech.com/. Вы можете увидеть эту дату истечения срока после Timestamp: в выводе keytool -printcert -jarfile <your-signed.jar>.

Отметка времени дает вам еще несколько лет на часах этой бомбы замедленного действия. В зависимости от типа вашего приложения это может не быть проблемой, но для встроенных приложений в закрытых средах, которые должны работать в течение следующих 10 лет, это убийца. (проверено с j8u66)

Обновление от 07 января 2016 г.: окончательный ответ службы поддержки Oracle по этой проблеме: «Ошибки нет. Поведение ожидаемое и преднамеренное. Определенно никаких изменений не будет». Это означает, что нет и не будет способа подписать приложение без истечения срока действия.

person Holger    schedule 30.10.2015