使用私钥安装证书

时间:2016-03-31 06:00:52

标签: c#

我正在将此批处理命令的一部分转换为托管代码:

"%~dp0\makecert" -r -pe -n "CN=CompanyName" -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 "%~dp0\server.cer"

这不仅会创建证书,还会安装它。

安装证书时,它看起来像这样:

enter image description here

现在,我正在尝试使用托管代码安装私有证书。

这是我到目前为止所做的:

/// <summary>
///     Install the root authority certificate
/// </summary>
/// <param name="fileName"></param>
private static void InstallRootAuthority(string fileName)
{
    var cert = new X509Certificate2(X509Certificate.CreateFromCertFile(fileName));
    var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadWrite);
    store.Add(cert);
    store.Close();
}

我怎样才能添加私钥?

1 个答案:

答案 0 :(得分:1)

所以为了解决这个问题,你需要使用.pfx文件(我相信它不仅包含证书,还包含私钥)。

所以这就是我所做的。

  1. 使用MakeCert.exe生成证书,如下所示:
  2.   

    “%~dp0 \ makecert”-r -pe -n“CN = CompanyName”-ss my -sr localmachine   -sky exchange -sp“Microsoft RSA SChannel Cryptographic Provider”-sy 12“%~dp0 \ server.cer”-sv Server.pvk

    最后请注意,-sv Server.pvk(这是私钥)。

    1. pvk2pfx.exe -pvk Server.pvk -spc Server.cer -pfx Server.pfx
    2. 这提示我输入密码,我选择了无。试图包含密码会导致不良事件的发生。

      1. 现在在您的代码中,调整如下:

        private static void InstallRootAuthority(string fileName)                 {                     var cert = new X509Certificate2(fileName,string.Empty,X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);                     var store = new X509Store(StoreName.My,StoreLocation.LocalMachine);                     store.Open(OpenFlags.ReadWrite);                     store.Add(CERT);                     store.Close();                 }

      2. 原谅格式化,但在回答时打破了stackoverflow格式。