c# 证书+SHA256WithRSA加密注意项

针对证书私钥采用SHA256算法对数据进行签名时,报“指定的算法无效”这一异常,

实际原因是RSACryptoServiceProvider依赖底层CryptoAPI来完成其工作,只有CrytoAPI支持SHA256算法的Windows版本才会启用此功能,这意味着它取决于我们用来执行加密操作的CSP(加密服务提供程序)。因为Microsoft CSP是在Rsaenh.dll上实现的,所以当我们使用SHA256对数据做签名时,函数CryptCreateHash将在后台被CALG_SHA_256的ALG_ID调用。此加密API本身不执行加密操作。它将从应用程序获得的参数重定向到所需的CSP,并且CSP代表它执行操作。所以我们得到的错误实际上来自于CSP。

因此,为了检查我们是否可以使用SHA256,我们必须确保:

  1. 您的证书必须在支持SHA256的情况下生成。
  2. 用于生成证书的CSP必须支持SHA256。

第1种情况,生成证书时我们会指定SHA256签名算法,所以只要生成了证书就不会有问题。

第2种情况,生成证书指定的CSP要支持SHA256,而windows上默认导出生成的pfx文件,却没有显式指定CSP。

我用openssl命令生成pfx时,指定了-CSP "Microsoft Enhanced RSA and AES Cryptographic Provider"

 

posted @   元点  阅读(1130)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示