我正在编写Java 14应用程序,该应用程序应使用SHA256withECDSA
,SHA384withECDSA
和SHA512withECDSA
之类的算法来验证某些签名,但是我遇到了jlink
的特定副作用:
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
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跟踪相同的问题。