我正在将此批处理命令的一部分转换为托管代码:
"%~dp0\makecert" -r -pe -n "CN=CompanyName" -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 "%~dp0\server.cer"
这不仅会创建证书,还会安装它。
安装证书时,它看起来像这样:
现在,我正在尝试使用托管代码安装私有证书。
这是我到目前为止所做的:
/// <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();
}
我怎样才能添加私钥?
答案 0 :(得分:1)
所以为了解决这个问题,你需要使用.pfx文件(我相信它不仅包含证书,还包含私钥)。
所以这就是我所做的。
“%~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(这是私钥)。
这提示我输入密码,我选择了无。试图包含密码会导致不良事件的发生。
现在在您的代码中,调整如下:
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(); }
原谅格式化,但在回答时打破了stackoverflow格式。