如何從密鑰庫中讀取公鑰和私鑰。 我的應用程序正在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. 將.pem公鑰和私鑰導入JKS密鑰庫
- 3. 從密鑰庫獲得私鑰
- 4. 將公鑰和私鑰存儲在數據庫或密鑰庫中
- 5. 從私鑰文件導入私鑰到密鑰庫
- 6. 從jck密鑰庫中導出密鑰
- 7. 密鑰庫密鑰和私有密鑰...講解深入淺出,請
- 8. PyCrypto:解密只用文件中的公鑰(無私鑰+公鑰)
- 9. 帶私鑰/公鑰的EPub加密
- 10. 使用RSA公鑰加密DSA私鑰
- 11. 密鑰保管庫密鑰與祕密
- 12. 如何從密鑰中的公鑰獲取密碼
- 13. 從EVP_PKEY密鑰對提取公鑰?
- 14. 連接到MQ使用安全密鑰(公鑰和私鑰)
- 15. 驗證私鑰和公鑰RSA密鑰匹配
- 16. 用RSA公鑰和私鑰加密和解密一個SecretKey
- 17. iphone - 如何用公鑰加密NSData並用私鑰解密?
- 18. 私鑰/公鑰
- 19. 從文件中讀取密鑰倉庫
- 20. SWCrypt公鑰VS PKCS8PEM密鑰
- 21. 導入公私密鑰對
- 22. 使用M2Crypto動態地從私鑰提取公鑰密碼
- 23. c#RSA從私鑰中提取公鑰
- 24. 從私鑰中提取公鑰C#
- 25. 創建從證書,中級證書和私有密鑰庫密鑰
- 26. 使用Python生成私鑰/公鑰SSH密鑰
- 27. 讀取和寫入Java密鑰庫
- 28. Java:從編碼密鑰獲取密鑰
- 29. Google recaptcha公鑰和私鑰
- 30. 如何查找AWS密鑰對公鑰?
是的我知道,在網絡領域我的密鑰庫已配置 從我在IBM web球體上運行的後端應用程序中,我想從密鑰存儲區中讀取公鑰和私鑰。 我想知道是否有我可以訪問密鑰存儲的任何API – user3797766
是的,它被稱爲錯誤'KeyStore'。令人驚訝的足夠。我建議你編輯你的問題,以反映你真正想問的問題。 – EJP