2011-06-11 52 views
0

我使用PFXImportCertStore導入了第三方CA頒發的PFX證書。在成功導入,該PCERT_KEY_PROV_INFO_PROP_ID默認由同一個呼叫設置爲以下值,PFXImportCertStorePFXImportCertStore問題 - cryptoapi

enter image description here

  1. 爲什麼dwKeySpec認定爲AT_KEYEXCHANGE鍵類型,而不是AT_SIGNATURE

  2. 爲什麼pwszProvName設置爲Microsoft Base Cryptographic Provider v1.0?

  3. 首先證書僅用於數字簽名。但密鑰使用字段表示證書可用於數字簽名,不可否認,密鑰加密,數據加密(f0)。增強的密鑰使用表示客戶端身份驗證和安全電子郵CA是否正確地簽發了證書?證書的正面顯示下面的消息(下面的屏幕截圖),這使我懷疑該證書沒有發佈用於數字歌唱?我的思維是否正確?

enter image description here

這些問題4.由於,我無法使用CryptSignMessage籤數據。內部調用無法獲取用於簽名的私鑰的上下文。關於如何解決此問題的任何建議? 我可以使用我生成的自簽名PFX證書進行簽名。你認爲我可以將私鑰導出到新容器中,並將其屬性設置爲AT_SIGNATURE,將csp提供程序類型設置爲PROV_RSA_AES,因爲我需要SHA256。

我正在使用XP sp3。

感謝

回答

2

答1:因爲,它的用法也儘管我的應用程序的主要目的是進行數字簽名數據加密會話密鑰等即關鍵是自動歸類爲AT_KEYEXCHANGE,CA已定義的密鑰使用政策包括加密,這迫使CryptoAPI將密鑰類型映射到AT_KEYEXCHANGE

回答2:我ASSUME它是這臺機器的默認csp,所以......?任何更好的解釋,請

答案3:來自Crypto Google小組的許多人的回覆,AT_KEYEXCHANGE密鑰也可用於簽署數據,前提是您的證書的密鑰用法允許您執行數字簽名。對於第三方CA來說,頒發可用於多種目的的證書似乎是常見做法。所以第三方CA已經正確發佈了證書。

答案4:我設法使用CryptSignMessage簽署了具有相同第三方頒發證書的數據。我將PCERT_KEY_PROV_INFO_PROP_ID中的dwProvType更改爲PROV_RSA_AES,並將NULL傳遞給pwsProvName。首先使用CertGetCertificateContextProperty來獲取屬性,然後使用CertSetCertificateContextProperty來設置您選擇的屬性,從而執行此更改。這解決了簽名問題。現在我可以用SHA256/RSA1024,AT_EXCHANGE鍵簽字。