Nous venons de mettre en place une nouvelle solution d’access distant utilisant la passerelle TS de Microsoft, qui nécessite quelques étapes fastidieuses de la part des utilisateurs finaux afin de la faire fonctionner (installation de notre certificate de ca racine, exigence du client RDP 6.1, etc.).
Afin de rendre ce processus d’installation aussi simple que possible (bon nombre de ces utilisateurs ne sont pas techniquement au courant), je cherche à créer un programme pour effectuer toutes ces tâches automatiquement. La plupart de ces applications fonctionnent, mais je ne suis pas tout à fait sûr de savoir comment importer le certificate de l’autorité de certificateion racine dans le magasin de certificates Windows.
Parce que cela peut potentiellement être exécuté sur une large gamme d’ordinateurs avec différents niveaux de correctifs et de mises à jour, je suis bien sûr d’évoluer .NET et tout ce qui n’est pas natif – l’outil devrait «simplement fonctionner» sans que l’utilisateur ait à installer. quelque chose en plus (enfin, je dirai Windows XP, pas de Service Packs, est la version minimale requirejse de Windows). En disant cela, cela ne me dérange pas de faire appel à une tierce partie si elle peut être intégrée à l’outil, à condition que ce ne soit pas énorme et qu’elle n’introduise pas d’étapes interactives. Idéalement, quelque chose dans l’API Windows serait préférable, mais il me semble impossible de repérer quelque chose de pertinent.
Actuellement, l’outil est une application C ++, donc cela ne me dérange pas qu’il s’agisse d’éléments de bas niveau.
Vous devez d’abord ouvrir le magasin de certificates racine …
HCERTSTORE hRootCertStore = CertOpenSystemStore(NULL,"ROOT");
Ajoutez ensuite le certificate à l’aide de l’une des fonctions CertAdd, telle que CertAddEncodedCertificateToStore.
CertAddEncodedCertificateToStore(hRootCertStore,X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,pCertData,cbCertData,CERT_STORE_ADD_USE_EXISTING,NULL);
pCertData et cbCertData pointeraient probablement sur les données de certificate lues dans un fichier (vous ne savez pas si le certificate sera dans un fichier ou comment vous l’incluez dans votre application).
Puis fermez le magasin avec …
CertCloseStore(hRootCertStore,0);
REMARQUE: Ce code, s’il est exécuté en tant qu’utilisateur, installe le certificate dans le magasin racine de l’utilisateur, pas dans celui de l’ordinateur. Il en résulte également une boîte de dialog d’avertissement que l’utilisateur doit comprendre et sélectionner «Oui» pour autoriser l’importation. Si votre programme d’installation peut exécuter ce code dans un compte système, l’importation affectera le magasin racine de l’ordinateur et le dialog d’avertissement ne s’affichera pas.
vous pouvez également consulter CertAddEncodedCertificateToSystemStore
Avez-vous examiné CertAddEncodedCertificateToStore ?
Plusieurs exemples C ++ dans Windows SDK à partir de MSDN
Il suffit de les copier.