我正在尝试从CF.NET中的文件加载x509证书。我正在尝试加载can be downloaded here的证书(它是GoDaddy根证书)。
我的代码如下所示:
byte[] bytes = null;
using (var certFile = new FileStream("\\gdroot-g2.crt", FileMode.Open, FileAccess.Read))
using (var br = new BinaryReader(certFile))
{
bytes = new byte[(int)certFile.Length];
br.Read(bytes, 0, bytes.Length);
}
//This line throws the error.
var cert = new X509Certificate2(bytes);
当我尝试加载证书时,出现以下错误:
创建证书对象失败。传入的数据是 .NET Compact Framework不支持或不支持。 .NET Compact Framework不支持从pfx文件读取。
我已经验证我使用的.CRT文件是Base-64编码的。此外 - 当我在桌面上运行相同的代码(使用我们已经构建的移动模拟器)时,它会成功解析证书。
我错过了一些基本的东西吗?
答案 0 :(得分:1)
我也有同样的问题,我按照以下步骤解决了这个问题。
将证书文件转换为DER编码的二进制X.509格式,然后在紧凑的框架中使用它。
转换步骤:
在紧凑框架中使用证书文件(由上述过程生成),并以编程方式访问信息,如下所示。
当我按照这个程序时,我没有得到任何异常,它运行正常。
答案 1 :(得分:0)
您可能会发现通过X509Store类更容易与证书进行交互。您可以手动或以编程方式添加根证书。
将证书添加到商店后,您可以从商店检索X509Certificate2的枚举,并使用LINQ过滤到特定的GoDaddy证书。
链接的MSDN页面有一些示例代码显示了这一点。希望这会有所帮助。
答案 2 :(得分:0)
CF is effectively useless中的X509命名空间。我不确定为什么他们会烦恼包括它。我最终手动包装证书API并创建一组单独的X509类,这些类提供了BCL应该提供的功能。对于SO上的帖子,代码太长了,但这些方法are part of the SDF。