針對證書私鑰采用SHA256算法對數據進行簽名時,報“指定的算法無效”這一異常,
實際原因是RSACryptoServiceProvider依賴底層CryptoAPI來完成其工作,只有CrytoAPI支持SHA256算法的Windows版本才會啟用此功能,這意味着它取決於我們用來執行加密操作的CSP(加密服務提供程序)。因為Microsoft CSP是在Rsaenh.dll上實現的,所以當我們使用SHA256對數據做簽名時,函數CryptCreateHash將在后台被CALG_SHA_256的ALG_ID調用。此加密API本身不執行加密操作。它將從應用程序獲得的參數重定向到所需的CSP,並且CSP代表它執行操作。所以我們得到的錯誤實際上來自於CSP。
因此,為了檢查我們是否可以使用SHA256,我們必須確保:
- 您的證書必須在支持SHA256的情況下生成。
- 用於生成證書的CSP必須支持SHA256。
第1種情況,生成證書時我們會指定SHA256簽名算法,所以只要生成了證書就不會有問題。
第2種情況,生成證書指定的CSP要支持SHA256,而windows上默認導出生成的pfx文件,卻沒有顯式指定CSP。
我用openssl命令生成pfx時,指定了-CSP "Microsoft Enhanced RSA and AES Cryptographic Provider"