解决WAS / Java的技术指南 - 私钥问题

时间:2018-01-19 13:47:13

标签: java websphere keystore websphere-8 private-key

目标:

从我们的Java应用程序中的WAS密钥库(在WAS控制台中导入的自定义私钥)中检索私钥以对数据进行签名。签名数据将使用公钥解密,该公钥已与其他应用程序共享。

我们如何处理当前(无法正常工作,无法生成或将Key转换为PrivateKey)

我们在KeyHelper API的帮助下检索了Websphere KeyPair对象,并从KeyPair获取了java.security.Key对象。

我们用于开发引用知识中心的代码的链接 https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/rsec_sslretgenkeysetgrp.html

代码段:

String keySetGroupName = "CMODSSOKeySet";
com.ibm.websphere.crypto.KeySetHelper ksh =     com.ibm.websphere.crypto.KeySetHelper.getInstance();
Map generationKeys = ksh.getAllKeysForKeySet(keySetGroupName);

Iterator iKeySet = generationKeys.keySet().iterator();

String keyAlias = (String)iKeySet.next();
Object keyObject = generationKeys.get(keyAlias);

现在,我们将keyObject作为com.ibm.websphere.crypto.KeyPair的实例,当我们从keyObject检索私钥时,如下所述,我们得到java.security.Key对象但不是PrivateKey宾语。

java.security.Key privateKeyAsSecret = ((com.ibm.websphere.crypto.KeyPair)key).getPrivateKey();

我们需要将privateKeyAsSecret转换为PrivateKey,我们尝试了不同的方法。

选项1:

PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyContent.getEncoded()));
 PrivateKey privKey = kf.generatePrivate(keySpecPKCS8);

选项2:

X509EncodedKeySpec keySpecPKCS8 = new X509EncodedKeySpec(Base64.decodeBase64(privateKeyAsSecret.getEncoded()));
PrivateKey tempPrivateKey = kf.generatePrivate(keySpecPKCS8);

选项3:

PrivateKey tempPrivateKey = (PrivateKey) ((com.ibm.websphere.crypto.KeyPair) key).getPrivateKey();

选项4:

String privateKeyContent = new String(privateKeyAsSecret.getEncoded());
privateKeyContent = privateKeyContent.replaceAll("\\n", "").replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");
PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(DatatypeConverter.parseBase64Binary(privateKeyContent));
PrivateKey privKey = kf.generatePrivate(keySpecPKCS8);

我们无法通过上述所有选项生成或转换Key to PrivateKey。

0 个答案:

没有答案