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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Webster  
#1 Оставлено : 23 ноября 2009 г. 12:00:20(UTC)
Webster

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

Группы: Участники
Зарегистрирован: 20.11.2009(UTC)
Сообщений: 4

Добрый день. Пишу на C# библиотеку для работы с УЦ КриптоПро.
Взаимодействие происходит через web-сервис RA.

Метод RevokeRequestSoapPort.SubmitHoldRequest(string request)
Значение строки request = "SN=13FFA817000000000009, RR=Тестовый комментарий, RC=6, HD=0-0-0-42-0-0"
При попытке отправить запрос сервер УЦ выдает ошибку:

The VB Application identified by the event source logged this Application Registration: Thread ID: 3804 ,Logged:
Ошибка модуля удаленного доступа к ЦР КриптоПро УЦ:
Метод: RevokeRequest.SubmitHoldRequest
Источник: RegistrationCenter
Номер: 0xD (13)
Описание: Type mismatch

Вот стандарный код для создания запроса в формате PKCS7, передаваемого в метод:
byte [] signedData=Encoding.Unicode.GetBytes(request);

ContentInfo content = new ContentInfo(signedData);
SignedCms signedCms = new SignedCms(content, false);
signedCms.Certificates.Add(certificate);

CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, certificate);
signedCms.ComputeSignature(signer);

string resultRequest = Convert.ToBase64String(signedCms.Encode());

Судя по всему причина кроется в строке, которую я передаю в метод.
В руководстве программиста написано, что "В поле ContentInfo этого документа должна находиться UNICODE-строка запроса".
Но проблема в том, что конструктор ContentInfo принимает в качестве параметра только массив байт.
Запрос на сертификат метода RevokeRequest.SumbitRequest принимается нормально после тех же действий.

Можно ли как-нибудь решить эту проблему?
Offline Webster  
#2 Оставлено : 23 ноября 2009 г. 14:41:13(UTC)
Webster

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

Группы: Участники
Зарегистрирован: 20.11.2009(UTC)
Сообщений: 4

Webster написал:
Добрый день. Пишу на C# библиотеку для работы с УЦ КриптоПро.
Взаимодействие происходит через web-сервис RA.

Метод RevokeRequestSoapPort.SubmitHoldRequest(string request)
Значение строки request = "SN=13FFA817000000000009, RR=Тестовый комментарий, RC=6, HD=0-0-0-42-0-0"
При попытке отправить запрос сервер УЦ выдает ошибку:

The VB Application identified by the event source logged this Application Registration: Thread ID: 3804 ,Logged:
Ошибка модуля удаленного доступа к ЦР КриптоПро УЦ:
Метод: RevokeRequest.SubmitHoldRequest
Источник: RegistrationCenter
Номер: 0xD (13)
Описание: Type mismatch

Вот стандарный код для создания запроса в формате PKCS7, передаваемого в метод:
byte [] signedData=Encoding.Unicode.GetBytes(request);

ContentInfo content = new ContentInfo(signedData);
SignedCms signedCms = new SignedCms(content, false);
signedCms.Certificates.Add(certificate);

CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, certificate);
signedCms.ComputeSignature(signer);

string resultRequest = Convert.ToBase64String(signedCms.Encode());

Судя по всему причина кроется в строке, которую я передаю в метод.
В руководстве программиста написано, что "В поле ContentInfo этого документа должна находиться UNICODE-строка запроса".
Но проблема в том, что конструктор ContentInfo принимает в качестве параметра только массив байт.
Запрос на сертификат метода RevokeRequest.SumbitRequest принимается нормально после тех же действий.

Можно ли как-нибудь решить эту проблему?


Отбой, я конечно балбес :) В строке запроса перепутал поля "причина (RR)" с полем "комментарием (RC)". Бывает.
Offline cybermerlin  
#3 Оставлено : 24 ноября 2010 г. 15:02:16(UTC)
cybermerlin

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

Группы: Участники
Зарегистрирован: 28.10.2009(UTC)
Сообщений: 121

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 3 раз в 3 постах
пытаюсь сделать подпись

Код:
        ContentInfo ci = new ContentInfo( Encoding.Unicode.GetBytes( stringData ) );
        SignedCms sig = new SignedCms( ci, true );
        if( certs.Count > 0 ) {
          X509Certificate2 cert = certs[0];
          sig.Certificates.Add( cert );
          CmsSigner signer = new CmsSigner( SubjectIdentifierType.IssuerAndSerialNumber, cert );
          sig.ComputeSignature( signer, false );
          str_sign = Convert.ToBase64String( sig.Encode() );
        }


сам свою подпись проверяю нормально? если сразу проверяю,
но если проверяю подпись КриптоАрмом - то проверку подпись не проходит
и если сохранить base64 строку полученную, а потом через frombase64string()
sig.decode(teaxt);
sig.checkSignature(true); - тут получаю ошибку ...

Отредактировано пользователем 24 ноября 2010 г. 18:53:11(UTC)  | Причина: Не указана

Offline cybermerlin  
#4 Оставлено : 24 ноября 2010 г. 21:43:19(UTC)
cybermerlin

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

Группы: Участники
Зарегистрирован: 28.10.2009(UTC)
Сообщений: 121

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 3 раз в 3 постах
так, если lineBreak параметр ставлю, то сам у себя проверяю, но АРМ не проверяет

Код:
str_sign = Convert.ToBase64String( sig.Encode(),Base64FormattingOptions.InsertLineBreaks );
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.