使用CryptUIWizImport自动导入证书作为C++的受信任根

import a certificate using CryptUIWizImport automatically as a trusted root with C++

本文关键字:C++ 信任 CryptUIWizImport 导入 证书 使用      更新时间:2023-10-16

我使用以下代码将证书作为受信任的根导入:

#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%xn”, GetLastError());    
    }
    return 0;
}

但是,这种方法将我的证书作为Intermediate Certificate Authorities导入,而我需要将其作为Trusted Root Certificate Authorities导入。我不想使用任何向导方法,也不能更改我的证书。

是否可以将此证书作为受信任的根导入?

CryptUIWizImport中是否有任何属性可以将证书类型设置为受信任的根?

感谢预付款

我们应该从C++代码内部执行一个批处理文件命令:

#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;
}

请注意,certificate文件应该放在exe文件旁边。