2013-12-12 54 views
3

我使用SCEP爲我的web服務創建證書。成功創建證書並啓動服務器後,我嘗試通過瀏覽器訪問wsdl,該瀏覽器顯示錯誤消息,指出此應用程序不允許使用證書類型,錯誤代碼爲:sec_error_inadequate_cer_type。一位同事指出,我必須將擴展密鑰屬性中的密鑰用法更改爲「服務器認證」,並且應該在認證請求中完成。SCEP和擴展證書屬性

要創建一個新的請求,我正在使用bouncycastle。請參見下面的代碼片段:

PKCS10CertificationRequestBuilder builder = new PKCS10CertificationRequestBuilder(subject, pkInfo); 
    builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_challengePassword, new DERPrintableString(challengePassword)); 

    return builder.build(signer); 

的問題是,現在我發現瞭如何像這樣添加一些請求的文檔。我想通了,唯一的一點是,最有可能我必須添加其他屬性的建設者與對象標識符「PKCSObjectIdentifiers.pkcs_9_at_extendedCertificateAttributes」:

builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extendedCertificateAttributes, ???); 

但是什麼應該被傳遞給製造商的的addAttribute法等等請求的證書將擴展證書屬性設置爲「服務器身份驗證」?

我做了一些研究,但我沒有找到任何文檔或例子給我提供了一些有用的答案。

一些信息: 我使用JSCEP和BouncyCastle的1.48

我希望有人能指出我的解決方案。 在此先感謝。

回答

0

擴展證書屬性已棄用,但存在另一個名爲Extension request的PKCS#9屬性,其中可能包含調用方想要包含在證書中的一些擴展名。

的extensionRequest屬性類型可以被用來攜帶關於證書擴展請求者希望被包括在 證書信息 。

當然,認證中心必須支持此屬性,並且可以根據其認證策略來忽略它。

包含這個屬性,在企業社會責任,你可以使用此代碼(未測試):

KeyUsage ku = new KeyUsage(KeyUsage.digitalSignature); 
Extension kuExt = new Extension(Extension.keyUsage, true, ku.getEncoded()); 
ExtendedKeyUsage eku = new ExtendedKeyUsage(KeyPurposeId.id_kp_serverAuth); 
Extension ekuExt = new Extension(Extension.extendedKeyUsage, true, eku.getEncoded()); 
Extensions exts = new Extensions(new Extension[] {kuExt, ekuExt}); 
builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest, exts); 
+0

非常感謝你。這件事情讓我感到很快樂。順便說一句。對不起,因爲我是在度假,所以今天是第一天我可以測試它。 – vik