Статус: Новичок
Группы: Участники
Зарегистрирован: 21.02.2009(UTC) Сообщений: 6
|
Добрый день! Мне необходимо сформировать в приложении .Net документ по следующим требованиям: - документ, подписанный усиленной квалифицированной электронной подписью в соответствии с законодательством Российской Федерации в формате PKCS#7 (отделенная электронная подпись). - документ, содержащий метку времени (для электронного документа, подписанного усиленной квалифицированной электронной подписью), наложенную в соответствии со спецификацией Internet Х.509 Public Key Infrastmcture Time-Stamp Protocol (TSP) и со спецификацией CAdES-T (ETSI TS 101 733 «CMS Advanced Electronic Signatures (CadES)». Нашел на форуме пример. На его основе написал свой метод: Код: public static byte[] SignMsgCades(byte[] data, string CertID)
{
var oStore = new CAdESCOM.CPStore();
oStore.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE,
"My", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
CAPICOM.ICertificate2 icert = null;
foreach (var cert in oStore.Certificates)
{
if ((cert as CAPICOM.ICertificate2).Thumbprint.Contains(CertID))
{
icert = cert as CAPICOM.ICertificate2;
break;
}
}
if (icert == null)
{
throw new Exception(string.Format("Сертификат для {0} не найден", CertID));
}
var oSigner = new CAdESCOM.CPSigner();
oSigner.Certificate = icert;
oSigner.TSAAddress = @"http://www.cryptopro.ru/tsp/tsp.srf";
var oSignedData = new CAdESCOM.CadesSignedData();
oSignedData.ContentEncoding = CAdESCOM.CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = Convert.ToBase64String(data);
string sSignedMessage = "";
try
{
sSignedMessage = oSignedData.SignCades(oSigner, CAdESCOM.CADESCOM_CADES_TYPE.CADESCOM_CADES_T, true);
}
catch (Exception ex)
{
throw new Exception("Ошибка подписи: " + Environment.NewLine +
CertID + Environment.NewLine +
icert.Thumbprint + " " + icert.SubjectName + Environment.NewLine +
ExceptionHelper.GetFullMessage(ex));
}
oStore.Close();
return Convert.FromBase64String(sSignedMessage);
}
При вызове выдает ошибку: "Не удается построить цепочку сертификатов для доверенного корневого центра."При этом: 1. При просмотре сертификата видно, что цепочка строится верно. 2017-12-29_100104.png (13kb) загружен 21 раз(а).2. Лицензии все необходимые есть. 2017-12-29_100404.png (35kb) загружен 16 раз(а).3. Если изменить тип подписи с CADES_T на CADES_BES, то подпись проходит без ошибок и цепочка считается верной. Подпись прикладываю. TestRequest.xml.sig (6kb) загружен 3 раз(а).Также эта ЭЦП используется для подписи сообщений СМЭВ и тоже работает без проблем. Есть подозрение, что проблема где-то в получении метки времени, т.к., как я понимаю, при подписи CADES_BES она не требуется. Подскажите пожалуйста, в чем может быть причина ошибки? Отредактировано пользователем 29 декабря 2017 г. 9:23:29(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сообщений: 3,383 Сказал «Спасибо»: 53 раз Поблагодарили: 776 раз в 718 постах
|
Добрый день,
sergeykokhas
Судя по ошибке ( Не удается построить цепочку сертификатов для доверенного корневого центра), у Вас не строится цепочка до сертификата удостоверяющего центра, который выдал сертификат оператора TSP службы, указанной строке: Код:oSigner.TSAAddress = @"http://www.cryptopro.ru/tsp/tsp.srf";
То есть Вам необходимо добавить в хранилище Доверенные корневые центры сертификации сертификат Тестового УЦ ООО "КРИПТО-ПРО". |
|
1 пользователь поблагодарил Александр Лавник за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.02.2009(UTC) Сообщений: 6
|
Помогло. Спасибо большое! Еще небольшой вопрос. Получается, что с компьютера, где выполняется подпись CADES-T обязательно должен быть доступ в Интернет до http://www.cryptopro.ru/tsp/tsp.srf ? Мы разрабатываем систему для государственного заказчика и у них, как правило, сервера находятся в защищенной сети и не имеют доступа в Интернет. Как быть в этом случае? Отредактировано пользователем 29 декабря 2017 г. 11:10:45(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сообщений: 3,383 Сказал «Спасибо»: 53 раз Поблагодарили: 776 раз в 718 постах
|
Да, TSP служба должна быть доступна по сети в момент создания подписи формата CAdES-T, чтобы получить метку времени на переданный хэш. Цитата:Мы разрабатываем систему для государственного заказчика и у них, как правило, сервера находятся в защищенной сети и не имеют доступа в Интернет. Как быть в этом случае? Как вариант, развернуть в своей защищенной сети TSP службу и получать метки времени при создании подписи от неё. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close