| ||||
| ||||
Секретный ключ/сертификат ЦС работавшего при 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 входит нормально Можете что-то посоветовать? | ||||
Ответы: | ||||
| ||||
Т.е. на машине с WinXP SP2 установлен сертификат ЦС в Доверенные корневые... текущего пользователя и на этой же машине не проверяется подпись сертификата некоторого веб-сервера? | ||||
| ||||
Именно так - на XP SP2 утановил: - сертификат вышеописанной ЦС - в доверенные.. пользователя - сертификат, изданный с помощью данной ЦС (например, сертификат, созданный для веб-сервера; или просто издал некоторый сертификат на ЦС); и вот когда просматриваю этот сертификат в XP SP2, то в 3-й закладке написано, что подпись сертификата не верна, хотя на других машинах все нормально | ||||
| ||||
ПРОШУ ПРОЩЕНИЯ, В ТЕСТАХ НА 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 и можете прислать доку) Спасибо | ||||
| ||||
Возможная причина в том, что по умолчанию алгоритм ключа парной связи в 1.1 - CALG_SIMPLE_EXPORT, а в 2.0 - CALG_PRO_EXPORT. Попробуйте, после получения ключа парной связи (из блоба, сделанного на 1.1 на машине с CSP 2.0) дополнительно задать алгоритм этого ключа в CALG_SIMPLE_EXPORT (ф-я CryptSetKeyParam(..KP_ALGID..) ) | ||||
| ||||
Заработало - причем как раз когда задал "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 тот же, что и при умолчательном запуске) | ||||