Установка Root CA Cert через код на Win32 - PullRequest
8 голосов
/ 18 марта 2009

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 18 марта 2009

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

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

ПРИМЕЧАНИЕ. Этот код, запускаемый от имени пользователя, устанавливает сертификат в корневое хранилище пользователя, а не в компьютер. Это также приводит к появлению диалогового окна с предупреждением, которое пользователь должен понять и выбрать «Да» для авторизации импорта. Если ваша программа установки может запустить этот код в системной учетной записи, импорт повлияет на корневое хранилище компьютера, и появится диалоговое окно с предупреждением.

2 голосов
/ 05 июля 2012

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

1 голос
/ 18 марта 2009

Вы смотрели на CertAddEncodedCertificateToStore ?

0 голосов
/ 18 марта 2009

Несколько примеров C ++ в Windows SDK от MSDN

Просто скопируйте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...