针对证书私钥采用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"

 

相关文章:

  • 2022-12-23
  • 2021-12-10
  • 2021-05-04
  • 2021-07-25
  • 2021-11-16
  • 2021-08-21
  • 2021-05-17
  • 2022-12-23
猜你喜欢
  • 2021-07-20
  • 2021-09-28
  • 2021-04-03
  • 2021-12-22
  • 2021-09-20
  • 2022-12-23
  • 2021-12-27
相关资源
相似解决方案