Установка корневого сертификата 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);
Примечание: это код при запуске от имени пользователя устанавливает сертификат в корневое хранилище пользователя, а не компьютера. Это также приводит к появлению диалогового окна предупреждения, которое пользователь должен понять и выбрать "Да" для авторизации импорта. Если программа установки может запустить этот код в системной учетной записи, импорт повлияет на корневое хранилище компьютера и появится диалоговое окно "не предупреждение".