我们刚刚使用微软的TS网关设置了一个新的远程访问解决方案,这需要代表最终用户进行一些有点繁琐的步骤才能使其正常工作(安装我们的root ca证书,RDP 6.1客户端的要求)等)。
为了使这个设置过程尽可能简单(很多这些用户都没有技术头脑),我想创建一个程序来自动执行所有这些任务。我有大部分工作,但是我不完全确定如何将根CA证书导入Windows证书库。
因为这可以在具有不同级别的补丁和更新的各种计算机上运行,所以我很清楚.NET和任何非原生的东西 - 该工具应该在没有用户的情况下“运行”必须安装额外的东西(好吧,我会说Windows XP,没有服务包,是最低要求的Windows版本)。说这个,我不介意使用第三方,如果它可以与工具捆绑在一起,只要它不是很大,并且不会引入任何交互式步骤。理想情况下,Windows API中的某些内容最好,但我似乎无法追踪任何相关内容。
目前该工具是一个C ++应用程序,所以我不介意它是否是相当低级别的东西。
答案 0 :(得分:7)
首先,您需要打开根证书存储区......
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);
注意:此代码如果以用户身份运行,则将证书安装到用户的根存储,而不是计算机的。它还会生成一个用户必须了解的警告对话框,并选择“是”以授权导入。如果您的安装程序可以在系统帐户中运行此代码,则导入将影响计算机的根存储,而不会显示警告对话框。
答案 1 :(得分:2)
您还可以查看CertAddEncodedCertificateToSystemStore
答案 2 :(得分:1)
答案 3 :(得分:-1)
来自MSDN的Windows SDK中的几个C ++示例
只需复制它们。