我正在嘗試創建一個自簽名的RSA-2048-SHA-256證書PFX文件,以便在我的WCF請求中使用它進行數據簽名。使用openSSL生成自簽署的RSA-2048-SHA-256證書PFX文件
我使用了一些openSSL示例來創建證書PFX文件,但即使我將SHA算法設置爲256,當我將其加載到我的.net應用程序中時,我發現該證書的私鑰具有這些設置:
KeyExchangeAlgorithm = RSA-PKCS1-KeyEx
SignatureAlgorithm = http://www.w3.org/2000/09/xmldsig#rsa-sha1
,當我爲了使用下面的代碼來使用這個證書,我得到「無效的算法指定的異常」,但如果我改變SHA256CryptoServiceProvider到SHA1CryptoServiceProvider一切工作正常。
string msg = "This is my test message";
X509Certificate2 privateCert = new X509Certificate2("C:\\TEMP\\private.pfx", "12345");
byte[] signature = (privateCert.PrivateKey as RSACryptoServiceProvider).SignData(new UTF8Encoding().GetBytes(msg), new SHA256CryptoServiceProvider());
我只能假設我的證書文件不是用SHA256創建的,而是用某種默認的SHA1算法創建的。
這些都是我在訂單中使用的步驟來創建我的證書:
openssl req -x509 -days 365 -newkey rsa:2048 -sha256 -keyout key.pem -out cert.pem
openssl pkcs12 -export -in cert.pem -inkey key.pem -out private.pfx
我在做什麼錯?
至於爲什麼你不能用鑰匙創建新的基於SHA-256的簽名,要麼添加'-csp「Microsoft增強RSA和AES加密提供」'到PKCS12命令,或獲取私鑰從'cert.GetRSAPrivateKey()'。但這真是一個不同的問題。 – bartonjs
感謝您的評論,我在我的pkcs12命令中使用了-CSP「Microsoft Enhanced RSA and AES Cryptographic Provider」,現在它可以工作,之前,但由於某種原因,pkcs12命令失敗。我也嘗試使用cert.GetRSAPrivateKey(),並且這也適用,雖然它需要.NET Framework 4.6。 – Alex