Я пытаюсь создать сертификат для тестирования в два этапа. Во-первых, я создаю самозаверяющий сертификат, который устанавливает мой собственный центр сертификации (CA). Во-вторых, я использую этот корневой сертификат для подписи сертификата тестового сервера, который будет помещен в хранилище личных сертификатов. Я открываю административную командную строку и введите следующее:Установите самозаверяющий сертификат в личный магазин из файла .cer с помощью C++
Шаг 1: MakeCert -pe -n "CN = TestCA" -b 01/01/2015 -e 01/01/2020 -ss мой -SR CurrentUser -a sha256 -sky подписи -len 2048 -r "TestCA.cer"
Шаг 2: MakeCert -pe -n "CN = локальный" -b 01/01/2015 -e 01/01/2020 -eku 1.3.6.1.5.5.7.3.1 -in «TestCA» -ий мой -ий текущий пользователь -ss my -sr currentuser -a sha256 -sky exchange -sp «Microsoft RSA SChannel Cryptographic Provider» -sy 12 -лень 2048 "Localhost.cer"
Следуя этим шагам, все работает нормально. После этого я пытаюсь установить эти сертификаты с помощью приложения C++. Кажется, все хорошо, когда я проверяю эти сертификаты в certmgr.msc, однако клиент с тех пор всегда не может подключиться к серверу. После удаления сертификата «localhost» из хранилища личных сертификатов, повторите шаг 2 с помощью MakeCert.exe. Клиент может успешно подключиться к серверу. Может быть, есть что-то важное, что мне не хватало. Если кто-нибудь это знает, пожалуйста, дайте мне несколько советов. Кстати, мой клиент и сервер работают на одном компьютере. Мои коды показаны ниже.
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());
}
Любая помощь была бы принята с благодарностью.
Климент