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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sergeykokhas  
#1 Оставлено : 29 декабря 2017 г. 9:07:44(UTC)
sergeykokhas

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Александр Лавник  
#2 Оставлено : 29 декабря 2017 г. 10:18:22(UTC)
Александр Лавник

Статус: Сотрудник

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

Сказал «Спасибо»: 53 раз
Поблагодарили: 779 раз в 721 постах
Добрый день, sergeykokhas Offline

Судя по ошибке (Не удается построить цепочку сертификатов для доверенного корневого центра), у Вас не строится цепочка до сертификата удостоверяющего центра, который выдал сертификат оператора TSP службы, указанной строке:

Код:
oSigner.TSAAddress = @"http://www.cryptopro.ru/tsp/tsp.srf";


То есть Вам необходимо добавить в хранилище Доверенные корневые центры сертификации сертификат Тестового УЦ ООО "КРИПТО-ПРО".
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
chebevara оставлено 20.01.2018(UTC)
Offline sergeykokhas  
#3 Оставлено : 29 декабря 2017 г. 11:09:44(UTC)
sergeykokhas

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

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

Помогло. Спасибо большое!
Еще небольшой вопрос. Получается, что с компьютера, где выполняется подпись CADES-T обязательно должен быть доступ в Интернет до http://www.cryptopro.ru/tsp/tsp.srf ?
Мы разрабатываем систему для государственного заказчика и у них, как правило, сервера находятся в защищенной сети и не имеют доступа в Интернет. Как быть в этом случае?

Отредактировано пользователем 29 декабря 2017 г. 11:10:45(UTC)  | Причина: Не указана

Offline Александр Лавник  
#4 Оставлено : 29 декабря 2017 г. 11:22:18(UTC)
Александр Лавник

Статус: Сотрудник

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

Сказал «Спасибо»: 53 раз
Поблагодарили: 779 раз в 721 постах
Цитата:
Еще небольшой вопрос. Получается, что с компьютера, где выполняется подпись CADES-T обязательно должен быть доступ в Интернет до http://www.cryptopro.ru/tsp/tsp.srf ?


Да, TSP служба должна быть доступна по сети в момент создания подписи формата CAdES-T, чтобы получить метку времени на переданный хэш.

Цитата:
Мы разрабатываем систему для государственного заказчика и у них, как правило, сервера находятся в защищенной сети и не имеют доступа в Интернет. Как быть в этом случае?


Как вариант, развернуть в своей защищенной сети TSP службу и получать метки времени при создании подписи от неё.

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