Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.06.2019(UTC) Сообщений: 7 Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день! Помогите, пожалуйста!!! Никак не удается наладить соединение с ФСС (сервис по ЭЛН) с сертификатом ФСС по ГОСТ 2012. С сертификатом ФСС ГОСТ 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);
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 217
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 63 раз в 59 постах
|
Добрый день. Если верить людям выше, у которых завелось, нужно ещё указать алгоритм транспорта 2001, а у вас он выбирается на основе ключа. Попробуйте Код:ek.EncryptionMethod = new EncryptionMethod(CPEncryptedXml.XmlEncGostKeyTransportUrl);
|
|
1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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);
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.06.2019(UTC) Сообщений: 7 Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
С сертификатом ФСС по ГОСТ 2001 соединение устанавливается. И как победить эту беду... может у кого есть работающий пример? в чем тут может быть проблема?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.06.2019(UTC) Сообщений: 7 Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.12.2019(UTC) Сообщений: 1
Сказал(а) «Спасибо»: 1 раз
|
Автор: 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);
...
|
1 пользователь поблагодарил NatalyChern за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close