我正在编写一个Java 14应用程序,它应该使用和等算法验证一些签名SHA256withECDSA
,但我遇到了一个特殊的副作用:SHA384withECDSA
SHA512withECDSA
jlink
- 当使用标准 JDK/JRE 14 运行时运行应用程序时,算法会出现(SunEC 已成功加载)
- 当使用 JRE 运行时的优化版本运行应用程序时,使用jlink并包含
jdk.crypto.ec
模块,根本不加载 SunEC 并且算法不可用
我知道 OpenJDK 错误跟踪器中的这张票,但我不明白为什么优化的 jlink 版本中有不同的行为。
在 jlink 生成的运行时文件夹中,还有libsunec.so
.
我正在使用此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