12

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

不幸的是,JCE 基础设施拒绝了新的提供者
“JCE 无法验证提供者”
,因为它没有正确签名。

javax.crypto.JceSecurity.verifyProviderJar(...)抛出。
(它调用javax.crypto.JarVerifier.verify()

有什么建议如何签署新的提供商以使其与 JCE 合作?

4

5 回答 5

9

该过程在文档“如何实现提供程序”中进行了描述。

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

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

如果您提供这些服务中的任何一项,就没有办法了:您需要一个由 Sun 颁发的代码签名证书。(IBM 的一个也可以工作;如果我没记错的话,他们的代码签名 CA 是受支持的,但我对他们的发行过程一无所知。)

于 2009-11-18T16:19:42.063 回答
4

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

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

于 2011-03-31T15:14:20.933 回答
2

仅用于额外信息,当我使用选项“将所需的库提取到生成的 JAR”而不是正确的“将所需的库打包到生成的 JAR”中构建 JAR(Eclipse Juno)时,我得到了同样的异常

于 2013-12-03T20:28:52.740 回答
1

您必须使用“JCE Code Signing CA”对 JAR 进行签名。在所有当前的 Java 发行版中,只有 2 个 CA(Sun 和 IBM)是内置的(硬编码),无法添加您自己的。我们试图与 Sun 合作签署我们的提供商,这几乎是不可能的。他们不会颁发中间 CA 证书,这意味着您每次进行更改时都必须经历麻烦。

你为什么不直接使用你自己的库呢?您使用标准 API 来实现不同 JCE 之间的互操作性。但这对于 CryptoKi/SmartCard 的东西现在是不现实的,你几乎总是需要编写一些自定义代码来与供应商特定的 API 进行交互。您甚至可以使您的代码模仿 JCE API 以最大限度地减少代码更改。

于 2009-11-18T17:07:13.933 回答
0

好吧,在阅读了与一些 Oracle 权限的握手之后,我的解决方案是编写一个具有自己签名验证的独立 Cipher 类,如果“我”以外的其他提供者委托给javax.crypto.Cipher.

这似乎是强制性的,因为在所有 Java 版本中几乎没有可用的算法,而且某些算法的强度限制并不令人满意,基本上,Oracle 不需要知道我的加密算法。

于 2021-04-05T22:15:48.380 回答