Проверка действительности ЭЦП
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2

ТЕМА: Проверка действительности ЭЦП

Проверка действительности ЭЦП 3 года, 4 мес. назад #2214

  • Dallas
  • Новый участник
  • Постов: 7
  • Репутация: 0
Как указано в документе:
Правила проверки электронной цифровой подписи и регистрационного свидетельства пользователей Национального удостоверяющего центра Республики Казахстан

Дабы подтвердить действительность ЭЦП необходимо провести 7 видов проверок (6 обязательных + 1 необязательная)

На данном этапе я смог разобраться с некоторыми проверками, но все еще остаются непонятые моменты. Хотел бы изложить методы которые я использую при каждой проверке.

Использую библиотеку CC(Kalkan) (C#)

Проверка 1. Проверка подписи
Я подписываю XML данные на стороне клиента и отправляю их на сервер для проверки. Для проверки подписи использую метод verifyXMLbytes
Пример из SDK с методом signverifyXMLstring() возвращает почему то всегда -1 (ошибка)
byte[] xmlBytesOut = xmlEx.signXMLbytes(xmlBytesIn, "..\\..\\pkcs12\\gost_deist.p12", "123456", ""); ;

if (xmlBytesOut.Length > 0)
{
	string xmlSigned = Encoding.UTF8.GetString(xmlBytesOut);
	Console.WriteLine("signXMLbytes SUCCESS.");
	Console.WriteLine(xmlSigned);
}

//verifyXMLbytes return int (0 - signature is BAD; 1 - signature is OK; -1 - error)
string[] sCertCA = new string[2];
sCertCA[0] = "..\\..\\ca_cert\\knca_root.cer";
sCertCA[1] = "..\\..\\ca_cert\\rca_gost.cer";
res = xmlEx.verifyXMLbytes(xmlBytesOut, sCertCA);
if (res == 1)
{
	Console.WriteLine("verifyXMLbytes SUCCESS.");
}


Есть ли пример для проверки подписи подписанные сертификатами выданные НУЦ 1.0 и НУЦ 2.0 ?


Проверка 2. Проверка цепочки сертификатов
Во первых проверяю срок годности сертификатов КУЦ и НУЦ, а после проверяю цепочку сертификатов

Для проверки цепочки сертификатов GOST использую следующее:
[new_NCA_GOST.cer] > [new_NCA_GOST.cer] > [сертификат пользователя] - для старых сертификатов выданных НУЦ 1.0
[root_gost.cer] > [pki_gost.cer](находится в SDK) > [сертификат пользователя] - для новых тестовых сертификатов выданных НУЦ 2.0
[root_gost.cer] > [pki_gost.cer](с сайта pki.gov.kz) > [сертификат пользователя] - для новых боевых сертификатов выданных НУЦ 2.0


Проверка 3. Проверка срока действия регистрационного свидетельства
Для проверки срока проверяю NotAfter и NotBefore относительно времени на сервере


Проверка 4. Проверка по OCSP или CRL (BASE + DELTA)
Сначала проверяю через OCSP, если сервис не доступен то по CRL(проверка сроков годности CRL'ov а потом по CRL'am)
BIO bcertca_oldNCA = BIO.File(@"...\ca_cert\НУЦ 1.0\NCA_GOST.der", "rb");
X509Certificate certca_oldNCA = X509Certificate.FromDER(bcertca_oldNCA);
int res = cert.CheckOCSP(certca_oldNCA, "http://ocsp.pki.gov.kz/");
if (res == 0)
{
	Console.WriteLine("certificate is good.");
	return true;
}

BIO bcertca_newNCA = BIO.File(@"...\ca_cert\НУЦ 2.0\new_NCA_GOST.der", "rb");
X509Certificate certca_newNCA = X509Certificate.FromDER(bcertca_newNCA);
res = cert.CheckOCSP(certca_newNCA, "http://ocsp.pki.gov.kz/");
if (res == 0)
{
	Console.WriteLine("certificate is good.");
	return true;
}
if (res > 1)
{
	Console.WriteLine("certificate is revoked.");
	return false;
}


В случае если, провала обоих методов, то пользователь будет уведомлен, что сервис временно не доступен


Проверка 5. Проверка штампа времени
Не проверяю, тк. не требуется


Проверка 6. Проверка параметров формата
Вместо JAVA мы используем NCALayer.
Могу ли я ссылаться на то что при выборе контейнера ключей я указываю, что
getKeys(storageAlias, storagePath, password, [b]"SIGN"[/b], "callback");

- достаточно ли этого, или нужны еще дополнительные проверки?


Проверка 7. Проверка DN имени регистрационного свидетельства
DN имеется в виду subjectDN? "ИС должна осуществлять проверку идентификационных данных владельца регистрационного свидетельства подписывающей стороны". Имеется в виду что нужно проверять эти данные в случае если пользователь подписал данные случайно не тем ключом (если их у него несколько). Правильно ли я понял?
Изменено: 3 года, 4 мес. назад от Dallas.

Re: Проверка действительности ЭЦП 3 года, 4 мес. назад #2219

  • ugotbug
  • Завсегдатай
  • Постов: 225
  • Репутация: 14
Добрый день.

1) К сожалению мы не планируем поддерживать и развивать библиотеку обертку ManagedOpenSSL в будущем.
По этой причине мы рекомендуем вам использовать в проекте на .Net нашу COM библиотеку, разработкой которой мы занялись, в связи "отсутствием возможности" работы основной массы информационных систем с низкоуровневым API библиотеки KalkanCrypt (чистый CИ). Сейчас в комплекте разработчика ее нет, но мы отправляем ее (+ примеры) по запросу.

2) Под параметрами формата сертификат подразумеваются прописанные в нем "разрешения" для использования в рамках конкретной информационной системы. Например, проверяются: область применения сертификата, политика в рамках которого был выпущен сертификат, наличие конкретных объектных идентификаторов. Как я понял вы хотите проверять формат на этапе подписания? Но в таком случае, к сожалению в NCALayer имеется только проверка формата "использования ключа" и "расширенное использование ключа", которое позволяет определить может ли сертификат использоваться для подписания или аутентификации.
Но вы также можете проверять формат на стороне сервера во время проверки подписи.
Если вам не нужно определять ничего, кроме применения сертификата для подписи или аутентификации, то указанного вами метода NCALayer достаточно.

3) DN имя ­ это значение расширения Subject, все верно. Под проверкой DN имени подразумевается, что вы ожидаете в сертификате определенный ИИН или БИН, ФИО или наименование организации. К этому же можно подвести и вопросы взаимодействие с гос. базой данных юридических и физических лиц. Все зависит требований ваше ИС. Это опционально.
Могущественный обладатель кольца Знаний

Re: Проверка действительности ЭЦП 3 года, 4 мес. назад #2220

  • Dallas
  • Новый участник
  • Постов: 7
  • Репутация: 0
Спасибо за ответ.

Но что касательно 1 проверки? В примерах проверка XML возвращает -1(error).
Как проверять подпись в XML. Как я понял должно быть 2 способа: 1 для старых сертификатов, другой для новых выданных с 2016 года

Re: Проверка действительности ЭЦП 3 года, 4 мес. назад #2221

  • Dallas
  • Новый участник
  • Постов: 7
  • Репутация: 0
И новый SDK можете скинуть на почту Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ?

Re: Проверка действительности ЭЦП 3 года, 4 мес. назад #2222

  • ugotbug
  • Завсегдатай
  • Постов: 225
  • Репутация: 14
К сожалению мы не можем переключиться на рассмотрение этой проблемы. О причинах - выше.
Мы рекомендуем вам использовать COM библиотеку, о которой я писал ранее.
Когда вы в последний раз загружали комплект разработчика?
Могущественный обладатель кольца Знаний

Re: Проверка действительности ЭЦП 3 года, 4 мес. назад #2223

  • Dallas
  • Новый участник
  • Постов: 7
  • Репутация: 0
в конце марта
  • Страница:
  • 1
  • 2
FaLang translation system by Faboba