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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline zay  
#1 Оставлено : 14 июля 2008 г. 23:57:36(UTC)
zay

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

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

При попытке подписать XML документ выдается Exception:
System.Security.Cryptography.CryptographicException was unhandled
Message="Could not create hash algorithm object."
Source="System.Security"
StackTrace:
at System.Security.Cryptography.Xml.Reference.CalculateHashValue(XmlDocument document, CanonicalXmlNodeList refList)
at System.Security.Cryptography.Xml.SignedXml.BuildDigestedReferences()
at System.Security.Cryptography.Xml.SignedXml.ComputeSignature()
at BlizkoGate.XML.SignXML(XmlDocument dXml) in C:\Work\Blizko\BlizkoGate\BlizkoGate\Program.cs:line 70
at BlizkoGate.Program.Main() in C:\Work\Blizko\BlizkoGate\BlizkoGate\Program.cs:line 157
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

в строке: signedXml.ComputeSignature();

Метод, который подписывает XML:

public XmlDocument SignXML(XmlDocument dXml)
{
//Извлекаем нужный нам сертификат
X509Store storeMy = new X509Store(StoreName.My, StoreLocation.CurrentUser);
storeMy.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509CertificateCollection foundCertColl = storeMy.Certificates.Find(X509FindType.FindBySubjectName, "имя сертификата", false);

if (foundCertColl.Count != 0)
{
// Создаем параметры для открытия секретного ключа.
CspParameters cspPar = new CspParameters();
cspPar.KeyContainerName = "имя контейнера";
cspPar.ProviderType = 75;

using (AsymmetricAlgorithm Key = new Gost3410CryptoServiceProvider(cspPar))
{
X509Certificate cert = foundCertColl[0];
SignedXml signedXml = new SignedXml(dXml);

// Добавляем ключ в SignedXml документ.
signedXml.SigningKey = Key;

// Создаем ссылку на node для подписи.
// При подписи всего документа проставляем "".
Reference reference = new Reference();
reference.Uri = "";

// Явно проставляем алгоритм хеширования,
// по умолчанию SHA1.
reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";

// Добавляем transform на подписываемые данные
// для удаления вложенной подписи.
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();

reference.AddTransform(env);

// Добавляем transform для канонизации.
XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform();
reference.AddTransform(c14);

// Добавляем ссылку на подписываемые данные
signedXml.AddReference(reference);

KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data(cert));

// Добавляем KeyInfo в SignedXml.
signedXml.KeyInfo = keyInfo;

// Вычисляем подпись.
signedXml.ComputeSignature(); //Здесь возникает exception

// Получаем XML представление подписи и сохраняем его
// в отдельном node.
XmlElement xmlDigitalSignature = signedXml.GetXml();

// Добавляем node подписи в XML документ.
dXml.DocumentElement.AppendChild(dXml.ImportNode(xmlDigitalSignature, true));
}
}
return dXml;
}

CallStack:

> BlizkoGate.exe!BlizkoGate.XML.SignXML(System.Xml.XmlDocument dXml = {Document}) Line 70 C#
BlizkoGate.exe!BlizkoGate.Program.Main() Line 157 + 0x1c bytes C#
[External Code]
Offline Челпанов А.  
#2 Оставлено : 15 июля 2008 г. 16:28:04(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Это ошибка в текущей версии (1.0.3110.0). 16.07.2008 выложим новую версию. Спасибо.
С уважением, Александр.
Offline zay  
#3 Оставлено : 17 июля 2008 г. 16:13:03(UTC)
zay

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

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

Челпанов А. написал:
Это ошибка в текущей версии (1.0.3110.0). 16.07.2008 выложим новую версию. Спасибо.


Установил версию 1.0.3118.0, после этого установил .Net Framework 2.0 SP1
Проблема сохранилась:

System.Security.Cryptography.CryptographicException was unhandled
Message="Could not create hash algorithm object."
Source="System.Security"
StackTrace:
at System.Security.Cryptography.Xml.Reference.CalculateHashValue(XmlDocument document, CanonicalXmlNodeList refList)
at System.Security.Cryptography.Xml.SignedXml.BuildDigestedReferences()
at System.Security.Cryptography.Xml.SignedXml.ComputeSignature()
at BlizkoGate.XML.SignXML(XmlDocument dXml) in C:\Work\Blizko\BlizkoGate\BlizkoGate\Program.cs:line 70
at BlizkoGate.Program.Main() in C:\Work\Blizko\BlizkoGate\BlizkoGate\Program.cs:line 157
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Может проблема в чем-то другом.
Offline zay  
#4 Оставлено : 24 июля 2008 г. 20:17:43(UTC)
zay

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

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

Когда будет выложена версия, в которую войдет исравление описанной выше ошибки?
Offline Челпанов А.  
#5 Оставлено : 15 сентября 2008 г. 20:38:47(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
КриптоПро Sharpei (1.0.3176.0). Выложена.
С уважением, Александр.
Offline Smoker  
#6 Оставлено : 25 сентября 2008 г. 17:17:44(UTC)
Smoker

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

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

У меня та же проблема,
где выложена предварительная версия 1,0,3176,0 ?
заходил на страницу продукты-> КриптоПро Sharpei -> дистрибутив
скачивал как SDK так и RTE - версия сборки : 1,0,0,8 и ошибка остается.
Где взять версию 1,0,3176,0 ?
Offline Smoker  
#7 Оставлено : 25 сентября 2008 г. 17:40:13(UTC)
Smoker

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

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

млин, все верно версия сборки 1,0,0,8
версия файла 1,0,3176,0

Но один фиг,
CryptographicException: Невозможно создать объект хеш-алгоритма.

а вот свойство PrivateKey у объекта типа X509Certificate2
'cert.PrivateKey' threw an exception of type 'System.NotSupportedException' System.Security.Cryptography.AsymmetricAlgorithm {System.NotSupportedException}

не поддерживается ваш алгоритм сисетмой, не знает она про него, может что-то дополнительно настроить нужно
у меня КриптоПро CSP3, Framework 2.0 (SP1), Windows XP
Offline Челпанов А.  
#8 Оставлено : 25 сентября 2008 г. 18:18:18(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Обычно диагностика
> а вот свойство PrivateKey у объекта типа X509Certificate2
> 'cert.PrivateKey' threw an exception of type 'System.NotSupportedException' System.Security.Cryptography.AsymmetricAlgorithm {System.NotSupportedException}
признак того что неправильно установился Шарпей.
Нажмите Start\Run введите cmd.exe и нажмите ok во вновь открывшемся командном окне введите
cd C:\Program Files\Crypto Pro\Sharpei
запустите
alarm info
в папаке C:\Program Files\Crypto Pro\Sharpei появится файла osinfo.txt закройте командное окно, а файл C:\Program Files\Crypto Pro\Sharpei\osinfo.txt (желательно предварительно запакованный) присоедините к письму и отправьте письмо по адресу support@cryptopro.ru.
С уважением, Александр.
Offline Smoker  
#9 Оставлено : 25 сентября 2008 г. 19:01:55(UTC)
Smoker

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

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

отправил
тема письма: к посту от От: 25 сентября 2008 г. 14:18:18
Offline Smoker  
#10 Оставлено : 25 сентября 2008 г. 19:33:08(UTC)
Smoker

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

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

Атас, все заработало.
Советую в инсталляционном пакете сделать предупреждение
"НАСТОЯТЕЛЬНО !!! РЕКОМЕНДУЕТСЯ ПЕРЕЗАГРУЗИТЬ КОМПЬЮТЕР ПОСЛЕ УСТАНОВКИ"

А вообще молодцы, оперативно работаете, так держать!

и еще вопрос: у меня есть объект сертификата, корректно будет сделать так:

X509Certificate2 cert = // получил не важно как
// Добавляем ключ в SignedXml документ.
signedXml.SigningKey = cert.PrivateKey;
...
и т.д.
вроде все отработало, подпись есть
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.