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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline idtks  
#1 Оставлено : 16 декабря 2014 г. 12:13:40(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 104
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 24 раз
Добрый день.

Посылаю запросы к вашему тестовому OCSP-серверу "http://testca.cryptopro.ru/ocsp/ocsp.srf" и пытаюсь проверить подпись у ответов - проверка не проходит. Вот фрагмент кода для проверки подписи (используется библиотека bouncycastle и CSP "КриптоПРО"):

...
br = (BasicOcspResp)r.GetResponseObject();
responses = (br == null) ? null : br.Responses;

var msc = new X509Certificate2(br.GetCerts()[0].GetEncoded());
var pk = msc.PublicKey.Key;
if (pk is CryptoPro.Sharpei.Gost3410CryptoServiceProvider)
{
var p = pk as CryptoPro.Sharpei.Gost3410CryptoServiceProvider;

var chk = p.VerifyData(br.GetTbsResponseData(),
new CryptoPro.Sharpei.Gost3411CryptoServiceProvider(),
br.GetSignature());
if (!chk)
throw new Exception("!!!");
}
...

--- я что-то не так делаю? Объект BasicOcspResp приходит вполне корректный. Непонятно...

С уважением, Константин Ткачук.
Offline idtks  
#2 Оставлено : 17 декабря 2014 г. 9:58:47(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 104
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 24 раз
Разобрался сам - надо "переворачивать" подписи перед проверкой. Вот такой код работает:

...
br = (BasicOcspResp)r.GetResponseObject();
var msc = new X509Certificate2(br.GetCerts()[0].GetEncoded());
var pk = msc.PublicKey.Key;
bool res = false;
if (pk is CryptoPro.Sharpei.Gost3410CryptoServiceProvider)
{
var p = pk as CryptoPro.Sharpei.Gost3410CryptoServiceProvider;
var sg = br.GetSignature().Reverse().ToArray();
res = p.VerifyData(br.GetTbsResponseData(),
new CryptoPro.Sharpei.Gost3411CryptoServiceProvider(),
sg);
}
if (!res) throw new Exception("!!!");
...

--- вопрос разработчикам: а не проще было "переворачивание" подписи спрятать в крипто-провайдер? Ну, чтобы об это всякий раз не спотыкаться...
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.