我已经通过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
是证书的properties-page中的哈希值。
我在很多博客文章中找到了几个原因:
他们都没有取得成功......
答案 0 :(得分: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();
答案 1 :(得分: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...
答案 2 :(得分:-1)
您需要做的另一项检查是:您的证书是否位于“本地计算机”下的“个人”商店下?如果不是,您将不得不使用附加参数certstorename="<store>"
我通过以下方式确定要传递为<store>
的值:
<store>
是您通过此管理单元查看证书时所在文件夹的名称。默认情况下,certstorename的值为“MY”,表示“Personal”文件夹。因此,如果证书位于个人文件夹中,则无需添加此参数。