无法使用netsh注册由C#生成的自签名SSL证书(错误1312)

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 则是证书属性页面中的哈希值。

在许多博客文章中,我找到了几个导致此问题出现的原因:

  • 使用管理员权限(我正在这样做)
  • 确保你的证书已在“本地计算机”中注册,而不是在“当前用户”中注册 - 我已经完成了这一步。
  • 确保证书有私钥(它有,因为在属性对话框中显示了)。

但都没有成功解决问题...


一样的问题!有趣的是,同样的代码在某些机器上运行良好,但在其他机器上会出现上述错误。你有修复它的机会吗?(我使用的是Windows 8) - Michael
3个回答

5

您的问题出现在绑定之前。我假设证书没有被正确导入。 在 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();

指定keyStorageFlags是解决我的问题的关键。在Windows 7上它可以正常工作,但在Windows 8上没有它就无法工作。 - brendonparker
“Exportable”标志与此问题无关,可能是不必要的。 - Simon Opelt
我仍然没有运气。 - user1034912

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...

-1

你需要进行的一个额外检查是:你的证书是否位于“本地计算机”下的“个人”存储中?如果不是,你将需要使用附加参数certstorename="<store>"

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接