Установка корневого сертификата CA через код на Win32

мы только что создали новое решение удаленного доступа с помощью шлюза TS Microsoft, для которого требуется несколько шагов от имени конечных пользователей, чтобы заставить его работать (установка нашего корневого сертификата ca, требование клиента RDP 6.1 и т. д.).

чтобы сделать этот процесс установки максимально простым (многие из этих пользователей технически не настроены), я хочу создать программу для автоматического выполнения всех этих задач. У меня большая часть этого работает, однако я не полностью уверен, как импортировать корневой сертификат CA в хранилище сертификатов Windows.

поскольку это потенциально может быть запущено на широком спектре компьютеров с различными уровнями исправлений и обновлений, я руля хорошо очищен от .NET и всего, что не является родным - инструмент должен "просто работать" без необходимости установки пользователем ничего лишнего (ну, я скажу, что windows XP, без пакетов обновления, является минимальной требуемой версией windows). Говоря это, я не против использовать что-то третье, если его можно связать с инструментом, если он не огромен и не вводит никаких интерактивных шагов. В идеале что-то в Windows API было бы лучше, однако я не могу отследить ничего важного.

В настоящее время инструмент является приложением C++, поэтому я не возражаю, если это довольно низкоуровневый материал.

4 ответов


сначала нужно открыть корневое хранилище сертификатов...

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

Примечание: это код при запуске от имени пользователя устанавливает сертификат в корневое хранилище пользователя, а не компьютера. Это также приводит к появлению диалогового окна предупреждения, которое пользователь должен понять и выбрать "Да" для авторизации импорта. Если программа установки может запустить этот код в системной учетной записи, импорт повлияет на корневое хранилище компьютера и появится диалоговое окно "не предупреждение".


вы также можете проверить CertAddEncodedCertificateToSystemstore


вы смотрели CertAddEncodedCertificateToStore ?


несколько образцов C++ в Windows SDK из MSDN

просто скопировать их.