2016-04-17 7 views
0

Ich verwende den folgenden Code ein Zertifikat als vertrauenswürdigen Stamm zu importieren verwenden:importiert ein Zertifikat CryptUIWizImport automatisch als vertrauenswürdigen Stamm mit C++

#include "stdafx.h" 
#include "windows.h" 
#include "Cryptuiapi.h" 

#pragma comment(lib, "Cryptui.lib") 

int _tmain(int argc, _TCHAR* argv[]){ 
    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:\\PathToCert\\MyCertificate.cer”; 
    importSrc.pwszPassword = L"";  
    importSrc.dwFlags = CRYPT_EXPORTABLE | CRYPT_USER_PROTECTED;    
    if (CryptUIWizImport( 
     CRYPTUI_WIZ_NO_UI,  
     NULL,  
     NULL,  
     &importSrc,  
     NULL  
    ) == 0)  
    {  
     printf(“CryptUIWizImport error 0x%x\n”, GetLastError());  
    } 
    return 0; 
} 

Doch dieser Ansatz importiert mein Zertifikat als Intermediate Certificate Authorities während ich brauche um es als Trusted Root Certificate Authorities zu importieren. Ich möchte keinen Assistenten verwenden und kann mein Zertifikat nicht ändern.

Kann dieses Zertifikat als vertrauenswürdiges Stammverzeichnis importiert werden?

Gibt es in CryptUIWizImport eine Eigenschaft, um den Zertifikatstyp als vertrauenswürdigen Stamm festzulegen?

Dank in Fortschritte

Antwort

0

Wir sollten eine Batch-Datei Befehl aus dem Inneren des C++ Code ausführen:

#include "stdafx.h"; 
#include "windows.h" 
#include "Cryptuiapi.h" 
#include <iostream> 
#include <string> 
using namespace std; 

#pragma comment(lib,"Cryptui.lib") 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    char buffer[MAX_PATH]; 
    GetModuleFileNameA(NULL, buffer, MAX_PATH); 
    string::size_type pos = string(buffer).find_last_of("\\/"); 
    string myPath = string(buffer).substr(0,pos);  
    string myCommand = "certutil -addstore -f -enterprise -user root \""+myPath+"\\IRIPO CA.cer\""; 
    system(myCommand.c_str()); 
    return 0; 
} 

Beachten Sie, dass die certificate Datei neben der Datei exe gestellt werden sollte.