2017-02-22 73 views
1

我嘗試通過兩個步驟創建用於測試目的的證書。首先,我創建一個自簽名證書,建立我自己的證書頒發機構(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

回答

0

我發現了MakeCert和我的應用程序之間的區別。在通過MakeCert安裝後,我打開了證書對話框的常規選項卡,然後發現有一個字符串「您有一個與此證書相對應的私鑰,但使用我的應用程序時,對話框中沒有字符串,我認爲我已經錯過了安裝過程中的一些步驟。如果有誰知道,請給我一些建議。

感謝。

克萊門特