Скомпрометированные сертификаты и среды выполнения OpenJDK Java
Как широко сообщалось, закрытые ключи восьми промежуточных сертификатов удостоверяющего центра (CA) eMudhra были скомпрометированы.
Как проверить, подвержена ли риску ваша среда выполнения
Запустите программу CheckCerts.java. Она работает на JDK 8 и более поздних версиях.
Автономные среды выполнения OpenJDK Java
Если вы используете автономную среду выполнения OpenJDK Java, загруженную у поставщика, немедленно выполните одно из следующих действий — даже если вы обновляли среду выполнения в последние несколько дней.
- Предпочтительный вариант: обновите среду выполнения OpenJDK Java
Как только станет доступна обновлённая среда выполнения, загрузите и установите её у предпочитаемого поставщика. В примечаниях к выпуску среды выполнения должно быть указано, что в ней исправлена задача JDK-8395690, CVE 2026-114820.
Если ваш поставщик ещё не опубликовал обновлённую среду выполнения, рассмотрите одно из остальных действий.
- В противном случае: удалите соответствующие корневые сертификаты
Сделайте резервную копию хранилища ключей вашей среды выполнения. Для JDK 11 и более поздних версий хранилище ключей находится в файле
$JDK_HOME/lib/security/cacertsДля JDK 8 хранилище ключей находится в файле
$JDK_HOME/jre/lib/security/cacertsУдалите соответствующие корневые сертификаты из хранилища ключей вашей среды выполнения. Для JDK 11 и более поздних версий:
$ keytool -delete -cacerts -alias "emsignrootcag1 [jdk]" $ keytool -delete -cacerts -alias "emsignrootcag2 [jdk]" $ keytool -delete -cacerts -alias "emsigneccrootcag3 [jdk]" $ keytool -delete -cacerts -alias "comodoaaaca [jdk]"Для JDK 8:
$ keytool -delete -keystore $JDK_HOME/jre/lib/security/cacerts -alias "emsignrootcag1 [jdk]" $ keytool -delete -keystore $JDK_HOME/jre/lib/security/cacerts -alias "emsignrootcag2 [jdk]" $ keytool -delete -keystore $JDK_HOME/jre/lib/security/cacerts -alias "emsigneccrootcag3 [jdk]" $ keytool -delete -keystore $JDK_HOME/jre/lib/security/cacerts -alias "comodoaaaca [jdk]"Игнорируйте все сообщения об ошибках о том, что сертификат не существует.
Перезапустите все работающие экземпляры среды выполнения.
Если у вас установлено несколько автономных сред выполнения OpenJDK Java, повторите эти шаги для каждой установки.
- Или же: проверяйте отозванные сертификаты
Для приложения, использующего TLS, если вы ещё не включили проверку отзыва сертификатов, добавьте
-Dcom.sun.net.ssl.checkRevocation=true -Dcom.sun.security.enableCRLDP=trueв командную строку
javaприложения.Для подписанных JAR-файлов в JDK 17 и более поздних версиях используйте
$ jarsigner -verify -revcheck -strict $SIGNED_JARчтобы проверить каждый подписанный JAR и проверить отзыв сертификатов.
Среды выполнения OpenJDK Java, предоставляемые операционной системой
Если вы используете среду выполнения OpenJDK Java, предоставляемую пакетом операционной системы, она, скорее всего, использует сертификаты операционной системы.
Это относится к пакетам OpenJDK в Arch Linux, Fedora, Gentoo, Oracle Linux и Red Hat Enterprise Linux. Для этих систем, вероятно, достаточно обновить сертификаты операционной системы.
Пакеты сред выполнения OpenJDK Java в Debian Linux и производных дистрибутивах (например, Devuan и Ubuntu) требуют обходного решения вручную. Предполагается, что эти среды выполнения используют сертификаты операционной системы из пакета
ca-certificatesчерез связанный с ним пакетca-certificates-java. Однако из-за давней ошибки в последнем из них обновления этих двух пакетов недостаточно. Обходное решение — удалить и заново создать хранилище ключей Java операционной системы. Для этого нужны права суперпользователя:# rm -f /etc/ssl/certs/java/cacerts # update-ca-certificates --freshПакеты сред выполнения OpenJDK Java во FreeBSD и Homebrew не используют сертификаты операционной системы. Обновите эти пакеты напрямую, как только обновления станут доступны.