08.04.2005 22:14:49CSP 2089 XP SP2 и сертификат ЦС от CSP 1.1 Ответов: 5
Vlad Stepanov
Секретный ключ/сертификат ЦС работавшего при CSP 1.1.129.1, перенес в CSP 2.2087 на Windows 2000 по Вашим инструкциям. Все хорошо. Из 1.1 и из 2.0 можем ходить на сайт (расположенный на этой же тестовой машине) по SSL и издавать сертификаты с помощью данного ЦС (используем пока только ГОСТ 94)

Но одна из машин - XP SP 2 - войти по SSL не может. Проблема не исчезла с установкой CSP 2.2089 на нее: сертификат веб-сервера не проверяется с помощью сертификата ЦС (пишет - подпись сертификата не верна)
Сделал ЦС с ключами, сгенерированными в CSP 2.0 - на такую машину XP SP 2 входит нормально

Можете что-то посоветовать?
 
Ответы:
11.04.2005 10:00:41Василий
Т.е. на машине с WinXP SP2 установлен сертификат ЦС в Доверенные корневые... текущего пользователя и на этой же машине не проверяется подпись сертификата некоторого веб-сервера?
11.04.2005 15:57:30Vlad Stepanov
Именно так - на XP SP2 утановил:
- сертификат вышеописанной ЦС - в доверенные.. пользователя
- сертификат, изданный с помощью данной ЦС (например, сертификат, созданный для веб-сервера; или просто издал некоторый сертификат на ЦС); и вот когда просматриваю этот сертификат в XP SP2, то в 3-й закладке написано, что подпись сертификата не верна, хотя на других машинах все нормально
11.04.2005 22:08:34stepanov@sftcomp.ru
ПРОШУ ПРОЩЕНИЯ, В ТЕСТАХ НА XP SP2 ВЗЯЛ НЕ ТОТ (СТАРУЮ ВЕРСИЮ, НО ОЧЕНЬ ПОХОЖУЮ) СЕРТИФИКАТА ЦС. С актуальным сертификатом ЦС двухсторонняя аутентификация заработала.

Но возникла другая проблема: для ключей, сгенерированных в 1.1, в 2.2089 (и в WinXP, и в Win2000) возникает ошибка импорта симметричного ключа. Импорт делаю следующим образом:
- CryptAcquireContext
- SelfKeys <= CryptGetUserKey(..)
- CryptImportPublicKeyInfo - импортирую публичный ключ другой стороны "в формате сертификата"
- CryptExportKey - экспортирую публичный ключ другой стороны в "обычный" формат
- CryptImportKey(..., SelfKeys..) - импортирую ключ другой стороны в "обычном" формате и формирую совместный ключ
- CryptImportKey - импортирую (расшифровываю с помощью совместного) симметричный ключ.
Получаю ошибку "Плохие данные" (0x80090005).

В 1.1 данный код работает.

Для проверки сделал отдельную утилиту, которая генерирует две пары ключей (в реестр), шифрует данные на одних и расшифровывает на других. Провел тесты:
- сгенерил ключи, зашифровал, расшифровал в 1.1 - все хорошо
- сгенерил ключи, зашифровал, расшифровал в 2.0 - все хорошо
- сгенерил ключи, зашифровал в 1.1; перенес фрагменты ключей в реестре на другую машину с 1.1 (поправив SID пользователя), расшифровал - все хорошо
- сгенерил ключи, зашифровал в 1.1; перенес фрагменты ключей в реестре на другую машину с 2.0 (2089) (поправив SID пользователя), расшифровал - ОШИБКА импорта симметричного ключа 0x80090005 "Плохие данные"
- сгенерил ключи, зашифровал в 2.0; перенес фрагменты ключей в реестре на другую машину с 2.0 (попробовал 2089 и 2046) (поправив SID пользователя), расшифровал - все хорошо
- сгенерил ключи в 1.1, зашифровал (с генерацией симметричного ключа) в 2.0; расшифровал - ВСЕ ОК (!)
- сгенерил ключи в 1.1, зашифровал (с генерацией симметричного ключа) в 2.0; расшифровал в 1.1 - ошибка 0x80009000A Invalid type specified


Есть какие-то идеи?

P.S. Чем отличаются ключи 1.1 и 2.0? (вы как-то говорили, есть некая возможность конвертации ключей 2.0 в 1.1 и можете прислать доку)

Спасибо
12.04.2005 10:07:02Василий
Возможная причина в том, что по умолчанию алгоритм ключа парной связи в 1.1 - CALG_SIMPLE_EXPORT, а в 2.0 - CALG_PRO_EXPORT. Попробуйте, после получения ключа парной связи (из блоба, сделанного на 1.1 на машине с CSP 2.0) дополнительно задать алгоритм этого ключа в CALG_SIMPLE_EXPORT (ф-я CryptSetKeyParam(..KP_ALGID..) )
12.04.2005 15:45:10Vlad Stepanov
Заработало - причем как раз когда задал "CALG_PRO_EXPORT".
Возможно, или в Вашем ответе, или в хидере:
#define ALG_SID_PRO_EXP 31
#define ALG_SID_SIMPLE_EXP 32
"SIMPLE" и "PRO" перепутаны местами?
(если да, то уточните, пожалуйста, где - в хидере или в ответе? любопытно)

P.S. Может быть, с тем же сталкивались в вопросе
http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=1503
(там жаловались, что при задании "CALG_SIMPLE_EXPORT" в 2.0
OID тот же, что и при умолчательном запуске)