Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Eugene  
#1 Оставлено : 15 апреля 2008 г. 17:16:54(UTC)
Eugene

Статус: Новичок

Группы: Участники
Зарегистрирован: 31.03.2008(UTC)
Сообщений: 2
Откуда: Пермь

Добрый день!

Используется Крипто Про CSP 3.0 KC1.
Существует центр управления и контроля (ЦУК) и нцать клиентов. Для всех Уд. центром сформированы контейнеры закрытых ключей+сертификаты личные+сертификаты УЦ.

Успешно, с Вашей помощью, выполнили следующую задачу:
Реализована схема обмена информацией Подпись на клиенте (CryptSignMessage) -> Шифрование (CryptEncrypt) ==(передача)==> Расшифровка (CryptDecrypt) -> Проверка подписи (CryptVerifyMessageSignature).
При проверке подписи ручками дополнительно вытащили:
pSignerBack.pCertInfo.NotBefore(NotAfter)
и
CertGetNameStringA (pSignerBack,
2,
0,
nil,
@pszNameString,
128 );

Углубились...
Подскажите, пожалуйста:
1. Данная схема работает и при "просроченном" личном сертификате, и при отсутствии информации о поставщике сертификата (т.е. личный установлен, а сертификаты УЦ не установлены). Получается, функция CryptSignMessage такую проверку не осуществляет.
Можно ли, используя функции КриптоПро, программно вытаскивать эту информацию, чтобы, к примеру, запретить на пользователе шифрование-подпись, если сертификат ненадежен, или срок действия окончился.
Или это возможно только ручками, при проверке в ЦУКе: pSignerBack.pCertInfo.NotBefore(NotAfter) + сравнение с системной датой. Тогда как вытащить информацию по надежности сертификата (наличию у клиента не только личного сертификата, но и сертификатов УЦ)?

2. CertGetNameStringA выдает string-ом весь Subject с разделителем ',' или #13#10. Вид: "post@mail.ru, RU, Пермская, Пермь, Имя Организации, cert name...
В оснастке КриптоПро можно обнаружить, что поле Subject имеет атрибуты: E, C, S, L, O, CN, OID.
Вид такой: E=post@mail.ru, C=RU, S=Пермская, L=Пермь, O=Имя организации, CN=certname, OID.1.2.840.113549.1.9.2=INN
Насколько я понимаю, эти атрибуты стандартизованы.
Можно ли, и как вытаскивать не весь Subject стрингом, а только конкретный атрибут для проверки, например, только O или CN?

Спасибо.

Offline Kirill Sobolev  
#2 Оставлено : 15 апреля 2008 г. 18:08:41(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
1. Только ручками. Но можно не разбирать сертификаты а воспользоваться функциями построения цепочек - CertCreateCertificateChainEngine и CertGetCertificateChain
2. Можно. Надо декодировать Subject из блоба в структуру CERT_NAME_INFO при помощи CryptDecodeObject и затем воспользоваться функциями CertFindRDNAttr, CertRDNValueToStr.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.