ECDSA 算法在 Java 中不可用 jlink

ECDSA Algorithms not available in Java with jlink

我正在编写一个 Java14 应用程序,它应该使用 SHA256withECDSASHA384withECDSASHA512withECDSA,但我遇到了 jlink 的特殊副作用:

我知道 OpenJDK 错误跟踪器中的 this Ticket,但我不明白为什么在优化的 jlink 版本中有不同的行为。

在jlink生成的runtime文件夹中,还有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 不起作用。

谁能explain/point我应该找什么?

编辑: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

这是现在 JDK 的 official bug

There is currently no support for signed JARs on the application module path that are signed with EC certs. The reason is that module path is scan early during VM startup, long before code outside of java.base can execute. JDK-8215932 tracks the same issue.