ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

解决用SHA256算法做私钥签名时,遇到“指定的算法无效”的问题

2019-03-26 13:44:01  阅读:571  来源: 互联网

标签:私钥 证书 生成 算法 加密 SHA256 CSP


在上一篇随笔“记一次三方接口开发的数据加密方案”中,使用SHA256对数据进行签名时,我提到了一个异常,System.Security.Cryptography.CryptographicException "Invalid algorithm specified.",中文为“指定的算法无效”。自己用openssl命令生成的证书没有这个问题,但是网站上导出的免费证书不行,对此不想过多纠结。但是,后来使用从CFCA申请的证书,居然也不行,所以不得不对这个问题做了更深入的探究。

 一、产生原因

针对证书私钥采用SHA256算法对数据进行签名时,报“指定的算法无效”这一异常,我查询了不少资料,才找到问题原因,在百度上几乎什么有用的信息也搜不出来,在google上翻阅了多篇文章,才弄清楚问题的根本。 

实际原因是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",所以为什么网站上申请的证书导出的pfx不支持SHA256,根本差异就在这里。

 

 

-- End

标签:私钥,证书,生成,算法,加密,SHA256,CSP
来源: https://www.cnblogs.com/jiujiduilie/p/10599229.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有