【问题标题】:Loading Root Certificate on Compact Framework .NET在 Compact Framework .NET 上加载根证书
【发布时间】:2014-04-14 15:43:09
【问题描述】:

我正在尝试从 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 紧凑型 框架不支持读取 pfx 文件。

我已验证我使用的 .CRT 文件是 Base-64 编码的。另外 - 当我在桌面上运行相同的代码(使用我们构建的移动模拟器)时,它会成功解析证​​书。

我在这里缺少一些基本的东西吗?

【问题讨论】:

  • 什么版本的CF?

标签: compact-framework x509certificate


【解决方案1】:

我也遇到了同样的问题,我按照以下步骤解决了。

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

转换步骤:

  1. 在电脑中打开 .cer 文件
  2. 转到“详细信息”选项卡并单击“复制到文件...”按钮
  3. 出现证书导出向导,点击下一步并选择“DER 编码二进制 X.509(.CER)”
  4. 单击“下一步”并指定所需的位置和文件名,然后单击“完成”
  5. 这将在所选位置生成一个 .cer 文件

使用紧凑框架中的证书文件(由上述过程生成)并以编程方式访问信息,如下所示。

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

当我按照这个程序进行操作时,我没有遇到任何异常,并且运行良好。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢!这里的目标实际上是从我的应用程序将证书安装到该商店。我的许多客户的根证书即将到期,我想从我的应用下载并安装新的,无需太多干预。
    • 在这种情况下,MSDN page 可能有用。
    【解决方案3】:

    CF is effectively useless 中的 X509 命名空间。我不知道他们为什么要费心把它包括在内。我最终手动包装了证书 API,并创建了一组单独的 X509 类,这些类提供了 BCL 应该提供的功能。代码太长,无法在 SO 上发帖,但这些方法 are part of the SDF

    【讨论】:

    • @ctake 我实际上已经有了那个库 - 版本 2.3.0.39。不过我没有看到任何 x509 的东西?
    • 我刚刚验证它在 2.3.12004 中存在(页面上的当前社区下载)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多