我们刚刚使用Microsoft的TS网关设置了一个新的远程访问解决方案,为了使其正常工作(安装我们的root ca证书,RDP 6.1客户端的要求等),需要在最终用户上进行几个有点繁琐的步骤.
为了使这个设置过程尽可能简单(很多这些用户都没有技术头脑),我想创建一个程序来自动执行所有这些任务.我有大部分工作,但我不完全确定如何将根CA证书导入Windows证书存储区.
因为这可以在具有不同级别的补丁和更新的各种计算机上运行,所以我很清楚.NET和任何非原生的东西 - 该工具应该"只运行"而无需用户安装任何额外的(好吧,我会说Windows XP,没有服务包,是最低要求的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);
注意:此代码如果以用户身份运行,则将证书安装到用户的根存储,而不是计算机的.它还会生成一个用户必须了解的警告对话框,并选择"是"以授权导入.如果您的安装程序可以在系统帐户中运行此代码,则导入将影响计算机的根存储,而不会显示警告对话框.