| ||||
| ||||
Добрый день. Хотим получать запрос на сертификат на дискете и потом на дискете отдавать клиенту его готовый сертификат и серт. центра 1. Создаю файл запроса: pEnroll->put_KeySpec(AT_KEYEXCHANGE); // используем только одну пару ключей pEnroll->put_UseExistingKeySet( FALSE ); AnsiToBSTR(szOID_PKIX_KP_CLIENT_AUTH, bstrOID); pEnroll->createFilePKCS10( bstrDN, bstrOID, bstrRequestFile ); 2. submit его в СА с помощью certreq.exe 3. Выпускаем сертификат в MS CA 4. Открываю его и копирую в файл через certificate export wizard 5. Устанавливаю сертификат с помощью панели КриптоПро (Install private certificate) 6. При посмотре сертификата на дискете (View certificates in container) получаю : No encryption public key certificate in the private key container No certificates in private key container Что я делаю не так? И еще. В документации написано: "срок действия секретного ключа - до 1 года 3 месяца; срок действия сертификата открытого ключа - не больше 6 лет" Почему такая разница? Ведь секретный и открытый ключи генерятся одновременно и существуют только как пара? Спасибо | ||||
Ответы: | ||||
| ||||
Почти все правильно, за исключением одного. Когда в закрытый ключ пользователя попал сертификат. Это действо у вас полностью отсутствует. Когда сделали pEnroll->createFilePKCS10 запрос на сертификат сохранился в реестре у текущего пользователя у в нем есть ссылка на имя онтейнера закрытого ключа. Когда вы получили сертификат от центра в нем никаких ссылок на ключ нет. Ссылку на ключ делает метод xenroll.AcceptPKCS7. Вы его нигде не пользуете. Выход: 1. Установить сертификат в ключ через AcceptPKCS7 (при этом лучше поставить флаг DeleteRequestCert = FALSE. 2. Устанавливать сертификат не из ключа (в 1.2) есть кнопка "Установить личный сертификат"). 3. Установить сертификат в справочник а ссылку сделать через CryptoAPI (файл property.c в тесте). Срок действия закрытого ключа всегда меньше открытого. И они не существующт как пара. Не имея закрытого, нельзя подписывать, но проверять подпись можно только по открытому. Срок действия закрытого ключа ограничивается по причине возможной неявной компрометации. Пользователи - люди однако. Могут ключ забыть вынуть или еще что. | ||||
| ||||
Я вот чего не понимаю: по кнопке "Install private certificate" CryptoPro успешно устанавливает сертификат в хранилище Personal в реестре. (даже не на том компьютере, где генерился запрос на сертификат. при этом,насколько я понимаю, прописывается линк на ключ, лежащий в контейнере на дискете) Но при просмотре сертификата на дискете (кнопка View certificates in container) получаем сообщения: No encryption public key certificate in the private key container No certificates in private key container Может быть сертификат нужно установить еще в конейнер на дискете? | ||||
| ||||
Мы ничего нового не придумывали. AcceptPKCS7 вызывает функцию установки сертификата в ключевой контейнер у любого криптопровайдера. Но это сработает только на том компьютере, где был сделан запрос. На том, где запроса нет этот метод не сработает, но в скриптах от центра сертификации написано: AcceptPKCS7 Если ошибка, то InstallPKCS7 И все прекрасно срабатывает, но в последнем случает никаких ссылок на ключ не делается и в контейнер сертификат не прописывается. | ||||