9

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

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

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

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

4

3 回答 3

9

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

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

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

于 2009-03-18T02:07:26.483 回答
2

你看过CertAddEncodedCertificateToStore吗?

于 2009-03-18T01:57:08.863 回答
2

您还可以查看 CertAddEncodedCertificateToSystemStore

于 2012-07-05T17:56:25.130 回答