在Compact Framework .NET上加载根证书

时间:2014-04-14 15:43:10

标签: compact-framework x509certificate

我正在尝试从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编码的。此外 - 当我在桌面上运行相同的代码(使用我们已经构建的移动模拟器)时,它会成功解析证​​书。

我错过了一些基本的东西吗?

3 个答案:

答案 0 :(得分:1)

我也有同样的问题,我按照以下步骤解决了这个问题。

将证书文件转换为DER编码的二进制X.509格式,然后在紧凑的框架中使用它。

转换步骤:

  1. 打开计算机中的.cer文件
  2. 转到"详情"选项卡并单击"复制到文件..."按钮
  3. 出现证书导出向导,单击下一步并选择" DER编码二进制X.509(.CER)"
  4. 单击“下一步”并指定所需的位置和文件名,然后单击“完成”
  5. 这将在所选位置生成.cer文件
  6. 在紧凑框架中使用证书文件(由上述过程生成),并以编程方式访问信息,如下所示。

    1. 使用BinaryReader读取证书文件的内容,结果为byte [] value
    2. X509Certificate2 cert = new X509Certificate2(上述步骤返回的字节值)
    3. 通过cert.GetIssuerName();
    4. 等内置方法获取颁发者名称或所需的任何详细信息

      当我按照这个程序时,我没有得到任何异常,它运行正常。

答案 1 :(得分:0)

您可能会发现通过X509Store类更容易与证书进行交互。您可以手动或以编程方式添加根证书。

将证书添加到商店后,您可以从商店检索X509Certificate2的枚举,并使用LINQ过滤到特定的GoDaddy证书。

链接的MSDN页面有一些示例代码显示了这一点。希望这会有所帮助。

答案 2 :(得分:0)

CF is effectively useless中的X509命名空间。我不确定为什么他们会烦恼包括它。我最终手动包装证书API并创建一组单独的X509类,这些类提供了BCL应该提供的功能。对于SO上的帖子,代码太长了,但这些方法are part of the SDF