我嘗試通過兩個步驟創建用於測試目的的證書。首先,我創建一個自簽名證書,建立我自己的證書頒發機構(CA)。其次,我使用該根證書籤署將放置在個人證書存儲中的測試服務器證書。我打開管理命令提示符,然後輸入以下內容:使用C++從.cer文件安裝自簽名證書到個人存儲
第1步: MakeCert -pe -n 「CN = TestCA」 -b 2015年1月1日-e 2020年1月1日-ss我-sr currentuser -a SHA256簽名-sky 2048 -len -R 「TestCA.cer」
步驟2: MakeCert -pe -n 「CN = localhost」 的2015年1月1日-b -e 01/01/2020 -eku 1.3.6.1.5.5.7.3.1 -in「TestCA」-is my -ir currentuser -ss my -sr currentuser -a sha256 -sky exchange -sp「Microsoft RSA SChannel Cryptographic Provider」-sy 12 -len 2048 「Localhost.cer」
遵循這些步驟,一切正常。之後,我嘗試通過C++應用程序安裝這些證書。當我在certmgr.msc中檢查這些證書時似乎沒有問題,但是從那以後,客戶端始終無法連接到服務器。從個人證書存儲中刪除證書「localhost」後,再次使用MakeCert.exe執行步驟2。客戶端可以成功連接到服務器。也許有一些重要的是我錯過了。如果有人知道,請給我一些建議。順便說一下,我的客戶端和服務器在同一臺計算機上運行。我的代碼如下所示。
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());
}
任何幫助將不勝感激。
Clement