2015-02-06 75 views
0

希望在HSM(硬件安全模塊)中生成私鑰/公鑰對時,在java中創建CSR文件。使用java或BouncyCastle而不使用私鑰的CSR一代

在嘗試在充氣城堡的例子中,企業社會責任的產生既需要私有密鑰和公共key.As密鑰的生成是在HSM發生的事情,我只有公鑰私鑰假對象。 我可以在沒有私鑰的情況下在java中生成CSR嗎?

請找到我正在嘗試的代碼示例。

KeyPair pair = generateKeyPair(); 
    PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(
     new X500Principal("CN=Requested Test Certificate"), pair.getPublic()); 
    JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA"); 
    ContentSigner signer = csBuilder.build(pair.getPrivate()); 
    PKCS10CertificationRequest csr = p10Builder.build(signer); 

我是HSM的新手,任何輸入或參考都會有所幫助。

+0

那麼,它失敗或什麼? – 2015-02-06 23:39:35

回答

2

您可以生成CSR,而不需要私鑰的。您確實需要對私鑰的引用,並且密鑰必須能夠簽名。引用私鑰只是實現PrivateKey的特殊版本的類。他們不包含數據,只是參考。然而,調用getEncoded或檢索RSA密鑰的私有指數(通常 - 它可能取決於密鑰生成參數和PKCS#11中間件)會失敗併產生異常。

這些鍵可使用的方法是通過只將它們提供給一個新生成Signature實例的init方法。然後Java運行時將在正確的提供程序(用於HSM的那個提供程序)中搜索正確的SignatureSpi實現。這被稱爲延遲供應商選擇,因爲它只調用init方法後搜索實施。當然在你的情況下,這一切都將在ContentSigner之外發生。

私鑰數據不應該在任何時候離開HSM,除非包裝用於HSM之間的備份或共享。

相關問題