我们刚刚使用Microsoft的TS网关设置了一个新的远程访问解决方案,该方案需要代表最终用户采取一些较简单的步骤才能使其正常运行(安装我们的root ca cert,RDP 6.1客户端要求等)。

为了使此设置过程尽可能的容易(很多用户在技术上并不介意),我正在寻找一个程序来自动执行所有这些任务。我已经完成了大部分工作,但是我不确定如何将根CA证书导入Windows证书存储。

由于此程序可能会在具有不同级别的补丁程序和更新的各种计算机上运行,​​因此我很好地避免了.NET和任何非 native 的内容-该工具应“正常运行”,而无需用户安装任何额外的东西(嗯,我会说Windows XP,没有Service Pack,是Windows的最低最低要求版本)。话虽这么说,但我不介意使用第三方工具,只要它不是很大,并且不引入任何交互步骤,便可以与该工具捆绑在一起。理想情况下,Windows API中的某些内容是最好的,但是我似乎无法追踪任何相关内容。

当前,该工具是C++应用程序,因此我不介意它是否是非常底层的东西。

最佳答案

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

 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);

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

关于c++ - 通过Win32上的代码安装根CA Cert,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/656706/

10-10 16:18
查看更多