【问题标题】:Installing Root CA Cert via code on Win32在 Win32 上通过代码安装 Root CA Cert
【发布时间】:2009-03-18 01:50:10
【问题描述】:

我们刚刚使用 Microsoft 的 TS 网关设置了一个新的远程访问解决方案,这需要代表最终用户执行一些繁琐的步骤才能使其正常工作(安装我们的根 ca 证书,需要 RDP 6.1 客户端等)。

为了使此设置过程尽可能简单(其中很多用户没有技术头脑),我希望创建一个程序来自动执行所有这些任务。我已经完成了大部分工作,但是我不完全确定如何将根 CA 证书导入到 Windows 证书存储中。

因为这可能会在具有不同级别的补丁和更新的各种计算机上运行,​​所以我很清楚 .NET 和任何非本机的东西 - 该工具应该在没有用户的情况下“运行”必须安装任何额外的东西(好吧,我会说 Windows XP,没有服务包,是 Windows 的最低要求版本)。话虽如此,如果可以与工具捆绑在一起,我不介意使用第三方的东西,只要它不是很大,并且不引入任何交互步骤。理想情况下,Windows API 中的某些东西是最好的,但是我似乎无法找到任何相关的东西。

目前该工具是一个 C++ 应用程序,所以我不介意它是否是相当低级的东西。

【问题讨论】:

    标签: c++ winapi certificate


    【解决方案1】:

    首先你需要打开根证书存储...

     HCERTSTORE hRootCertStore = CertOpenSystemStore(NULL,"ROOT");
    

    然后使用 CertAdd 函数之一添加证书,例如 CertAddEncodedCertificateToStore。

    CertAddEncodedCertificateToStore(hRootCertStore,X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,pCertData,cbCertData,CERT_STORE_ADD_USE_EXISTING,NULL);
    

    pCertData 和 cbCertData 可能会指向您从文件中读取的证书数据(不确定证书是否会在文件中,或者您将如何将其包含在您的应用程序中)。

    然后关闭商店...

    CertCloseStore(hRootCertStore,0);
    

    注意:如果以用户身份运行,此代码会将证书安装到用户的根存储区,而不是计算机的根存储区。它还会导致用户必须理解并选择“是”以授权导入的警告对话框。如果您的安装程序可以在系统帐户中运行此代码,则导入将影响计算机的根存储,并且不会显示警告对话框。

    【讨论】:

    • 此函数 CertAddEncodedCertificateToStore 是否也适用于 pem、der 格式证书?
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      您还可以查看 CertAddEncodedCertificateToSystemStore

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        • 2011-11-11
        • 2023-03-22
        • 1970-01-01
        • 2020-04-17
        • 2019-09-25
        • 2017-11-18
        相关资源
        最近更新 更多