Тема: Выбор сертификата подписи

Добрый день, коллеги!

Работаю на c# с библиотекой vcpia2.
Задача: реализовать конверт КБР-Н с подписями КА и ЗК. Задача успешно выполнена. Я задаю при инициализации VcertObject профиль. Для подписи, если я правильно понимаю, используется рабочий сертификат выбранного профиля из его справочника сертификатов. Соответственно КА и ЗК формируются на одном ключе. Сейчас выяснилось, что требуется два ключа: один для КА, другой для ЗК.

У меня в справочнике есть два сертификата. Один для КА, другой для ЗК. Один из них установлен как рабочий.
Список сертификатов я успешно получаю с помощью метода FindCertificates() и могу легко найти те, которые мне нужны.

Но встаёт вопрос, ответ на который я не нашёл в документации: могу ли я как-нибудь при подписи задать сертификат? Чтобы при формировании КА я установил один, а при формировании ЗК другой? Или быть может временно установить рабочим один сертификат, потом другой?

Заранее благодарен.

2

Re: Выбор сертификата подписи

Добрый день!

Задать сертификат при подписи нельзя, подпись выполняется на рабочем сертификате.
В Вашем случае нужно создать два профиля в справочнике сертификатов, один для КА, другой для ЗК. А в программе инициализировать два объекта VcertObject с указанием профилей КА и ЗК.

Re: Выбор сертификата подписи

Всем, день добрый!
Вопрос насчет подписи и проверки ЭС по третьему варианту защиты. Если кратко, в своем софте подписываю, т.е. проставляю ЗК и КА. Конечно для КА И ЗК используются разные справочники сертификатов. Проверяю, все хорошо работает в разных вариациях, получаю подписанные и проверенные xml-и. Но АРМ КБР-Н ругается на мои xml при проверке КА, до ЗК пока не дошли, думаю там будет тоже самое. Беру их xml, ругается моя проверка. Доступа к КБР-ам у меня нет, по крайней мере пока. Есть только скрины настроек, из которых вижу, что везде прописаны OID. Отсюда вопросы:
1. При вызове функций сигнатуры из своего ПО, для VerifyParam указываю OID через extKeyUsage, но не помогает. Флаги естественно нужные выставляю. Пробовал и без указания extKeyUsage.
2. mycert могу заполнять, а могу и нет. Я так понимаю, что если не заполняю, то используется рабочий сертификат справочника.  А если заполню то могу подписать другим  сертификатом, указав "Идентификатор ключа ЭП"?
3. При подписи для SignParam свойства extKeyUsage нет. Можно конечно пробовать указать OID-ы через PKI.Extension или PKI.Policy но этого еще не делал. Как правильно в приложении использовать эти OID-ы, и влияют ли они на подпись и проверку? Вроде если их не указать, то должно игнорировать область применения, но проверка не проходит.

4

Re: Выбор сертификата подписи

Добрый день!

1. Если в extKeyUsage в VerifyParam указаны ОИД-ы, то, при проверке подписи, сертификат, на котором выполнена ЭП, будет проверяться на наличие заданных ОИД-ов.
2,3. Задать сертификат при подписи нельзя, подпись выполняется на рабочем сертификате.

Re: Выбор сертификата подписи

alart, спасибо, но легче мне пока не стало. Получается делаю все правильно, а с КБР-Н не срастается.

alart пишет:

1. Если в extKeyUsage в VerifyParam указаны ОИД-ы, то, при проверке подписи, сертификат, на котором выполнена ЭП, будет проверяться на наличие заданных ОИД-ов.

1.1. Т.е. при проверке тоже берет рабочий сертификат?
1.2. Если в рабочем сертификате нет прописанного OID-а, какой сертификат возьмет тогда? А если в справочнике несколько сертификатов с заданным OID-ом? 
1.3. Поле info в VerifyParam должно быть установлено в Field_Subject ?

alart пишет:

2,3. Задать сертификат при подписи нельзя, подпись выполняется на рабочем сертификате.

2.1. При проверке тоже нельзя?
2.2. На что тогда влияет поле mycert  в объекте PKI.SignParam ?
2.3. Для чего нужны policies и extensions, которые есть и в объекте PKI.SignParam и в PKI.VerifyParam ?

P.S. Просьба не отвечать по два дня на вопросы, они вроде не такие сложные для тех, кто разрабатывал библиотеку.

Re: Выбор сертификата подписи

Виталий пишет:

1.3. Поле info в VerifyParam должно быть установлено в Field_Subject ?

Для чего нужно поле info уже разобрался.

7

Re: Выбор сертификата подписи

1.1 Нет, для проверки подписи используется сертификат, на котором эта подпись была выполнена.
1.2 Если в сертификате, на котором была выполнена подпись, отсутствует ОИД, указанный в VerifyParam, то будет выдана ошибка.

2.1 Нельзя.
2.2 Поле mycert используется при работе с КриптоСервером, его заполнять не нужно.
2.3 policies и extensions в SignParam отсутствуют. Если в VerifyParam указать policies, extensions или extKeyUsage, то будет выполнена проверка, содержит ли сертификат, на котором выполнена подпись, указанные ОИДы.

А есть код и описание ошибки, которую выдает АРМ КБР?

Re: Выбор сертификата подписи

alart, спасибо большое за ответы! Ошибка была стандартная - OLE error E0700019(Ошибка проверки ЭП). Но я разобрался из-за чего не срасталось, сейчас с проверкой КА все нормально, осталось только ЗК, но здесь еще нормализацию доделать и все думаю будет тоже хорошо.

alart пишет:

2.3 policies и extensions в SignParam отсутствуют

- да, действительно так, когда писал, поторопился,  не на ту страницу в документации глянул.

Re: Выбор сертификата подписи

alart, и еще заодно вопрос для общего понимания - методы EncryptMem/DecryptMem, здесь уже получается мы задаем сертификат для шифрования через mycert, судя по примерам?

10

Re: Выбор сертификата подписи

Шифрование и расшифрование выполняется на рабочем сертификате. В документации для методов EncryptMem и DecryptMem приведены примеры работы с КриптоСервером.