如何使用C#编程安装证书

28

我的学校网页有自签名证书(需要手动安装)。我想创建一个程序,将certificate.cer(来自Visual Studio资源)安装到本地用户的受信任的根证书颁发机构中。

你知道我如何在C#中实现这个功能吗?


我尝试使用NativeWin32和DllImport("user32.dll")(SendKeys)来实现,但是我无法确定具体的类型。 - DroidBellmer
1个回答

67

要通过编程方式将证书添加到当前用户的受信任根存储中,请使用X509StoreX509Certificate2类。例如:

string file; // Contains name of certificate file
X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(new X509Certificate2(X509Certificate2.CreateFromCertFile(file)));
store.Close();

请参考“如何使用c#编程将证书安装到本地机器存储中?”。

另一个选择是证书管理器命令行工具(certmgr.exe),具体如下:

certmgr /add cert.cer /s Root

“cert.cer”是您的证书。这将把它导入到当前用户的受信任根存储中。但是,certmgr.exe是Visual Studio和Windows SDK的一部分,可能无法自由分发。


1
我在运行这段代码的账户下需要管理员访问权限吗? - Johnny_D
@Johnny_D 你需要管理员权限来修改系统范围内的证书存储,例如“根”。但是,你不需要管理员权限来修改你个人的证书存储,例如“我的”。 - akton
这是一个问题,因为我需要在Azure虚拟机内完成它。我是否应该创建一个管理员用户并模拟添加证书的上下文? - Johnny_D
我有一些依赖证书的功能。而且我需要在虚拟机实例正在运行时安装/更新它们。 - Johnny_D
1
@Johnny_D 从上面的链接中可以看到,“Windows Azure会自动将证书部署到运行您角色实例的VM上”。正如我所说,我对Azure知之甚少,可能有些遗漏。这个问题可能值得在这个网站上单独提问。 - akton
显示剩余12条评论

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