如何從基於ECC的X509Certificate2
的公鑰/私鑰中獲取與ECDsaCng
和ECDiffieHellmanCng
一起使用的CngKey
?從Windows證書庫中導入基於ECC的證書到CngKey中
我目前使用RSA 2048位密鑰對來簽署/加密的東西。我這樣做是通過從X509Store
中抽取證書並使用標記爲不可導出的私鑰來安全存儲的。我想將當前的實現轉換爲使用ECDSA和ECDH,以便我可以使用較小的密鑰大小來獲得同等的安全性。
使用OpenSSL的我已經成功地產生ECC證書:
openssl ecparam -out private.pem -name prime256v1 -genkey
openssl req -new -key private.pem -x509 -nodes -days 365 -out public.cer
openssl pkcs12 -export -in public.cer -inkey private.pem -out export.pfx
我已經成功地安裝了上述生成的證書到證書存儲。我可以通過指紋檢索它們,但私鑰和公鑰的加密提供程序會拋出「算法不受支持」的例外。相反,我知道我應該使用ECDsaCng
和ECDiffieHellmanCng
進行簽名/加密。但這些交易在CngKey
的。
Bouncy Castle不是一個選項,因爲它需要私鑰是可導出的。
CLR Security將通過GetCngPrivateKey
返回一個CngKey
對,但它不能與ECDsa一起使用,因爲CLRSecurity返回的密鑰是ECDH密鑰。此外,CLR安全並沒有給我一種方法來獲取X509Certificate2
的公鑰以進行簽名驗證(我甚至沒有或者不需要簽名者的私鑰)。
任何想法?我在我的智慧結束...任何幫助將很多讚賞。
但是,如果密鑰不是基於RSA/DSA,那麼'certificate.PublicKey'會引發問題嗎? – EricLaw