J'ai une application C++ qui établit une connexion HTTPS avec l'un de nos serveurs. Dans mon monde idéal, je voudrais ce qui suit pour se produire:WinHttp: Comment utiliser un magasin de certificats temporaire?
- App commence
- App rend Windows confiance de CA racine du serveur (pas d'interface graphique s'il vous plaît, seulement les appels système)
- parle App vers le serveur, fait son travail, etc.
- App fait fenêtres oublier la racine du serveur CA
- fait
je NOT souhaite que cette autorité de certification racine soit nécessairement approuvée par d'autres applications. Par conséquent, je ne veux pas installer le système de sécurité à l'échelle du système. Je voudrais aussi si l'utilisateur n'a pas besoin de privilèges d'administrateur. Mon plan initial était de créer un magasin en mémoire (CERT_STORE_PROV_MEMORY), ajouter mon CERT à cela, puis ajouter ce magasin en mémoire à la banque du système en utilisant CertAddStoreToCollection.
Alors que tous les appels de fonction CryptoAPI réussissent, WinHttp ne l'aime pas.
Voici le squelette de ce que je fais - peut-être que quelqu'un connaît un truc? Ou peut-être que c'est en premier lieu une erreur?
hMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY, ...);
pCert = CertCreateCertificateContext(..., pCertBytes, ...);
CertAddCertificateContextToStore(hMemStore, pCert, ...);
hRootStore = CertOpenSystemStore(NULL, "ROOT");
CertAddStoreToCollection(hRootStore, hMemStore, ...);
// Then later on...
WinHttpSendRequest(...)
Quelques notes:
- Tout fonctionne quand j'utilise SECURITY_FLAG_IGNORE_UNKNOWN_CA de WinHttp, donc je suis assez sûr que ce soit vraiment la question.
- J'ai déjà vu this SO question - il est proche, mais ne résout pas le problème de faire le seul certificat temporairement de confiance, tandis que l'application s'exécute.
Merci!