2017-02-22 2 views
1

Je tente de créer un certificat à des fins de test en deux étapes. Tout d'abord, je crée un certificat auto-signé qui établit ma propre autorité de certification (CA). Deuxièmement, j'utilise ce certificat racine pour signer un certificat de serveur de test qui sera placé dans un magasin de certificats personnel. J'ouvre une invite de commande administrative et entrez les informations suivantes:Installer le certificat auto-signé au magasin personnel à partir du fichier .cer en utilisant C++

Étape 1: MakeCert -pe -n "CN = TestCA" -b 01/01/2015 -e 01/01/2020 -ss mon -SR currentuser -a sha256 signature -sky -NBCAR 2048 -r "TestCA.cer"

Etape 2: MakeCert -pe -n "CN = localhost" -b 01/01/2015 -e 01/01/2020 -eku 1.3.6.1.5.5.7.3.1 -dans "TestCA" -est mon -user actuel -ss mon -sr utilisateur actuel -a sha256 -sky échange -sp "Microsoft RSA SChannel Fournisseur cryptographique" -sy 12 -len 2048 "Localhost.cer"

Suite à ces étapes, tout fonctionne bien. Après cela, j'essaie d'installer ces certificats via l'application C++. Il semble que ce soit bien quand je vérifie ces certificats dans certmgr.msc, cependant, le client ne parvient toujours pas à se connecter au serveur depuis lors. Après avoir supprimé le certificat "localhost" du magasin de certificats personnel, effectuez à nouveau l'étape 2 à l'aide de MakeCert.exe. Le client peut réussir à se connecter au serveur. Peut-être qu'il y a quelque chose d'important qui me manquait. Si quelqu'un le sait, donnez-moi quelques suggestions. En passant, mon client et mon serveur s'exécutent sur le même ordinateur. Mes codes sont indiqués ci-dessous.

HCERTSTORE hMyCertStore = NULL; 
if(hMyCertStore = CertOpenStore(
    CERT_STORE_PROV_SYSTEM,   // The store provider type 
    0,        // The encoding type is 
            // not needed 
    NULL,       // Use the default HCRYPTPROV 
    CERT_SYSTEM_STORE_CURRENT_USER, // Set the store location in a 
            // registry location 
    L"MY"       // The store name as a Unicode 
            // string 
    )) 
{ 
    printf("The system store was created successfully.\n"); 
} 
else 
{ 
    printf("An error occurred during creation " 
     "of the system store!\n"); 
    exit(1); 
} 

CRYPTUI_WIZ_IMPORT_SRC_INFO importSrc; 

memset(&importSrc, 0, sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO)); 
importSrc.dwSize = sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO); 
importSrc.dwSubjectChoice = CRYPTUI_WIZ_IMPORT_SUBJECT_FILE; 
importSrc.pwszFileName = L"C:\\Temp\\MakeCert\\localhost.cer"; 
importSrc.pwszPassword = L""; 
importSrc.dwFlags = CRYPT_EXPORTABLE | CRYPT_USER_PROTECTED; 

if (CryptUIWizImport(CRYPTUI_WIZ_NO_UI, 
        NULL, 
        NULL, 
        &importSrc, 
        hMyCertStore) == 0) 
{ 
    printf("CryptUIWizImport error %d\n", GetLastError()); 
} 

Toute aide serait grandement appréciée.

Clement

Répondre

0

que j'ai trouvé la différence entre MakeCert et ma demande. Après l'installation par MakeCert, j'ai ouvert l'onglet Général de la boîte de dialogue, puis j'ai trouvé une chaîne "Vous avez une clé privée qui correspond à ce certificat, mais en utilisant mon application, il n'y a pas de chaîne dans le dialogue. manqué quelques étapes Si quelqu'un sait, s'il vous plaît me donner quelques suggestions.

Merci. au cours de la procédure d'installation.

Clement