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

Уведомление

Icon
Error

3 Страницы<123
Опции
К последнему сообщению К первому непрочитанному
Offline Andy1973  
#21 Оставлено : 11 марта 2019 г. 7:51:07(UTC)
Andy1973

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

Группы: Участники
Зарегистрирован: 11.01.2019(UTC)
Сообщений: 2
Откуда: Novokyznetsk

Сделал все как написано выше для 2012 ключа ФСС. Но ФСС все равно не принимает.

Что в EncryptionMethod должно быть написано? (я оставил по старому, но это видимо не верно)

Код:

// Зашифровываем сессионный ключ и добавляем эти зашифрованные данные
// к узлу EncryptedKey.
EncryptedKey ek = new EncryptedKey();

byte[] encryptedKey = CPEncryptedXml.EncryptKey(
//////  sessionKey, (Gost3410)Cert.PublicKey.Key);
  sessionKey, (Gost3410_2012_256)Cert.PublicKey.Key, GostKeyWrapMethod.CryptoProKeyWrap);

ek.CipherData = new CipherData(encryptedKey);
ek.EncryptionMethod = new EncryptionMethod(
                    CPEncryptedXml.XmlEncGostKeyTransportUrl);




Добавил sessionKey.CipherOid = "1.2.643.7.1.2.5.1.1";
Все заработало. :)

Отредактировано пользователем 11 марта 2019 г. 9:05:55(UTC)  | Причина: Не указана

Offline NatalyChern  
#22 Оставлено : 24 декабря 2019 г. 14:17:58(UTC)
NatalyChern

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Добрый день!
Помогите, пожалуйста!!!
Никак не удается наладить соединение с ФСС (сервис по ЭЛН) с сертификатом ФСС по ГОСТ 2012. Brick wall
С сертификатом ФСС ГОСТ 2001 соединение устанавливается успешно.

Код:

                   // Создаем объект класса EncryptedXml и используем 
                    // его для зашифрования узла на симметричном ключе.
                    EncryptedXml eXml = new EncryptedXml();
                    byte[] encryptedElement = eXml.EncryptData(
                        elementToEncrypt, sessionKey, false);

                    // Создаем объект EncryptedData и заполняем  информацией.
                    EncryptedData edElement = new EncryptedData();
                    edElement.Type = EncryptedXml.XmlEncElementUrl;
                    edElement.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGost28147Url);
                    edElement.CipherData.CipherValue = encryptedElement;

                    EncryptedKey ek = new EncryptedKey();
                    byte[] encryptedKey = null;
                    if (DestCert.PublicKey.Key is Gost3410)
                    {
                        encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410)DestCert.PublicKey.Key); 
                    }
                    else if (DestCert.PublicKey.Key is Gost3410_2012_256)
                    {
                        sessionKey.CipherOid = "1.2.643.7.1.2.5.1.1";
                        encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410_2012_256)DestCert.PublicKey.Key, GostKeyWrapMethod.CryptoProKeyWrap);
                    }
                    else if (DestCert.PublicKey.Key is Gost3410_2012_512)
                    {
                        sessionKey.CipherOid = "1.2.643.7.1.2.5.1.1";
                        encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410_2012_512)DestCert.PublicKey.Key, GostKeyWrapMethod.CryptoProKeyWrap);
                    }
                    else
                    {
                        sLastError = "Unsupported key algorithm.";
                        return false;
                    }

                    ek.CipherData = new CipherData(encryptedKey);
                    ek.EncryptionMethod = new EncryptionMethod(DestCert.PublicKey.Key.KeyExchangeAlgorithm);

                    // Создаём новый раздел KeyInfo в котором передадим информацию о сертификате
                    ek.KeyInfo = new KeyInfo();
                    ek.KeyInfo.AddClause(new KeyInfoX509Data(SenderCert));

                    // Добавляем ссылку на зашифрованный ключ к 
                    // зашифрованным данным.
                    edElement.KeyInfo = new KeyInfo();
                    edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));

                    // Заменяем исходный узел на зашифрованный.
                    EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);

Offline Артём Макаров  
#23 Оставлено : 24 декабря 2019 г. 14:28:58(UTC)
Артём Макаров

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Добрый день.

Если верить людям выше, у которых завелось, нужно ещё указать алгоритм транспорта 2001, а у вас он выбирается на основе ключа.

Попробуйте

Код:
ek.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGostKeyTransportUrl);
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Артём Макаров за этот пост.
NatalyChern оставлено 09.01.2020(UTC)
Offline NatalyChern  
#24 Оставлено : 24 декабря 2019 г. 14:44:34(UTC)
NatalyChern

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Не помогло((

Код:

ek.CipherData = new CipherData(encryptedKey);
//ek.EncryptionMethod = new EncryptionMethod(DestCert.PublicKey.Key.KeyExchangeAlgorithm);
ek.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGostKeyTransportUrl);
Offline NatalyChern  
#25 Оставлено : 24 декабря 2019 г. 14:59:04(UTC)
NatalyChern

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
С сертификатом ФСС по ГОСТ 2001 соединение устанавливается.
И как победить эту беду... может у кого есть работающий пример?
в чем тут может быть проблема?
Offline NatalyChern  
#26 Оставлено : 25 декабря 2019 г. 19:08:31(UTC)
NatalyChern

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Все заработало:)
Спасибо!
Offline SpiritBreaker  
#27 Оставлено : 26 декабря 2019 г. 14:48:25(UTC)
SpiritBreaker

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: NatalyChern Перейти к цитате
Все заработало:)
Спасибо!


Подскажите, пожалуйста, что изменили в коде, чтобы заработало? Можете скинуть итоговый вариант?
Offline NatalyChern  
#28 Оставлено : 27 декабря 2019 г. 17:20:05(UTC)
NatalyChern

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Добрый день.

Итоговый вариант такой.
Код:

                       using (var sessionKey = new Gost28147CryptoServiceProvider())
                        {
 
                            // Создаём элемент зашифрованного ключа, в который вложим наш сертификат                            
                            byte[] encryptedKey = null;
                            if (DestCert.PublicKey.Key is Gost3410)
                            {
                               encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410)DestCert.PublicKey.Key);
                            }
                            else if (DestCert.PublicKey.Key is Gost3410_2012_256)
                            {
                              sessionKey.CipherOid = "1.2.643.7.1.2.5.1.1";
                              encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410_2012_256)DestCert.PublicKey.Key, GostKeyWrapMethod.CryptoProKeyWrap);
                            }
                            else if (DestCert.PublicKey.Key is Gost3410_2012_512)
                            {
                               sessionKey.CipherOid = "1.2.643.7.1.2.5.1.1";
                               encryptedKey = CPEncryptedXml.EncryptKey(sessionKey, (Gost3410_2012_512)DestCert.PublicKey.Key, GostKeyWrapMethod.CryptoProKeyWrap);
                            }
                            else
                            {
                               sLastError = "Unsupported key algorithm.";
                               return false;
                            }

                             // Создаем новый объект xml документа.
                             XmlDocument xmlDoc = new XmlDocument();

                            // Пробельные символы участвуют в вычислении подписи и должны быть сохранены для совместимости с другими реализациями.
                            xmlDoc.PreserveWhitespace = true;
                            xmlDoc.Load(inFileName);

                            // Элемент для шифрования. Шифруем весь документ
                            XmlElement elementToEncrypt = xmlDoc.DocumentElement as XmlElement;
                            if (elementToEncrypt == null)
                            {
                              sLastError = "Узел не найден.";
                              return false;
                            }

                            // Создаем объект класса EncryptedXml и используем 
                            // его для зашифрования узла на симметричном ключе.
                            EncryptedXml eXml = new EncryptedXml();

                            byte[] encryptedElement = eXml.EncryptData(elementToEncrypt, sessionKey, false);

                            // Создаем объект EncryptedData и заполняем  информацией.
                            EncryptedData edElement  = new EncryptedData();
                            edElement.Type = EncryptedXml.XmlEncElementUrl;
                            edElement.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGost28147Url);
                            edElement.CipherData.CipherValue = encryptedElement;

                            var ek = new EncryptedKey
                            {
                              CipherData = new CipherData(encryptedKey),
                              EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGostKeyTransportUrl)                                
                            };
                            
                            // Создаём новый раздел KeyInfo в котором передадим информацию о сертификате
                            ek.KeyInfo = new KeyInfo();
                            ek.KeyInfo.AddClause(new KeyInfoX509Data(SenderCert));

                            // Добавляем ссылку на зашифрованный ключ к 
                            // зашифрованным данным.
                            edElement.KeyInfo = new KeyInfo();
                            edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));

                            // Заменяем исходный узел на зашифрованный.
                            EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);
                            ...

thanks 1 пользователь поблагодарил NatalyChern за этот пост.
SpiritBreaker оставлено 28.12.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (4)
3 Страницы<123
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.