09.04.2002 14:10:27Снова генерация и установка сертификата (1.2) Ответов: 3
ak
Добрый день.

Хотим получать запрос на сертификат на дискете
и потом на дискете отдавать клиенту его готовый сертификат и серт. центра

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 лет"
Почему такая разница? Ведь секретный и открытый ключи генерятся одновременно и существуют только как пара?
Спасибо
 
Ответы:
09.04.2002 14:32:14kure
Почти все правильно, за исключением одного.
Когда в закрытый ключ пользователя попал сертификат.
Это действо у вас полностью отсутствует.
Когда сделали pEnroll->createFilePKCS10 запрос на сертификат сохранился в реестре у текущего пользователя у в нем есть ссылка на имя онтейнера закрытого ключа.
Когда вы получили сертификат от центра в нем никаких ссылок на ключ нет.
Ссылку на ключ делает метод xenroll.AcceptPKCS7.
Вы его нигде не пользуете.
Выход:
1. Установить сертификат в ключ через AcceptPKCS7 (при этом лучше поставить флаг DeleteRequestCert = FALSE.
2. Устанавливать сертификат не из ключа (в 1.2) есть кнопка "Установить личный сертификат").
3. Установить сертификат в справочник а ссылку сделать через CryptoAPI (файл property.c в тесте).

Срок действия закрытого ключа всегда меньше открытого. И они не существующт как пара. Не имея закрытого, нельзя подписывать, но проверять подпись можно только по открытому.
Срок действия закрытого ключа ограничивается по причине возможной неявной компрометации. Пользователи - люди однако. Могут ключ забыть вынуть или еще что.

09.04.2002 16:45:37ak
Я вот чего не понимаю:
по кнопке "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

Может быть сертификат нужно установить еще в конейнер на дискете?
09.04.2002 17:49:13kure
Мы ничего нового не придумывали.
AcceptPKCS7 вызывает функцию установки сертификата в ключевой контейнер у любого криптопровайдера. Но это сработает только на том компьютере, где был сделан запрос.
На том, где запроса нет этот метод не сработает, но в скриптах от центра сертификации написано:
AcceptPKCS7
Если ошибка, то
InstallPKCS7
И все прекрасно срабатывает, но в последнем случает никаких ссылок на ключ не делается и в контейнер сертификат не прописывается.