在Java 9中删除了jre / lib / ext。
我的问题是我使用的Jarsigner在以前的Java版本中找到了jre / lib / ext文件夹中的提供者jar。
jarsigner -tsa timestamp.digicert.com -verbose -keystore NONE -storetype PKCS11
-storepass null -providername <MY_PROVIDER_NAME> <JAR_FILE> <CERTIFICATE_NAME>
我该如何解决?
答案 0 :(得分:1)
changes to the installed JDK/JRE image带来运行时图像,其中包含目录 -
conf - 包含.properties,.policy和其他类型的文件 旨在由开发人员,部署人员和最终用户进行编辑。这些 文件以前在lib目录或其子目录中找到。
JDK9中的java.security
文件(位于.../Home/conf/security
下)列出了默认提供商列表中的SunPKCS11提供商
security.provider.13=SunPKCS11
参考指南下的 #SunPKCS11 Configuration 详细说明了如何添加JDK的jdk.crypto.cryptoki
模块中提供的提供程序。
因此,理想情况下,不需要在Java9中配置sunpkcs11
提供程序的路径。
从JEP 220: Modular Run-Time Images
添加和提供如何将提供程序捆绑到模块中的示例安全策略文件和CodeSource API的其他用途可以使用jrt 用于为授予权限命名特定模块的URL。 例如,现在可以识别椭圆曲线加密提供器 通过jrt网址
jrt:/jdk.crypto.ec
目前全部授予的其他模块 权限,但实际上并不需要它们可以琐碎 取消特权,即准确地给出他们所需的权限。
答案 1 :(得分:1)
需要执行以下操作(仅指定Java9的新增功能):
按照步骤4并添加模块声明:
module com.foo.MyProvider {
provides java.security.Provider with p.MyProvider;
requires java.security.jgss;
}
使用module-path运行Jarsigner运行时:
jarsigner -J--module-path -J<PATH_TO_PROVIDER_JAR> -J--add-modules -J<MODULE_NAME>
-tsa timestamp.digicert.com -verbose -keystore NONE -storetype PKCS11 -storepass null -providername <MY_PROVIDER_NAME> <JAR_FILE> <CERTIFICATE_NAME>