【问题标题】:Can not find the specified object with X509Certificate2X509Certificate2 找不到指定的对象
【发布时间】:2016-08-25 01:19:02
【问题描述】:

我正在尝试加载包含访问Google Calendar API 的密钥的文件。 Following this tutorial. 为此,我创建了以下代码:

var certificate = new X509Certificate2("client_secret.json", "notasecret", X509KeyStorageFlags.Exportable);

我已经在我的解决方案中上传了client_secret.json 文件,这是文件的路径:"...\Visual Studio 2015\Projects\Calendar\Calendar\bin\Debug\client_secret.json"

但似乎代码找不到文件并返回此错误:

X509Certificate2 找不到指定的对象

我还在要读取的文件上设置Copy in the output directory 上的属性Always copy

【问题讨论】:

  • 您是否尝试为密钥添加完整路径?
  • @MegaTron 是的,同样的错误。我试着把它放在`c:`
  • 好的,它是 Web(ASP) 应用程序吗?
  • @MegaTron 不是 wpf + c# 应用程序
  • @Dillinger 您确定该文件包含有效证书吗?

标签: c# x509certificate2


【解决方案1】:

经过一番头疼后,我能够理解哪里错了,正如我在 cmets 中所说,我通过以下方式生成证书:

我做的第一步是为 Google 日历创建 API,后来我点击“创建凭据”并选择“服务帐户”,选择我之前创建的 API 和密钥类型为 json。

此证书与X509Certificate2 等待的密钥不同,因此正确的做法是:

1。单击开发人员控制台上的管理服务帐户,此工作位于凭据选项卡的右侧,只需一点“到您的项目列表”。

2。出现一个新窗口,您需要单击要创建密钥的项目旁边的三个点。 (三个点在右边)。

3。出现一个弹出菜单,然后,您需要点击Create Key

4。选择 P12 格式,然后点击创建。

5。将下载的文件保存在一个文件夹中,并将它们链接到您的代码中,特别是:

var certificate = new X509Certificate2(@"C:\key.p12", "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);

请注意,key.p12 是证书文件的名称,notasecret 是在第 4 步之后出现的默认密码,即与证书关联的密码。

所以我的代码似乎找到了文件并正确读取它而没有显示任何错误。

无论如何感谢MegaTron 让我怀疑证书在某种程度上是不正确的。

【讨论】:

    【解决方案2】:

    尝试使用MachineKeySet。这意味着需要使用本地计算机存储来获取密钥:

    var certificate = new X509Certificate2("client_secret.json", "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
    

    【讨论】:

    • 不幸的是同样的错误..我也试过另一个硬盘驱动器:var certificate = new X509Certificate2(@"A:\client_secret.json", "notasecret", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
    • @Dillinger 你是如何创建 json 密钥的?据我了解,您使用的是 Google Developers Console,对吗?
    • 我做的第一步是为谷歌日历创建API,后来我点击“创建凭据”并选择“服务帐户”,选择我之前创建的API和密钥类型作为json。还有一个P12格式,你以为X509Certificate2只能用P12格式吗?更新:刚刚尝试使用 P12,仍然得到相同的结果。我真的不知道我做错了什么。
    • @Dillinger 很奇怪。您是否尝试使用所有标志MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable
    • 我发布了一个答案,终于我设法解决了这个问题。谢谢
    猜你喜欢
    • 2013-05-26
    • 2016-11-18
    • 1970-01-01
    • 2011-07-01
    • 2018-04-07
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多