无法使用X509Certificate2找到指定的对象

时间:2016-04-29 19:07:31

标签: c# x509certificate2

我正在尝试加载包含访问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

找到指定的对象

我还在文件的Always copy上设置了属性Copy in the output directory以供阅读。

2 个答案:

答案 0 :(得分:8)

在经历了一些头痛之后,我能够理解哪里出错了,正如我在评论中所说,我通过以下方式生成证书:

  

我做的第一步是为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让我怀疑证书不合时宜。

答案 1 :(得分:1)

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

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