ECDSA算法在使用jlink的Java中不可用

ECDSA算法在使用jlink的Java中不可用,java,security,signature,java-14,Java,Security,Signature,Java 14,我正在编写一个Java 14应用程序,该应用程序应该使用诸如SHA256 with ECDSA、SHA384 with ECDSA和SHA512 with ECDSA之类的算法来验证一些签名,但我遇到了一个特殊的副作用: 使用标准JDK/JRE 14运行时运行应用程序时,将显示算法(SunEC已成功加载) 当使用JRE运行时的优化版本运行应用程序时,使用jlink和(包括jdk.crypto.ec模块),根本不会加载SunEC,算法也不可用 我知道OpenJDK bug跟踪器中存在一些错误,

我正在编写一个Java 14应用程序,该应用程序应该使用诸如
SHA256 with ECDSA
SHA384 with ECDSA
SHA512 with ECDSA
之类的算法来验证一些签名,但我遇到了一个特殊的副作用:

  • 使用标准JDK/JRE 14运行时运行应用程序时,将显示算法(SunEC已成功加载)
  • 当使用JRE运行时的优化版本运行应用程序时,使用jlink(包括
    jdk.crypto.ec
    模块),根本不会加载SunEC,算法也不可用
我知道OpenJDK bug跟踪器中存在一些错误,但我无法理解为什么在优化的jlink版本中会出现不同的行为

在jlink生成的运行时文件夹中,还有
libsunec.so

我用这个打印出可用的算法,并获得以下输出:

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
这是JDK现在的一个应用程序

当前不支持应用程序模块路径上使用EC证书签名的已签名JAR。原因是模块路径在VM启动的早期就被扫描了,远远早于java.base之外的代码可以执行。JDK-8215932跟踪相同的问题

这是JDK现在的一个应用程序

当前不支持应用程序模块路径上使用EC证书签名的已签名JAR。原因是模块路径在VM启动的早期就被扫描了,远远早于java.base之外的代码可以执行。JDK-8215932跟踪相同的问题