如何签署自定义JCE安全提供程序

3dG*_*ber 11 java security jce digital-signature

Sun的PKCS11 JCE安全提供程序缺少我们需要的一些功能.
所以我使用原始资源编写了一个增强版本.

遗憾的是,JCE基础结构拒绝新的提供程序
"JCE无法对提供程序进行身份验证",
因为它未正确签名.

javax.crypto.JceSecurity.verifyProviderJar(...)抛出.
(它叫javax.crypto.JarVerifier.verify())

有关如何签署新提供商以使其与JCE一起使用的任何建议?

eri*_*son 9

该过程在文档"如何实现提供者"中描述.

它涉及向Sun Oracle 发送一些信息(包括您为签名密钥生成的CSR),然后传真确认文档.获取签名证书可能需要一周或更长时间,因此请提前计划.

如果提供商提供受某些(压制性)政府限制的服务,您只需签署提供商.例如,Cipher实现是受限制的"服务",MessageDigest而是不受限制的服务.我假设您收到的消息是,您正在尝试提供受限制的服务.

如果您提供任何这些服务,则无法解决此问题:您需要Sun颁发的代码签名证书.(IBM的一个也可以工作;如果我没记错的话,他们的代码签名CA是受支持的,但我对他们的发布过程一无所知.)


小智 6

另一种方法是使用 OpenJDK 设计自定义提供程序。这是由 Sun/Oracle 赞助的开源项目,并为其正式版本提供代码库。OpenJDK 不要求提供者进行签名。OpenJDK(现在默认)可在多个 Linux 发行版上使用。不幸的是,它似乎并不容易在 Windows 或 Macintosh 上使用。如果您运行的是 Windows 或 Macintosh,我建议将 Linux 安装到虚拟机中。

但是,如果您必须在 Windows 或 Mac 上进行开发,则可以将 OpenJDK 安装中的 jce.jar 文件复制到官方安装的 jce.jar(在 Java lib 目录中)上。这将有效规避 Jar 身份验证过程。不过,当您完成开发时,请务必将原始的 jce.jar 文件放回原处。