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