Алгоритмы ECDSA недоступны в Java с jlink

Я пишу приложение Java 14, которое должно проверять некоторые подписи с помощью таких алгоритмов, как SHA256withECDSA, SHA384withECDSA и SHA512withECDSA, но я испытываю особый побочный эффект _ 4_:

  • при запуске приложения со стандартной средой выполнения JDK / JRE 14 алгоритмы отображаются (SunEC загружен успешно)
  • при запуске приложения с оптимизированной версией среды выполнения JRE с использованием jlink И, включая модуль jdk.crypto.ec, SunEC вообще не загружается и алгоритмы недоступны

Мне известно об этом билете в системе отслеживания ошибок OpenJDK, но я не могу понять, почему в оптимизированной версии jlink другое поведение.

В папке времени выполнения, созданной jlink, также есть файл libsunec.so.

Я распечатываю доступные алгоритмы с помощью этого SO snippet, и я получаю следующий результат:

MD2withRSA
MD5andSHA1withRSA
MD5withRSA
NONEwithDSA
NONEwithDSAinP1363Format
RSASSA-PSS
SHA1withDSA
SHA1withDSAinP1363Format
SHA1withRSA
SHA224withDSA
SHA224withDSAinP1363Format
SHA224withRSA
SHA256withDSA
SHA256withDSAinP1363Format
SHA256withRSA
SHA384withRSA
SHA512/224withRSA
SHA512/256withRSA
SHA512withRSA

По тем же и другим причинам проверка подписанных Jar-файлов с помощью файлов политики не работает.

Может ли кто-нибудь объяснить / указать мне, что мне искать?

РЕДАКТИРОВАТЬ: среда выполнения jlink создается со следующими аргументами:

jlink --strip-debug \
      --strip-native-commands \
      --bind-services \
      --no-header-files \
      --no-man-pages \
      --compress=2 \
      --module-path ${JAVA_HOME}/jmods \
      --add-modules java.desktop,java.smartcardio,java.management,java.sql,java.logging,java.net.http,java.xml.crypto,jdk.crypto.ec \
      --output jlink-runtime

person madduci    schedule 07.05.2020    source источник


Ответы (1)


Это официальная ошибка JDK.

В настоящее время не поддерживаются подписанные JAR-файлы на пути к модулю приложения, подписанные с помощью сертификатов EC. Причина в том, что путь к модулю сканируется на ранней стадии запуска виртуальной машины, задолго до того, как код вне java.base сможет выполняться. JDK-8215932 отслеживает ту же проблему.

person madduci    schedule 29.05.2020