Статус: Новичок
Группы: Участники
Зарегистрирован: 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]
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Это ошибка в текущей версии (1.0.3110.0). 16.07.2008 выложим новую версию. Спасибо. |
С уважением, Александр. |
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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() Может проблема в чем-то другом.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.07.2008(UTC) Сообщений: 4
|
Когда будет выложена версия, в которую войдет исравление описанной выше ошибки?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
КриптоПро Sharpei (1.0.3176.0). Выложена. |
С уважением, Александр. |
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.09.2008(UTC) Сообщений: 4
|
У меня та же проблема, где выложена предварительная версия 1,0,3176,0 ? заходил на страницу продукты-> КриптоПро Sharpei -> дистрибутив скачивал как SDK так и RTE - версия сборки : 1,0,0,8 и ошибка остается. Где взять версию 1,0,3176,0 ?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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. |
С уважением, Александр. |
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.09.2008(UTC) Сообщений: 4
|
отправил тема письма: к посту от От: 25 сентября 2008 г. 14:18:18
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.09.2008(UTC) Сообщений: 4
|
Атас, все заработало. Советую в инсталляционном пакете сделать предупреждение "НАСТОЯТЕЛЬНО !!! РЕКОМЕНДУЕТСЯ ПЕРЕЗАГРУЗИТЬ КОМПЬЮТЕР ПОСЛЕ УСТАНОВКИ"
А вообще молодцы, оперативно работаете, так держать!
и еще вопрос: у меня есть объект сертификата, корректно будет сделать так:
X509Certificate2 cert = // получил не важно как // Добавляем ключ в SignedXml документ. signedXml.SigningKey = cert.PrivateKey; ... и т.д. вроде все отработало, подпись есть
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close