jarsigner问题与jre / lib / ext删除

时间:2017-11-21 12:25:01

标签: java java-9 jarsigner

根据这篇文章:https://blogs.oracle.com/java-platform-group/planning-safe-removal-of-under-used-endorsed-extension-directories

在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> 

我该如何解决?

2 个答案:

答案 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)

我终于根据https://docs.oracle.com/javase/9/security/howtoimplaprovider.htm#JSSEC-GUID-7C304A79-6D0B-438B-A02E-51648C909876

成功解决了这个问题

需要执行以下操作(仅指定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>