ECDSA算法在带有jlink的Java中不可用

问题描述 投票:1回答:1

我正在编写Java 14应用程序,该应用程序应使用SHA256withECDSASHA384withECDSASHA512withECDSA之类的算法来验证某些签名,但是我遇到了jlink的特定副作用:

  • [使用标准JDK / JRE 14运行时运行应用程序时,将显示算法(已成功加载SunEC)
  • 使用优化的JRE运行时版本运行应用程序时,使用包含jlink模块的jlink AND,根本不会加载SunEC,并且算法不可用

我知道OpenJDK错误跟踪程序中的jdk.crypto.ec,但我不明白为什么优化的jlink版本中会有不同的行为。

在jlink生成的运行时文件夹中,还有this Ticket

我正在用此libsunec.so打印出可用的算法,并获得以下输出:

SO snippet

出于相同及相关原因,无法验证带有策略文件的签名Jars。

任何人都可以解释/指出我该找什么吗?

EDIT:jlink运行时是使用以下参数构建的:

MD2withRSA
MD5andSHA1withRSA
MD5withRSA
NONEwithDSA
NONEwithDSAinP1363Format
RSASSA-PSS
SHA1withDSA
SHA1withDSAinP1363Format
SHA1withRSA
SHA224withDSA
SHA224withDSAinP1363Format
SHA224withRSA
SHA256withDSA
SHA256withDSAinP1363Format
SHA256withRSA
SHA384withRSA
SHA512/224withRSA
SHA512/256withRSA
SHA512withRSA
java security signature policy java-14
1个回答
0
投票
现在是JDK的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

当前不支持使用EC证书签名的应用程序模块路径上的签名JAR。原因是模块路径是在VM启动期间提早扫描的,远未执行java.base之外的代码。 JDK-8215932跟踪相同的问题。
© www.soinside.com 2019 - 2024. All rights reserved.