以编程方式将证书添加到商店后的Netsh错误1312

时间:2013-02-01 13:33:08

标签: c# x509certificate netsh

我正在尝试使用以下代码以编程方式将证书添加到商店:

var certPath = string.Format("{0}//{1}", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"fileName.pfx");
        var cert = new X509Certificate2(certPath, "Password");

        X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadWrite);
        store.Add(cert);
        store.Close();

我签入MMC并添加了证书。

如果我现在在具有admin特权的命令提示符下运行:

netsh http add sslcert ipport=0.0.0.0:<port> certhash=<Thumbnail> appid={00000000-0000-0000-0000-000000000000}

然后它抛出一个1312错误,“指定的登录会话不存在。它可能已经被终止。”

如果我通过MMC中的导入功能添加证书,则上述命令可以正常工作。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

问题在于Windows存储私钥的方式。 要在.Net中以编程方式执行此操作,请更改以下代码行:

X509Certificate2 cert = new X509Certificate2(path, "password",
    X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);

根据这个问题:Inserting Certificate (with privatekey) in Root, LocalMachine certificate store fails in .NET 4

答案 1 :(得分:0)

我们最终使用WIX在安装时将证书注入商店。它看起来效果很好。