26.01.2005 18:26:18СЕРТИФИКАТ СОДЕРЖИТ НЕДЕЙСТВИТЕЛЬНУЮ ЦИФРОВУЮ ПОДПИСЬ Ответов: 12
Дробязко Алексей
Здравствуйте.
У меня установлен:
- CSP CryptoPro 2.0
- КриптоАРМ
С помощью тестового центра сертификации я получил на свой комп. тестовый сертификат с откр. и закр. ключем с моими данными.
Кроме того, я установил сертификат центра сертификации(самоподписной). И что же я вижу в личном хранилище сертификатов(а точнее в свойствах полученого тестового сертифика)? В состоянии сертификата написано: "Этот сертификат содержит недействительную цифровую подпись". Не подскажите в чем дело? Заранее благодарен за ответ.
 
Ответы:
26.01.2005 18:58:28uri
Вариант 1:
Проверьте в окне свойств Вашего тестового сертификата отображаемую длину открытого ключа. Если она = 0 bits, то это значит, что у Вас не все в порядке с СКЗИ "КриптоПро CSP". Скорее всего нарушена целостность его ПО (например, вирус покоцал)
Вариант 2: В раздел "Доверенные корневые центры сертификации" хранилища сертификатов (локального компьютера и/или текущего пользователя) установлены два разных самоподписанных сертификата тестового центра сертификации с одинаковыми значениями атрибутов поля "Субъект". В этом случае удалите лишний (чащее всего такой остается от предыдущей установки службы СА).
27.01.2005 14:52:09Дробязко Алексей
Здравствуйте. Спасибо, помог 2-ой вариант. Только ключ нулевой длины был не у тестового сертификата, а у самоподписанного сертификата Вашего центра. Я перегрузил машину(т.к. этого не сделал после инсталяции криптопровайдера), и все заработало.
1. Но возник еще вопрос. С помощью КриптоАРМа я сгенерировал свой самоподписной сертификат и положил его в хранилище доверенных корневых центров сертификации. У Вас на сайте лежит ссылка на статью Константина Виноградова "Делфи и КриптоАПИ для защиты интересов", там есть программа генерации сертификата. С помощью ее я сгенерировал свой сертификат и указал, что его издатель - мой самоподписной сертификат, т.е. я свой сертификат подписал своим же корневым сертификатом.
Но в свойствах моего сертификата я вижу уже привычное "СЕРТИФИКАТ СОДЕРЖИТ НЕДЕЙСТВИТЕЛЬНУЮ ЦИФРОВУЮ ПОДПИСЬ". То
2. И вот мне не совсем ясна(простите за назойливость) технология(или принципы работы с сертификатом). Вот я получил с Вашего сайта тестовый сертификат. А в нем - открытый и закрытый ключ. С помощью этого сертификата и КриптоАРМа я могу подписывать документы и их отсылать адресату. Адресату для проверки подлинности моей подписи под этими документами, необходимо воспользоваться моим открытым ключем. А как же я отошлю адресату мой откр. ключ, если он идет вместе с закрытым в одном сертификате?
Заранее благодарю за ответ.
27.01.2005 15:08:24uri
1. Неправильно. КриптоАРМ делает самоподписанный сертификат, но это НЕ СЕРТИФИКАТ ЦС, ибо в нем нет соответствующего расширения. Если програ. которую Вы взяли по ссылке, позволила изготовить сертификат. подписанный с использованием этого "неправильного" сертификата, то и результат будет неправильный. Вообщем, не тем путем идете.

2. Нет, Вы не правы. закрытого ключа в сертификате НЕТ. Он в ключевом носителей. А в сертификате ТОЛЬКО открытый ключ.
27.01.2005 17:46:33Дробязко Алексей
- выходит, что сертификат также содержит информацию о том, где находится соответствующий закр. ключ? Т.е. если закр. ключ в контейнере - в сертификате пишется, что в контейнере(я утрирую); если закр. ключ - на гибком диске - в сертификате пишется, что в на гибком диске; если сертификат только для проверки подленности чего-то - то ничего в серт-те не пишется?
- дело в том, что я хотел с помощью криптопровайдера Crypto Pro и самодельной программы, о которой говорилось выше, создать root-ый сертификат. С помощью него подписывать все остальные сертификаты, созданные с пом. этой проги и криптопровайдера. Т.е. я хотел для небольшого колличества пользователей в своей сети создать простой микро-центр сертификации. Я так понял, что создание своего самоподписного сертификата, который бы я использовал в качестве сертификата своего маленького сертификационного центра возможно, только необходимо включить в сертификат дополнительную информацию о том, что это сертификат центра, которому я доверяю. Я правильно понял?
27.01.2005 18:00:30uri
сертификат НЕ содержит информацию о том, где находится соответствующий закрытый ключ. Информация о размещении закрытого ключа находится в так называемой связке. Это структура данных, заносимая в реестр компа при выполнении специальной функции установки сертификата в хранилище сертификатов в форме цифрового удостоверения. Т.о. если Вы установили сертификат в хранилище в форме цифрового удостоверения, то при просмотре свойств установленного сертификата на первой вкладке ("Общие") пишется, что "есть закрытый ключ, соответствующий этому сертификату". Но это не значит, что закрытый ключ находится внутри сертификата, а означает, что связка с закрытым ключом создана в системном реестре.

Что касается рутового сертификата ЦС... Немного неправильно Вы сформулировали. Не "необходимо включить в сертификат дополнительную информацию о том, что это сертификат центра, которому я доверяю.", а "также необходимо включить в сертификат дополнительную информацию о том, что это сертификат центра". Никакого доверения нет :-)

Создание своего ЦС (пусть даже "мини") - задача не из легких и требует специальных знаний, которые Вы из нашего форума не почерпнете.
28.01.2005 12:15:18Дробязко Алексей
Здравствуйте. Это опять я :))). Когда я говорил про мини-ЦС, то понимал связку клиент-сервер, в которой на сервере выполнялась бы генерация закр. ключа и сертификата откр. ключа и установка их клиенту, проверка ЭЦП документов, присланных от клиента. Клиент же мог бы только подписывать документы.
Я так понимаю, что для написания этого комплекса программ необходимо знание CryptoAPI?
Подскажите, пожалуйста, где можно более детально узнать о том, что связано с программированием ЦС, УС, подписями, проверкой подписей. Возможно зарубежные форумы...
Еще раз прошу прощения за мои докучания.
28.01.2005 13:23:02uri
Начните со ссылок на странице http://www.cryptopro.ru/CryptoPro/pki/pki.asp Правда первая ссылка не работает, поэтому придеться найти Вам самим описание MS СА.
Но не спешите приступать к программированию, сначала спроектируйте. А вот тут и нужны специальные знания о которых я Вам писал ранее. Пример одной из Ваших ошибок в рассуждении - это то, что Ваш "сервер" генерит ключи клиенту, а клиент только подписывает. Клиент это не программа, а человек! Он пользуется ключами, сертификатом ключа подписи и программным инструментом для формирования ЭЦП и проверки ЭЦП. Т.е. ему нужны КЛЮЧИ!!! Как он их получит?
Советую использовать готовые решения, сделанные профессионалами, и не изобретайте велосипед. Иначе колеса могут получиться квадратными :-) Прошу не обижаться, а примите как рекомендацию.
28.01.2005 13:51:43Дробязко Алексей
Дело в том, что я делаю именно веб-интерфейс для получения сертификатов(т.е. как от сервера передать сертификат клиенту я не большое представление имею). С помощью исходников программы "Крипто АПИ и Делфи ... " я имею представление(но не глубокое :))), как генерировать сертификат. Проблема у меня сейчас в том, что я не знаю, как сгенерировать самому закр. ключ и сертификат центра сертификации(т.е. чтобы сертификат таким бы воспринимался корректно). Обычный сертификат с помощью этой проги генерируется. Я так понимаю, что необходимо создавать раширенный запрос на получение сертификата. Быть может у Вас есть исходник такой процедуры...
Я очень признателен Вам за помощь. Это единственное место, которое я нашел, где можно получить информацию по этому вопросу...
28.01.2005 13:57:11uri
Мы в своем решении используем службу MS Certificate Authority. Почему Вы ее не хотите использовать?! Зачем писать свое? А вот к этой службе и напишите веб-интерфейс для получения сертификатов. Кстати, пример написания такого интерфейса тоже есть, в самой же этой службе Certificate Authority :-) При ее установке на сервере в соответствующий виртуальный каталог MS IIS устанавливается набор ASP скриптов, которые реализуют веб-интерфейс. Посмотрите, там все есть: генерация ключей на стороне клиента, формирование запроса на сертификат, передача запроса на сервер в ЦС, получение и установка выпущенного сертификата.
28.01.2005 14:53:04Дробязко Алексей
Почему я хотел сам писать CA? Потому что я не знал, что в MS Certificate Authority есть готовый веб-интерфейс(я еще его не устанавливал). К тому же у меня сайт на пхп под апачем и расположен не на машине под Windows 2000 Server(т.е сервер-отдельно, сайт-отдельно). Можно ли будет все это собрать?
И проверка ЭЦП на моем веб-сервере должна осуществлятся как-бы между прочим. Т.е. я не могу для проверки ЭЦП вызывать какой-то скрипт MS Certificate Authority. Для меня наиболее удобно, чтобы я вызывал делфи программу, которой я бы передал какие-то вх. данные, она бы отработала и выдала бы мне "Подпись верна" или "Подпись неверна". И в зависимости от этого пхп-скрипт отрабатывал. С использовантем же функций проверки ЭЦП через скрипт MS CA, мне придется его вызывать, потом переходить обратно на свою страничку. Т.е. как минимум для проверки ЭЦП мне придется писать самому прогу. А вот для выдачи сертификата я возможно смогу воспользоваться Вашим совет. Большое спасибо.
31.01.2005 17:31:20Юрий
А что значит "..должен проверять сертификаты как-бы между прочим"? То есть сервер сам должен обнаруживать сертификат клиента? Тогда чем скажем SSL не подходит?
01.02.2005 17:16:43Дробязко Алексей Борисович
Я имел в виду, что проверка ЭЦП должна проверятся компактной программой, которую я буду вызывать из пхп-скрипта. Результат ее работы может быть вывод в файл результата проверки: "Подпись верна" или "Подпись неверна". Ни больше ни меньше. Т.е. вызов для проверки ЭЦП средств MS CA совершенно не допустимо.
Я уже начал разбираться с примером на Си на Вашем сайте. Нет ли у Вас примера создания и проверки ЭЦП на Делфи?
Спасибо.