【问题标题】:Certificate Install Security Warning Workaround?证书安装安全警告解决方法?
【发布时间】:2010-11-16 17:22:51
【问题描述】:

我有一些 C# 4.0 代码尝试将 CA(.der 编码)证书安装到当前(我的)用户的“受信任的根证书颁发机构”存储中。我的小控制台应用程序在其他商店静默运行,但是对于这个商店,出现一个 GUI 弹出窗口“您将要安装来自证书颁发机构的证书...... Windows 无法验证证书实际上来自......要安装此证书吗?”

这个消息框是个问题,因为它的想法是使用 MSI 自动部署应用程序,并在正确的位置静默获取正确的证书。拥有一个模态框会扼杀自动化部署。

如何在没有破坏部署的消息框的情况下完成此安装?

【问题讨论】:

  • Windows 提出这个问题的原因是,将证书添加到根存储有安全隐患,因此不应轻率地进行。我不确定是否有办法避免弹出窗口,但我希望不会! 不应允许安装应用程序危及 PC 的安全性,尤其是不能静默安装。
  • @dajames 就像奥列格在他的回答中写道:允许管理员在本地计算机受信任的根存储中安装证书而不会弹出窗口。当您安装应用程序时,您通常会授予安装程序管理员权限,所以我认为您的情况实际上是可能的。另一个你应该小心你赋予你宝贵的管理员权限的安装程序/应用程序的原因。

标签: c# installation certificate ssl-certificate x509certificate


【解决方案1】:

这听起来不合逻辑,但为了没有警告,您应该不将证书添加到当前用户的根证书存储中,而是添加到本地计算机的根。您可以轻松验证

certmgr.exe -add -c t.cer -s -r currentUser root

产生安全警告,但是

certmgr.exe -add -c t.cer -s -r localMachine root

不是。

因此,如果您想在 .NET 中导入证书,则相应的代码可能如下所示

using System;
using System.Security.Cryptography.X509Certificates;

namespace AddCertToRootStore {
    class Program {
        static void Main (string[] args) {
            X509Store store = new X509Store (StoreName.Root,
                                             StoreLocation.LocalMachine);
            store.Open (OpenFlags.ReadWrite);
            X509Certificate2Collection collection = new X509Certificate2Collection();
            X509Certificate2 cert = new X509Certificate2 (@"C:\Oleg\t.cer");
            byte[] encodedCert = cert.GetRawCertData();
            Console.WriteLine ("The certificate will be added to the Root...");
            store.Add (cert);
            Console.WriteLine("Verify, that the certificate are added successfully");
            Console.ReadKey ();
            Console.WriteLine ("The certificate will be removed from the Root");
            store.Remove (cert);
            store.Close ();
        }
    }
}

【讨论】:

  • 我刚刚在我的 Windows 7 机器上试过这个。您需要管理员权限才能正常工作。我认为管理员可以在没有视觉提示的情况下为本地机器安装受信任的根证书是有道理的。
  • @Stefan:当然只有管理员可以在本地机器上安装根证书,尤其是安装案件中的证书有时需要保持沉默。例如考虑设置。所以我认为你写的没有问题。
  • 我只是想指出(对于其他偶然发现这个答案的人)只有管理员才能做到这一点,而不仅仅是任何用户。阅读您的答案后,我立即不清楚。但否则 +1 的洞察力和有用的代码示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2023-04-03
  • 2015-03-22
  • 2017-08-06
相关资源
最近更新 更多