從證書庫匯出CER格式的證書

2021-09-09 05:57:46 字數 4463 閱讀 8279

直接上**

// 證書提取.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include#include // link with the crypt32.lib file.

#pragma comment(lib, "crypt32")

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

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

#define my_encoding_type (pkcs_7_asn_encoding | x509_asn_encoding)

hcertstore hsystemstoreca; // 系統證書庫控制代碼 ca

hcertstore hsystemstoremy; //

hcertstore hsystemstoreroot;

hcertstore hsystemstorespc;

hcertstore hmemorystore;

hcertstore hcollectionstore; // 集合證書庫控制代碼

pccert_context pdesiredcert = null; // 證書控制代碼

char psznamestring[256];//證書名字

handle hstorefilehandle;

char s1[100]; // 證書路徑

int count = 0, index;

//錯誤提示

void handleerror(char *s)

//迴圈列印匯出證書

void xunhuandayin(hcertstore hsystemstore, char* pzname)

cryptui_wiz_export_info exportinfo;

cryptui_wiz_export_certcontext_info contextinfo;

zeromemory(&exportinfo, sizeof(cryptui_wiz_export_info));

zeromemory(&contextinfo, sizeof(cryptui_wiz_export_certcontext_info));

exportinfo.dwsize = sizeof(cryptui_wiz_export_info);

//要匯出儲存後的檔案路徑

memset(s1, 0, 100);

count++;

index = count;

strcpy_s(s1, pzname);

strcat_s(s1, "\\");

sprintf_s(s1, "%s%ld.cer", s1, index);

cstring cerpath;

cerpath = s1;

uses_conversion;

lpwstr pwstr = new wchar_t[cerpath.getlength() + 1];

wcscpy(pwstr, t2w((lpctstr)cerpath));

exportinfo.pwszexportfilename = pwstr;

exportinfo.dwsubjectchoice = cryptui_wiz_export_cert_context;

//要匯出的證書上下文

exportinfo.pcertcontext = pdesiredcert;

contextinfo.dwsize = sizeof(cryptui_wiz_export_certcontext_info);

//以base64的方式匯出

contextinfo.dwexportformat = cryptui_wiz_export_format_base64;

contextinfo.fexportchain = false;

contextinfo.fexportprivatekeys = false;

cryptuiwizexport(cryptui_wiz_no_ui, 0, null, &exportinfo, &contextinfo);

} certclosestore(hsystemstore, cert_close_store_check_flag);

count = 0;

}int _tmain(int argc, _tchar* ar**)

; if (ar**[1] == null)

else

if (createdirectory(szdirname, null)) //判斷是否存在,否則建立

char szdirname1[max_path] = ;

strcpy_s(szdirname1, szdirname);

strcat_s(szdirname1, "\\cer");

if (createdirectory(szdirname1, null)) //判斷是否存在,否則建立

char szdirname2[max_path] = ;

strcpy_s(szdirname2, szdirname);

strcat_s(szdirname2, "\\cer");

strcat_s(szdirname2, "\\my");

if (createdirectory(szdirname2, null)) //判斷是否存在,否則建立

char szdirname3[max_path] = ;

strcpy_s(szdirname3, szdirname);

strcat_s(szdirname3, "\\cer");

strcat_s(szdirname3, "\\ca");

if (createdirectory(szdirname3, null)) //判斷是否存在,否則建立

char szdirname4[max_path] = ;

strcpy_s(szdirname4, szdirname);

strcat_s(szdirname4, "\\cer");

strcat_s(szdirname4, "\\root");

if (createdirectory(szdirname4, null)) //判斷是否存在,否則建立

char szdirname5[max_path] = ;

strcpy_s(szdirname5, szdirname);

strcat_s(szdirname5, "\\cer");

strcat_s(szdirname5, "\\spc");

if (createdirectory(szdirname5, null)) //判斷是否存在,否則建立

// 開啟系統證書庫 「my」

if (hsystemstoremy = certopenstore(cert_store_prov_system, 0, null, cert_system_store_current_user, l"my"))

else

xunhuandayin(hsystemstoremy, szdirname2);

// 開啟系統證書庫 「ca」

if (hsystemstoreca = certopenstore(cert_store_prov_system, 0, null,cert_system_store_current_user, l"ca"))

else

xunhuandayin(hsystemstoreca, szdirname3);

// 開啟系統證書庫 「root」

if (hsystemstoreroot = certopenstore(cert_store_prov_system, 0, null, cert_system_store_current_user, l"root"))

else

xunhuandayin(hsystemstoreroot, szdirname4);

// 開啟系統證書庫 「spc」

if (hsystemstorespc = certopenstore(cert_store_prov_system, 0, null, cert_system_store_current_user, l"spc"))

else

xunhuandayin(hsystemstorespc, szdirname5);

// 釋放記憶體

if (pdesiredcert)

certfreecertificatecontext(pdesiredcert);

if (hmemorystore)

certclosestore(

hmemorystore,

cert_close_store_check_flag);

system("pause");

return 0;

}

匯出證書Cer檔案為Pem格式的步驟

1 先導出push services的證書,比如我們命名為 magic cert.p12 注意匯出時會讓你輸入密碼。2 再匯出push services證書的金鑰 private key 比如我們命名為 magic key.p12 5 p12檔案轉換為pem檔案。1 將兩個p12檔案分別轉換為pem...

證書庫中證書與金鑰容器的關聯

證書的兩種形式 1 帶私鑰的證書,即p12格式證書 字尾為.pfx 2 不帶私鑰的證書,有多種格式,通常我們使用的是cer格式證書 字尾為.cer 當我們安裝.pfx格式證書時,windows的安裝程式會為我們生成乙個唯一的金鑰容器 金鑰容器名為guid格式 並把證書中的私鑰儲存在金鑰容器中,然後把...

rsa從cer證書中拿公鑰進行加密

起初,讀召輝給的cer證書的時候,seccertificatecreatewithdata 總是返回為nil,原因是因為這個證書是伺服器自己生成的,不是正規的ca機構頒發的,蘋果安全性要求是很高的,所以這個讀不出來,直接導致後面的崩潰。後來折騰了半天,比如直接從證書裡面匯出字串作為公鑰,也不行,安卓...