3

我通过 C# (bouncycastle) 创建了一个自签名 SSL 证书。它显示在本地计算机/个人商店中,看起来与 Microsoft 已经存在的 localhost 证书完全一样。如果我显示属性,它会说:

SSL 证书添加失败,错误:1312 指定的登录会话不存在。它可能已经被终止。

但是,如果我想通过 netsh 注册此证书,则会收到错误消息:

netsh.exe http add sslcert ipport=0.0.0.0:{0} certhash={1} appid={2}

app-id 是在 assemblyinfo.cs 中指定的 GUID。certhash是证书属性页的哈希值。

我在许多博客文章中发现了为什么会发生这种情况的几个原因:

  • 使用提升的权限(我正在这样做)
  • 确保您的证书在“本地计算机”中注册,而不是在“当前用户”中 - 我有这个。
  • 确保证书有一个私钥(它有,如属性对话框中所示)。

他们都没有成功...

4

3 回答 3

4

你的问题是在绑定之前。我假设证书没有正确导入。在 C# 中加载证书时,请使用:

var cert = new X509Certificate2("Path", "Pwd, X509KeyStorageFlags.MachineKeySet
                                              | X509KeyStorageFlags.PersistKeySet
                                              | X509KeyStorageFlags.Exportable);

并确保将其存储在本地计算机中StoreLocation.LocalMachine

var store = new X509Store(storeName, StoreLocation.LocalMachine);
store.Open(OpenFlags.MaxAllowed);
store.Add(cert);
store.Close();
于 2014-06-10T10:42:51.203 回答
0

我今天遇到了类似的问题,这就是我解决它的方法。当我在我的本地计算机/我的 mmc.exe 中查看安装的证书时,我发现我的证书没有带有密钥的图标。

我将 *.cer 和 *.pvk 文件与 *.pfx 结合起来:

pvk2pfx -pvk "private_key.pvk"  -spc "public.cert" -pfx "test.pfx"

然后使用 mmc.exe 导入 *.pfx 文件。

然后下一个命令将执行而没有错误:

netsh http add sslcert...
netsh http delete sslcert...
于 2014-01-12T13:17:47.810 回答
-1

您必须进行的另一项检查是:您的证书是否位于“本地计算机”下的“个人”存储下?如果不是,您将不得不使用附加参数certstorename="<store>"

我通过<store>以下方式确定要传递的值:

  1. 打开 MMC 并为本地计算机帐户添加证书管理单元。
  2. <store>是您通过此管理单元查看证书时所在文件夹的名称。

默认情况下,为 certstorename 假定的值为“MY”,表示“个人”文件夹。因此,如果您的证书位于 Personal 文件夹中,则无需添加此参数。

于 2013-07-10T18:26:51.783 回答