2009-03-18 10 views
8

Abbiamo appena installato una nuova soluzione di accesso remoto utilizzando il TS Gateway di Microsoft, che richiede un paio di passaggi un po 'complicati per conto degli utenti finali al fine di farlo funzionare (installazione della root ca cert, requisito del client RDP 6.1, ecc.).Installazione di CA Cert root tramite codice su Win32

Al fine di rendere questo processo di installazione il più semplice possibile (molti di questi utenti non sono tecnicamente orientati), sto cercando di creare un programma per eseguire tutte queste attività automaticamente. Ho la maggior parte del lavoro, tuttavia non sono completamente sicuro su come importare il certificato CA radice nell'archivio certificati di Windows.

Poiché questo può potenzialmente essere eseguito su una vasta gamma di computer con vari livelli di patch e aggiornamenti, sto guidando bene lontano da .NET e da tutto ciò che non è nativo: lo strumento dovrebbe "funzionare" senza l'utente deve installare qualcosa in più (beh, dirò Windows XP, nessun service pack, è la versione minima richiesta di Windows). Nel dire questo, non mi dispiace usare qualcosa di terzo se può essere integrato nello strumento, purché non sia enorme, e non introduce alcuna procedura interattiva. Idealmente qualcosa dell'API di Windows sarebbe il migliore, tuttavia non riesco a rintracciare nulla di rilevante.

Attualmente lo strumento è un'applicazione C++, quindi non mi importa se è roba di basso livello.

risposta

7

Prima di tutto bisogna aprire il negozio certificato principale ...

HCERTSTORE hRootCertStore = CertOpenSystemStore(NULL,"ROOT"); 

quindi aggiungere il certificato utilizzando una delle funzioni CertAdd, come CertAddEncodedCertificateToStore.

CertAddEncodedCertificateToStore(hRootCertStore,X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,pCertData,cbCertData,CERT_STORE_ADD_USE_EXISTING,NULL); 

pCertData e cbCertData sarebbe probabilmente puntare al dati del certificato di leggere da un file (non so se il certificato sarà in un file, o come si intende includerlo nella propria applicazione).

Poi chiudere il negozio con ...

CertCloseStore(hRootCertStore,0); 

Nota: questo codice, se eseguita con l'utente, installa il certificato all'archivio principale dell'utente, non il computer. Ne risulta anche una finestra di avviso che l'utente deve capire e selezionare "Sì" per autorizzare l'importazione. Se il programma di installazione può eseguire questo codice in un account di sistema, l'importazione avrà effetto sull'archivio principale del computer e non verrà visualizzata la finestra di avviso.

0

Diversi campioni C++ in Windows SDK di MSDN

Basta copiarli.

2

si potrebbe anche verificare CertAddEncodedCertificateToSystemStore

Problemi correlati