Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Подпись неверна при подписание через CAPICOM в .Net при проверке далее через браузер
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.10.2011(UTC) Сообщений: 45 Откуда: Moscow
Сказал(а) «Спасибо»: 7 раз
|
Пример кода, которым идет подписание: Код:using CAPICOM;
...
var oSigner = new Signer
{
Certificate = found
};
// В подпись добавляем время на момент начала подписания
var oSigningTime = new CAPICOM.Attribute
{
Name = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME,
Value = DateTime.UtcNow
};
oSigner.AuthenticatedAttributes.Add(oSigningTime);
var oSignedData = new SignedData
{
Content = sMessage
};
var sSignedMessage = oSignedData.Sign(oSigner, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
Подскажите, что означает ошибка "80880262: The message has not been signed" и в каком направлении с ней разбираться?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
С помощью, например, csptest подпись проверяется? Вы делаете отделенную подпись, при проверке это учитывается? |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.10.2011(UTC) Сообщений: 45 Откуда: Moscow
Сказал(а) «Спасибо»: 7 раз
|
Проверить через csptest затруднительно, т.к. данные для подписи готовятся не совсем прозрачным способом. При проверке все учитывается. Более того, подпись, сделанная через браузер+Capicom, проверяется успешно, т.е. проблема в том, что подпись сделана в одной среде, а проверяется в другой (хотя по идее использоваться должны одни и те же dll'ки): Код:var oUtilities = createObject("CAPICOM.Utilities");
var oSignedData = createObject("CAPICOM.SignedData");
var oSigner = createObject("CAPICOM.Signer");
oSigner.Certificate = oCertificate;
var oSigningTime = createObject("CAPICOM.Attribute");
oSigningTime.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
oSigningTime.Value = oUtilities.LocalTimeToUTCTime(convertDate(appServDate));
oSigner.AuthenticatedAttributes.Add(oSigningTime);
oSignedData.Content = base64Text;
var sSignedMessage = oSignedData.Sign(oSigner, DETACHED_SIGNATURE, CAPICOM_ENCODE_BASE64);
Подскажите, пожалуйста, в каких случаях выдается все-таки эта ошибка "0880262: The message has not been signed"? К сожалению поиск по просторам интернета не дает абсолютно ничего по этой теме, поэтому и решили обратиться к вам.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Ошибка выдается в случае, когда на проверку подаются неподписанные данные. Поэтому сохранение результата и проверка чем-то отличным от Вашего кода или хотя бы просто ASN.1 дамп - это первый шаг для диагностики причины. Интероп в .NET какой используете? |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.10.2011(UTC) Сообщений: 45 Откуда: Moscow
Сказал(а) «Спасибо»: 7 раз
|
Вот что получил в консоли: Цитата:C:\crypto-pro\csptest>csptest -sfsign -verify -detached -in sign.sig -signature data.txt -my "Воронцова Любовь" CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:RE ADY,ENABLED. #0: Subject: SERIALNUMBER=123456789012, OID.1.2.840.113549.1.9.2=1234567890, ИНН=123 4567890, E=123456789012@ekey.rosreestr.ru, C=RU, S=59 - Пермский край, L=Москва, O=Крок, OU=ДИТ-ПО, T=ведущий инженер-тестировщик, CN=Воронцова Любовь Valid : 06.12.2012 - 06.12.2013 Issuer : E=contact@ekey.ru, C=RU, L=Москва, O=ЗАО Удостоверяющий центр, CN=CA ek ey.ru
An error occurred in running the program. .\signtsf.c:679:Detached Signature was NOT verified
Error number 0x8009310b (2148086027). Встречено неверное значение тега ASN1.
Total: SYS: 0,031 sec USR: 0,016 sec UTC: 0,078 sec [ErrorCode: 0x8009310b] В аттаче приложил архив с файлом подписи, контентом, экспортированным сертификатом и интеропом (он сгенерен 2010-й студией). Вложение(я):  csptest.zip (31kb) загружен 6 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
В csptest еще укажите опцию -base64, т.к. подпись в base64. Правильный интероп рекомендуется взять отсюда. |
|
 1 пользователь поблагодарил Кирилл Соболев за этот пост.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.10.2011(UTC) Сообщений: 45 Откуда: Moscow
Сказал(а) «Спасибо»: 7 раз
|
Интероп попробуем, а с добавлением опции -base64 ошибка теперь такая: Цитата:An error occurred in running the program. .\signtsf.c:596:Base64 conversion error Error number 0x80092002 (2148081666). Ошибка при шифровании или расшифровывании.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Перепутаны данные и подпись, параметр in - это данные, signature - это подпись. |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.10.2011(UTC) Сообщений: 45 Откуда: Moscow
Сказал(а) «Спасибо»: 7 раз
|
Теперь ошибка такая: Цитата:Error number 0x80091007 (2148077575). Неправильное значение хеша. Поможет ли переход на вашу версию интеропа в этой проблеме? Как я понял, ваша версия интеропа решают проблему превращения base64-строки в правильный массив байт. Так ли это? Есть также соседняя ветка, только там проблема с JCP (проверка в нем, а подпись через cadescom). Может быть у вас есть возможность там тоже что-то посоветовать?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Поможет ли переход на вашу версию интеропа в этой проблеме? Должна. А вообще гораздо лучше перейти на классы .NET, SignedCms очень просто устроен. Цитата:Как я понял, ваша версия интеропа решают проблему превращения base64-строки в правильный массив байт. Так ли это?
Наш интероп решает проблему подписи данных произвольной длины, в то время как тот, который генерит VS, умеет правильно подписывать только данные четной длины. |
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Подпись неверна при подписание через CAPICOM в .Net при проверке далее через браузер
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close