解决证书读取私匙 cert.PrivateKey 提示错误 指定了无效的提供程序类型

try
{
    X509Certificate2 cert = new X509Certificate2("ServiceLicense.pfx", "password",X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
    Console.WriteLine(cert.HasPrivateKey.ToString());
    Console.WriteLine(cert.PrivateKey.KeySize.ToString());
    Console.WriteLine(cert.PrivateKey.ToXmlString(true));
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

直接上代码 就这么个程序 

翻遍网内网外都没有解决 白白浪费一宿的时间 没有一个人说道点子上的

最后只能靠自己 排除法

首先确定的是上面的代码没有任何问题 也排除环境问题后 问题依旧的话 试试我的方法

具体过程就不说了 我这里问题就出现在证书上面了 

makecert  自签自发的证书文件 什么系统、软件都测试过、软件签名也通过 上哪用都没的问题 在程序里面就是读取不了PrivateKey

还好证书比较多 换USBKEY的没问题  换软证书也没问题 

但是不能就这么过去了  开发的是内网加密的系统 必须要一台机器一个证书 

所以证书必须是主机签发的 

通过openssl对pfx文件 进行一个反向操作 在重新合成pfx文件的时候就不行了  

pkcs12: Unrecognized flag in"License_open.cer"
pkcs12: Use -help for summary.
error in pkcs12

最终解决的方法就是 用 openssl进行签发证书 测试程序正常

通过windows服务器进行颁发也是正常的 

没有具体的寻找问题的原因

但是大致了解为  证书的加密算法或者编码问题

一个证书文件哪怕是加密方法不同 使用程序语言不同

最终的结果应该是 只要有私匙 可以通过其他生成器随意转换为别的格式文件 在转回一个pfx文件

不管是 X509Certificate 还是 X509Certificate2 对其他程序生成的证书都可以通过

 而 makecert 只支持sha1 和md5 ,

最后用相同的私匙 公匙 通过不同的程序生成的 证书文件 ,makecert生成的证书字节跟别的证书差了3个,但是证书还能用

只是不能支持在c#中使用 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值