首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用JMOD封装签名的Java安全提供程序

不能用JMOD封装签名的Java安全提供程序
EN

Stack Overflow用户
提问于 2020-07-23 21:00:00
回答 1查看 314关注 0票数 10

我正在阅读关于在Java加密体系结构中实现提供程序的这份文件,它指出

不能将签名提供程序打包在JMOD文件中。

该条还指出:

只能对提供密码、KeyAgreement、KeyGenerator、Mac或SecretKFactory实例的提供者进行签名。如果提供程序只提供SecureRandom、MessageDigest、签名、KeyStore等的实例,则不需要对提供程序进行签名。

我正在尝试使用JDK 11版本来开发这个提供程序,它使用.jmod文件来替换.jar文件。

我是查看标准安全策略使用的函数。,其中许多人使用密码、KeyAgreement、KeyGenerator、Mac或SecretKeyFactory,但在我使用的JDK 11中以某种方式打包成.jmod格式。

有人能进一步解释一下吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-04 18:28:37

JDK中打包的jmod文件中的提供程序没有“签名”,因为jmods不支持签名。如果使用.jmod检查jmod list文件,就不会发现任何.SF签名文件。

我正在尝试使用JDK 11版本来开发这个提供程序,它使用.jmod文件来替换.jar文件。

注意,.jmod文件不是jar文件的完全替代。jmod文件是只链接的工件。来自jmod文档

JMOD文件格式允许您聚合.class文件、元数据和资源以外的其他文件。这种格式是可传输的,但不可执行,这意味着您可以在编译时或链接时使用它,但不能在运行时使用.

换句话说,与JDK捆绑在一起的jmod文件不是直接加载以供执行,而是提供给诸如jlink之类的工具,这些工具会将它们分开并重新打包。这种重新打包将使任何签名散列无效,因此jmod文件需要支持签名的理由较少。

如果要分发自定义提供程序,则必须使用jar文件分发它们,然后对这些jar文件进行签名。加载提供程序时是否需要签名取决于JDK发行版。

请注意,JDK自己的提供程序不是从绑定的jmod文件中加载的,而是从特定于实现的存档中加载的,其有效性通过另一种机制进行验证。

只有当您希望将本机库打包到存档中,然后分发该存档时,才需要使用jmod文件。在这种情况下,您的用户将不得不重新打包,然后重新签名任何他们最终产生的基于jmod文件的工件。

如果您不需要分发本机库,我的建议是分发.jar文件,这些文件可以用jarsigner签名,然后直接用于执行。正如jmod文档中所指出的:

注意:对于大多数开发任务,包括在模块路径上部署模块或将它们发布到Maven存储库,继续将模块打包到模块化JAR文件中。jmod工具用于具有本机库或其他配置文件的模块,或者用于您打算与jlink工具链接到运行时映像的模块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63063042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档