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#中使用