直接上**
// 證書提取.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機構頒發的,蘋果安全性要求是很高的,所以這個讀不出來,直接導致後面的崩潰。後來折騰了半天,比如直接從證書裡面匯出字串作為公鑰,也不行,安卓...