【问题标题】:Bespoke JCE Provider on IBM AIXIBM AIX 上的定制 JCE 提供程序
【发布时间】:2013-06-09 22:53:35
【问题描述】:

我正在为客户编写一个新的 JCE 提供程序,因为我需要公开一些自定义密码。在扩展CipherSpiProviderSpi 之后,我已经准备好构建了。所以我问客户他们的目标是哪个版本的 Java。他们的回应是:

# java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap3260sr9fp2-20110627_03(SR9 FP2)) IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc-32 jvmap3260sr9-20110624_85526 (JIT enabled, AOT enabled) J9VM - 20110624_085526 JIT  - r9_20101028_17488ifx17
GC   - 20101027_AA)
JCL  - 20110530_01
#

该死的。所以他们在 AIX 机器上使用 IBM Java 1.6.0。

我已经编写了大部分定制的 JCE Provider 来支持所需的功能(使用 How to Implement a Provider 指南),从 com.sun.* 包扩展 ProviderSpiCipherSpi 抽象类。我是否需要获取 IBM Java JDK 并从 com.ibm.* 扩展抽象类?或者我是否可以使用我的 Sun 根 Java 代码签名证书对我的 JCE 提供程序 JAR 进行签名,然后将其直接放入 AIX 系统上的正确位置? (其中一个是愚蠢的,但我不知道哪个)。

我只是不太了解 JCE/JVM 风格,不知道我现在是否需要基于 IBM 的 Java 代码签名证书(如果甚至存在的话),还是基于 Sun 的签名是否足够?

【问题讨论】:

  • 我猜你使用的不是 com.sun.* 包,而是 java.security 和 javax.crypto

标签: java cryptography aix jce


【解决方案1】:

Oracle (Sun) 和 IBM JRE 都使用彼此的证书来验证提供者签名。因此,如果您使用 Sun 的证书签署了提供商 它将在 IBM JRE 上运行。所以是的 - 存在基于 IBM 的 Java 代码签名证书(存在 CA,即使您在 IBM 内部也几乎不可能获得证书),但是 基于 Sun 的签名就足够了。您的加密提供程序将在 IBM JRE 上工作。您不需要使用任何 com.ibm 包。此外,可以绕过提供者签名要求:Java HotSpot Cryptographic Provider signature verification issue

详细说明

1。证书

提供者证书验证由内部 Java 1.6 JCE 类完成。

  • 在甲骨文javax.crypto.SunJCE_b#a(X509Certificate c)
  • 在 IBM javax.crypto.b#a(X509Certificate c)

用于验证签名的 CA 证书存储在类文件中。在 Oracle JVM 中作为纯字符串。 IBM 在这方面做得更聪明——证书字符串是模糊的。为了让它们变得清晰,你应该使用这段代码:

final char[] key = {0x5f, 38, 3, 111, 110};

char[] decode(final char[] input) {
    final char[] output = new char[input.length];
    for (int i = 0; i < output.length; i++) {
        output[i] = (char)(input[i] ^ key[i % 5]);
    }
    return output;
}

所以在 IBM Java 1.6 中你可以找到 CA 代码签名证书:

  • CN = JCE Code Signing CA, OU = Java Software Code Signing, O = Sun Microsystems Inc, L = Palo Alto, S = CA, C = US
  • CN = JCE Code Signing CA, OU = IBM Code Signing, O = IBM Corporation, C = US
  • CN = JCE Code Signing - Framework, OU = IBM Code Signing, O = IBM Corporation, C = US

2。基本提供程序类

您应该扩展 java.security.Provider 类。例如,与 IBM JRE 捆绑在一起的 com.ibm.crypto.provider.IBMJCE 就是这样做的。 (AFAIK 没有 ProviderSpi 类。)您也应该使用 javax.crypto.CipherSpi 类。例如,来自 IBM 提供商的 com.ibm.crypto.provider.DESCipher 就是这样做的。

【讨论】:

  • 不知道为什么你对此投了反对票,这看起来是一个有用的答案。当我的同事belial 不在办公室时,我们已经对IBM Java 进行了一些进一步的测试,并且可以确认Sun JCE 提供程序在IBM Java 上运行良好。很高兴了解根本原因。
  • 也许有人不明白我的回答。因此,既然您确认了,您就可以将我的答案标记为正确;)
  • 只有belial可以做到。而且我会很吝啬并坚持赏金,以防第二天左右会有一个惊人的四页答案:-)
  • OK :) 我会尽快详细说明我的答案。
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多