gpt4 book ai didi

java - IBM AIX 上的定制 JCE 提供程序

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:46 24 4
gpt4 key购买 nike

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

我只是对 JCE/JVM 风格了解不够,不知道我现在是否需要一个 IBM 根 Java 代码签名证书(如果存在的话),或者 Sun 根签名是否足够?

最佳答案

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 类完成。

  • 在 Oracle 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 代码签名 CA,OU = Java 软件代码签名,O = Sun Microsystems Inc,L = Palo Alto,S = CA,C = US
  • CN = JCE 代码签名 CA,OU = IBM 代码签名,O = IBM Corporation,C = US
  • CN = JCE 代码签名 - 框架,OU = IBM 代码签名,O = IBM 公司,C = US

2。基础提供者类

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

关于java - IBM AIX 上的定制 JCE 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com