如何从密钥库中读取公钥和私钥。 我的应用程序正在IBM web球体上运行,我想从密钥存储区读取公钥和私钥。我想知道是否有任何我可以访问密钥存储的API如何从密钥库中读取私钥和公钥密钥库
回答
你不能。私钥不在证书中。它在KeyStore中。这是您在证书存在之前做出的第一件事。
您可以在IBM JRE中使用Ikeyman或ikeycmd将* .kdb文件转换为PKCS12文件。然后,您可以平凡提取私钥和相关证书:
# Client Certificate
openssl pkcs12 -nokeys -in $MYP12 -clcerts -nokeys -out clientcert.pem $PKCSARGS
#Private Key
openssl pkcs12 -in $MYP12 -nocerts -out client_privkey.pem -nodes $PKCSARGS
#Public Key
openssl x509 -in clientcert.pem -pubkey -noout > client_pubkey.pem
但是,如果你的最终目标是使用WebSphere中的证书和密钥,你最好只是IKEYCMD或IKEYMAN将其转换成一个更原生的Java格式。
最后,如果你真的想要一个API来编写自己的证书/密钥库管理工具只是做现有的图形用户界面和工具已经为你做:
使用java.security.KeyStore中,并与朋友们“IBMCMSKS”类型。如果 你不使用WAS/IHS JRE,添加此提供商: com.ibm.security.cmskeystore.CMSProvider
感谢您的帮助。 – user3797766
在应用程序启动时,我们正在考虑从Websphere SSL证书读取私钥和公钥,基本上来自SSL内部的密钥存储库。为此,我们需要如上所述使用CMSProvider? – user3797766
如果它是* .kdb,是的。 – covener
如果你不担心Z上RACF密钥库,也有简单https://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html
import java.security.KeyStore;
import java.io.FileInputStream;
....
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = null;
try {
fis = new FileInputStream("keyStoreName");
ks.load(fis, ksPassword.toCharArray());
} finally {
if (fis != null) {
fis.close();
}
}
Key myKey = ks.getKey(alias,password.toCharArray());
如果你想从一个集中的密钥库读取键,你会不会需要密钥库的密码,但你可能需要弄清楚的经营范围:在java.security.KeyStore中的javadoc说明的密钥库。例如:
(小区):了myCell:(节点):MYNODE
这些替代了myCell和MYNODE。有时你可以在不使用管理范围的情况下离开,有时你不能。尝试使用null为管理范围调用getJavaKeyStore以查看它是否适用于您。如果不是,那么你必须定义管理范围。
import com.ibm.ws.ssl.config.KeyStoreManager;
import java.security.KeyStore;
import java.security.Key;
...
String mgmtScopeString="(cell):"+myCell+":(node):"+myNode;
KeyStore keystore =
KeyStoreManager.getInstance().getJavaKeyStore("NodeDefaultKeyStore",
mgmtScopeString);
Key myKey = keystore.getKey(alias,password.toCharArray());
此代码适用于我读取*.kdb
文件的内容。当然,您需要使用密码.kdb
。第一个参数是文件名,第二个参数是关键字。
import java.io.FileInputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.Security;
import java.security.cert.Certificate;
import java.text.SimpleDateFormat;
import java.util.Enumeration;
public class KdbReaderTest {
public static void main(String[] args) {
String certFile=args[0];
String password=args[1];
KeyStore ks;
Security.addProvider(new com.ibm.security.cmskeystore.CMSProvider());
try {
ks=KeyStore.getInstance("IBMCMSKS");
System.out.println("got instance");
ks.load(new FileInputStream(certFile), password.toCharArray());
Enumeration<String> alias=ks.aliases();
while (alias.hasMoreElements()) {
Certificate cert=null;
String aliasName=alias.nextElement();
System.out.printf("%-20s ", aliasName);
if (ks.isKeyEntry(aliasName)) {
Key key=ks.getKey(aliasName, password.toCharArray());
// do whatever you want with the key here
}
if (ks.isKeyEntry(aliasName)
|| ks.isCertificateEntry(aliasName)) {
cert=ks.getCertificate(aliasName);
java.security.cert.X509Certificate x509=(java.security.cert.X509Certificate)cert;
SimpleDateFormat iso = new SimpleDateFormat("yyyy-MM-dd");
System.out.print(iso.format(x509.getNotBefore())+ " - "+iso.format(x509.getNotAfter()));
if (!x509.getSubjectDN().getName().equals(aliasName))
System.out.println(" "+x509.getSubjectDN().getName());
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("done");
}
}
只有两个项目是不同的,从从.jks文件中读取是
Security.addProvider(new com.ibm.security.cmskeystore.CMSProvider());
KeyStore.getInstance("IBMCMSKS");
(您也可以在$JAVA_HOME/lib/security/java.security
进入,而不是调用addProvider的CMSProvider)
对于这个工作,你的类路径中需要ibmpkcs.jar
和ibmcmsprovider.jar
。
- 1. 从私钥和公钥创建密钥库
- 2. 公钥和私钥API密钥
- 3. 将.pem公钥和私钥导入JKS密钥库
- 4. 从密钥库获得私钥
- 5. 提取从OpenSSL的密钥文件的公钥和私钥
- 6. 公钥加密的密钥库
- 7. 私钥加密公钥加密
- 8. 将公钥和私钥存储在数据库或密钥库中
- 9. 将公钥私钥对导入密钥库
- 10. 从私钥文件导入私钥到密钥库
- 11. 如何将私钥和公钥(pvk,spc)和证书(cer)导入密钥库?
- 12. 从jck密钥库中导出密钥
- 13. 使用RSA私钥创建密钥库
- 14. Java密钥库私钥导入
- 15. 密钥库密钥和私有密钥...讲解深入浅出,请
- 16. 公钥/私钥中的RSA密钥值和模数
- 17. PyCrypto:解密只用文件中的公钥(无私钥+公钥)
- 18. 带私钥/公钥的EPub加密
- 19. 使用RSA公钥加密DSA私钥
- 20. 密钥保管库密钥与秘密
- 21. 如何从Windows密钥库中解密RSA密钥?
- 22. 如何从密钥中的公钥获取密码
- 23. 验证私钥和公钥RSA密钥匹配
- 24. 连接到MQ使用安全密钥(公钥和私钥)
- 25. 从EVP_PKEY密钥对提取公钥?
- 26. 如何从cacert.pem获取公钥/私钥
- 27. 用RSA公钥和私钥加密和解密一个SecretKey
- 28. 如何在忘记密钥库后恢复密钥库密码
- 29. iphone - 如何用公钥加密NSData并用私钥解密?
- 30. 私钥/公钥
是的我知道,在网络领域我的密钥库已配置 从我在IBM web球体上运行的后端应用程序中,我想从密钥存储区中读取公钥和私钥。 我想知道是否有我可以访问密钥存储的任何API – user3797766
是的,它被称为错误'KeyStore'。令人惊讶的足够。我建议你编辑你的问题,以反映你真正想问的问题。 – EJP