Atom Лента - Форум КриптоПро - Тема:Parameter must support GOST R 34.10-2001 algorithm - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:ParametermustsupportGOSTR34.10-2001algorithm-10:1Copyright 2024 Форум КриптоПро2024-03-28T16:24:00Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruitturismhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59059&name=itturismitturismhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59059&name=itturismАндрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *itturismhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59059&name=itturismАндрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *itturismhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59059&name=itturismАндрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *Андрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *itturismhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59059&name=itturismitturismhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59059&name=itturismtwo_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceansYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid124053:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо за помощь. Проблема решена. Ошибка заключалась в том что передавался не весь xml а только то что было в XMLDocumetnt.OuterXML или даже InnerXmlю Не важно что, но это было не несколько байт меньше нежели сохранить XMLDocument в файл, а потом прочитать массив byte[] из этого файла. <br /><br />Вот полный метод подписания, который работает, может кому пригодится<br /> private static void Sign()<br /> {<br /> try<br /> {<br /> Document doc = new Document();<br /> //Создание документа , заполнение <br /> CreateDocumentRequest(doc);<br /> var serializer = new XmlSerializer(typeof(Document));<br /> XmlDocument xDoc = new XmlDocument();<br /> xDoc.PreserveWhitespace = true;<br /> using (var stream = new MemoryStream())<br /> {<br /> serializer.Serialize(stream, doc);<br /> stream.Position = 0;<br /> xDoc.Load(stream);<br /> }<br /> if (xDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)<br /> ((XmlDeclaration)xDoc.FirstChild).Encoding = Encoding.UTF8.HeaderName;<br /> X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);<br /> store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);<br /> X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySubjectName,<br /> SERT_NAME, false);<br /> X509Certificate2 Certificate = found[0];<br /> XmlElement sign = SignXml(Certificate, xDoc);<br /> //Добавляем подписанную секцию в документ<br /> xDoc.DocumentElement.GetElementsByTagName("SgntrSt")[0].AppendChild(xDoc.ImportNode(sign, true));<br /> <strong>var file = Path.GetTempFileName();<br /> xDoc.Save(file);<br /> ASCIIEncoding encoding = new ASCIIEncoding();<br /><br /> byte[] byte1 = File.ReadAllBytes(file);</strong><br /> Ver(true, file);<br /> HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("https://grampus-int.alfabank.ru/API/v1/ISO20022/Statements");<br /> webRequest.Method = "POST";<br /> webRequest.ContentType = "application/xml";<br /> webRequest.Accept = "*/*";<br /> webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;<br /> webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("643223:123456"));<br /> webRequest.ContentLength = byte1.Length;<br /> webRequest.ClientCertificates.Add(Certificate);<br /> Console.WriteLine($"{webRequest.RequestUri}");<br /> ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;<br /> Stream bodyStream = webRequest.GetRequestStream();<br /> bodyStream.Write(byte1, 0, byte1.Length);<br /> foreach (var v in webRequest.Headers)<br /> {<br /> var vv = webRequest.Headers[v.ToString()];<br /> Console.WriteLine($"{ v}: {vv}");<br /> }<br /> Console.WriteLine($"{xDoc.OuterXml}");<br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)webRequest.GetResponse();<br /> StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(),<br /> Encoding.GetEncoding(1251));<br /> var result = myStreamReader.ReadToEnd();<br /> }<br /> catch (WebException ex)<br /> {<br /> using (var stream = ex.Response.GetResponseStream())<br /> using (var reader = new StreamReader(stream))<br /> {<br /> Console.WriteLine($"Error: {reader.ReadToEnd()}");<br /> Console.ReadKey();<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> }</td></tr></table>2021-04-06T15:15:04+03:002021-04-06T15:15:04+03:00itturism<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо за помощь. Проблема решена. Ошибка заключалась в том что передавался не весь xml а только то что было в XMLDocumetnt.OuterXML или даже InnerXmlю Не важно что, но это было не несколько байт меньше нежели сохранить XMLDocument в файл, а потом прочитать массив byte[] из этого файла. <br /><br />Вот полный метод подписания, который работает, может кому пригодится<br /> private static void Sign()<br /> {<br /> try<br /> {<br /> Document doc = new Document();<br /> //Создание документа , заполнение <br /> CreateDocumentRequest(doc);<br /> var serializer = new XmlSerializer(typeof(Document));<br /> XmlDocument xDoc = new XmlDocument();<br /> xDoc.PreserveWhitespace = true;<br /> using (var stream = new MemoryStream())<br /> {<br /> serializer.Serialize(stream, doc);<br /> stream.Position = 0;<br /> xDoc.Load(stream);<br /> }<br /> if (xDoc.FirstChild.NodeType == XmlNodeType.XmlDeclaration)<br /> ((XmlDeclaration)xDoc.FirstChild).Encoding = Encoding.UTF8.HeaderName;<br /> X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);<br /> store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);<br /> X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySubjectName,<br /> SERT_NAME, false);<br /> X509Certificate2 Certificate = found[0];<br /> XmlElement sign = SignXml(Certificate, xDoc);<br /> //Добавляем подписанную секцию в документ<br /> xDoc.DocumentElement.GetElementsByTagName("SgntrSt")[0].AppendChild(xDoc.ImportNode(sign, true));<br /> <strong>var file = Path.GetTempFileName();<br /> xDoc.Save(file);<br /> ASCIIEncoding encoding = new ASCIIEncoding();<br /><br /> byte[] byte1 = File.ReadAllBytes(file);</strong><br /> Ver(true, file);<br /> HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("https://grampus-int.alfabank.ru/API/v1/ISO20022/Statements");<br /> webRequest.Method = "POST";<br /> webRequest.ContentType = "application/xml";<br /> webRequest.Accept = "*/*";<br /> webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;<br /> webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("643223:123456"));<br /> webRequest.ContentLength = byte1.Length;<br /> webRequest.ClientCertificates.Add(Certificate);<br /> Console.WriteLine($"{webRequest.RequestUri}");<br /> ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;<br /> Stream bodyStream = webRequest.GetRequestStream();<br /> bodyStream.Write(byte1, 0, byte1.Length);<br /> foreach (var v in webRequest.Headers)<br /> {<br /> var vv = webRequest.Headers[v.ToString()];<br /> Console.WriteLine($"{ v}: {vv}");<br /> }<br /> Console.WriteLine($"{xDoc.OuterXml}");<br /> HttpWebResponse myHttpWebResponse = (HttpWebResponse)webRequest.GetResponse();<br /> StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(),<br /> Encoding.GetEncoding(1251));<br /> var result = myStreamReader.ReadToEnd();<br /> }<br /> catch (WebException ex)<br /> {<br /> using (var stream = ex.Response.GetResponseStream())<br /> using (var reader = new StreamReader(stream))<br /> {<br /> Console.WriteLine($"Error: {reader.ReadToEnd()}");<br /> Console.ReadKey();<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> }</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124050:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer" width="100%"><tr><td>Что мешает установить сертификат УЦ в правильное хранилище - доверенные корневые? Root.</td></tr></table>2021-04-06T14:01:32+03:002021-04-06T14:01:32+03:00Андрей *<table class="content postContainer" width="100%"><tr><td>Что мешает установить сертификат УЦ в правильное хранилище - доверенные корневые? Root.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124049:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer_Alt" width="100%"><tr><td>Я на сервере по ссылке, которую вы приводите, не могу установить выпущенный сертификат. Пишет ошибку:<br /><br /><strong>Запрошенный вами сертификат был вам выдан.<br /><br /> Установить этот сертификат<br />Данный ЦС не является доверенным. Чтобы доверять сертификатам, выданным этим центром сертификации, установите этот сертификат ЦС<br /><br />Выпуск</strong><br /><br />Я устанавливаю предлагаемый сертификат для решения конфликта, и он появляется в реестре сертификатов в разделе Personal, но установка полученного сертификата из браузера проходит с той же ошибкой Данный ЦС не является доверенным. Несколько попыток повторить действия приводят к тем же результатам.<br /></td></tr></table>2021-04-06T13:57:37+03:002021-04-06T13:57:37+03:00itturism<table class="content postContainer_Alt" width="100%"><tr><td>Я на сервере по ссылке, которую вы приводите, не могу установить выпущенный сертификат. Пишет ошибку:<br /><br /><strong>Запрошенный вами сертификат был вам выдан.<br /><br /> Установить этот сертификат<br />Данный ЦС не является доверенным. Чтобы доверять сертификатам, выданным этим центром сертификации, установите этот сертификат ЦС<br /><br />Выпуск</strong><br /><br />Я устанавливаю предлагаемый сертификат для решения конфликта, и он появляется в реестре сертификатов в разделе Personal, но установка полученного сертификата из браузера проходит с той же ошибкой Данный ЦС не является доверенным. Несколько попыток повторить действия приводят к тем же результатам.<br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124047:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: itturism <a href="/forum2/default.aspx?g=posts&m=124046#post124046"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Я запрашиваю так как на слайде по адресу <a rel="nofollow" href="https://www.cryptopro.ru/certsrv/certrqma.asp" title="https://www.cryptopro.ru/certsrv/certrqma.asp">https://www.cryptopro.ru/certsrv/certrqma.asp</a> . и смотрю потом в свойствах полученного сертификата [attach]9586[/attach]<br /></div></div><br /><br />1. Старая инструкция. Вы обращаетесь к УЦ с ГОСТ-2001, получаете личный сертификат с 2012, но смотрите в разделе алгоритм УЦ, а не свой. <br />2. Используйте УЦ с ГОСТ 2012, ссылка выше.<br /><br />3. Уточните у альфа банка, они до сих пор используют 2001 ГОСТ или перешли на 2012?</td></tr></table>2021-04-06T12:02:05+03:002021-04-06T12:02:05+03:00Андрей *<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: itturism <a href="/forum2/default.aspx?g=posts&m=124046#post124046"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Я запрашиваю так как на слайде по адресу <a rel="nofollow" href="https://www.cryptopro.ru/certsrv/certrqma.asp" title="https://www.cryptopro.ru/certsrv/certrqma.asp">https://www.cryptopro.ru/certsrv/certrqma.asp</a> . и смотрю потом в свойствах полученного сертификата [attach]9586[/attach]<br /></div></div><br /><br />1. Старая инструкция. Вы обращаетесь к УЦ с ГОСТ-2001, получаете личный сертификат с 2012, но смотрите в разделе алгоритм УЦ, а не свой. <br />2. Используйте УЦ с ГОСТ 2012, ссылка выше.<br /><br />3. Уточните у альфа банка, они до сих пор используют 2001 ГОСТ или перешли на 2012?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124046:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer_Alt" width="100%"><tr><td>Я запрашиваю так как на слайде по адресу <a rel="nofollow" href="https://www.cryptopro.ru/certsrv/certrqma.asp" title="https://www.cryptopro.ru/certsrv/certrqma.asp">https://www.cryptopro.ru/certsrv/certrqma.asp</a> . и смотрю потом в свойствах полученного сертификата [attach]9586[/attach]<br /></td></tr></table>2021-04-06T11:47:21+03:002021-04-06T11:47:21+03:00itturism<table class="content postContainer_Alt" width="100%"><tr><td>Я запрашиваю так как на слайде по адресу <a rel="nofollow" href="https://www.cryptopro.ru/certsrv/certrqma.asp" title="https://www.cryptopro.ru/certsrv/certrqma.asp">https://www.cryptopro.ru/certsrv/certrqma.asp</a> . и смотрю потом в свойствах полученного сертификата [attach]9586[/attach]<br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124045:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer" width="100%"><tr><td><a rel="nofollow" href="http://testgost2012.cryptopro.ru/certsrv/" title="http://testgost2012.cryptopro.ru/certsrv/">http://testgost2012.cryptopro.ru/certsrv/</a></td></tr></table>2021-04-06T11:42:06+03:002021-04-06T11:42:06+03:00Андрей *<table class="content postContainer" width="100%"><tr><td><a rel="nofollow" href="http://testgost2012.cryptopro.ru/certsrv/" title="http://testgost2012.cryptopro.ru/certsrv/">http://testgost2012.cryptopro.ru/certsrv/</a></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124044:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: itturism <a href="/forum2/default.aspx?g=posts&m=124043#post124043"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можно у вас тогда спросить вот что.<br />Я при генерации сертификата явно задаю алогритм 2012, получаю файл cer. Затем я этот файл переношу на компьютер где нет крипто про и когда открываю сертификат вижу Алгоритм 1.2.643.2.2.3<br />В документации сказано что это szOID_CP_GOST_R3411_R3410EL "1.2.643.2.2.3" Алгоритм цифровой подписи ГОСТ Р 34.10-2001<br /><br />[attach]9585[/attach]<br /><br />Тогда почему не работает подписание как в примере банка? 2001</div></div><br /><br />потому что запрашиваете в УЦ с 2001 и смотрите на его алгоритм?</td></tr></table>2021-04-06T11:41:13+03:002021-04-06T11:41:13+03:00Андрей *<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: itturism <a href="/forum2/default.aspx?g=posts&m=124043#post124043"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Можно у вас тогда спросить вот что.<br />Я при генерации сертификата явно задаю алогритм 2012, получаю файл cer. Затем я этот файл переношу на компьютер где нет крипто про и когда открываю сертификат вижу Алгоритм 1.2.643.2.2.3<br />В документации сказано что это szOID_CP_GOST_R3411_R3410EL "1.2.643.2.2.3" Алгоритм цифровой подписи ГОСТ Р 34.10-2001<br /><br />[attach]9585[/attach]<br /><br />Тогда почему не работает подписание как в примере банка? 2001</div></div><br /><br />потому что запрашиваете в УЦ с 2001 и смотрите на его алгоритм?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124043:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer" width="100%"><tr><td>Можно у вас тогда спросить вот что.<br />Я при генерации сертификата явно задаю алогритм 2012, получаю файл cer. Затем я этот файл переношу на компьютер где нет крипто про и когда открываю сертификат вижу Алгоритм 1.2.643.2.2.3<br />В документации сказано что это szOID_CP_GOST_R3411_R3410EL "1.2.643.2.2.3" Алгоритм цифровой подписи ГОСТ Р 34.10-2001<br /><br />[attach]9585[/attach]<br /><br />Тогда почему не работает подписание как в примере банка? 2001</td></tr></table>2021-04-06T11:37:00+03:002021-04-06T11:37:00+03:00itturism<table class="content postContainer" width="100%"><tr><td>Можно у вас тогда спросить вот что.<br />Я при генерации сертификата явно задаю алогритм 2012, получаю файл cer. Затем я этот файл переношу на компьютер где нет крипто про и когда открываю сертификат вижу Алгоритм 1.2.643.2.2.3<br />В документации сказано что это szOID_CP_GOST_R3411_R3410EL "1.2.643.2.2.3" Алгоритм цифровой подписи ГОСТ Р 34.10-2001<br /><br />[attach]9585[/attach]<br /><br />Тогда почему не работает подписание как в примере банка? 2001</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124042:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо. Подробненько.<br /><br />CanonicalizationMethod сделал как в примере. в итоге вот такой набор не дает ошибок подписи, но банк всё равно отвергает подпись.<br /> reference.DigestMethod = CPSignedXml.XmlDsigGost3411_2012_256Url;<br /> signedXml.SignedInfo.SignatureMethod = CPSignedXml.XmlDsigGost3410_2012_256Url;<br /> signedXml.SignedInfo.CanonicalizationMethod= SignedXml.XmlDsigExcC14NTransformUrl;<br /><br />Уже не знаю что и попробовать.</td></tr></table>2021-04-06T11:23:39+03:002021-04-06T11:23:39+03:00itturism<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо. Подробненько.<br /><br />CanonicalizationMethod сделал как в примере. в итоге вот такой набор не дает ошибок подписи, но банк всё равно отвергает подпись.<br /> reference.DigestMethod = CPSignedXml.XmlDsigGost3411_2012_256Url;<br /> signedXml.SignedInfo.SignatureMethod = CPSignedXml.XmlDsigGost3410_2012_256Url;<br /> signedXml.SignedInfo.CanonicalizationMethod= SignedXml.XmlDsigExcC14NTransformUrl;<br /><br />Уже не знаю что и попробовать.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124035:1Parameter must support GOST R 34.10-2001 algorithm<table class="content postContainer" width="100%"><tr><td>Добрый день.<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Сертификат которым я подписываю выпущен и поддерживает:<br />Signature Algoritm GOST R 34.11/34.10-2001<br />Signature hash algoritm GOST R 34.11-94</div></div>Эти строки показывают алгоритм ключа УЦ, если смените УЦ на "свежий", будет другой алгоритм. Более корректно смотреть строку алгоритма открытого ключа.<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Подскажите пожалуйста, что я делаю не так</div></div>Выделенное в примере банка это алгоритмы использовавшиеся в схеме подписания ГОСТ-2001 (подписание гост-2001 и хэш гост-94). Возможно банк просто не обновил пример.<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>reference.DigestMethod = CPSignedXml.XmlDsigGost3411_2012_256Url;<br />signedXml.SignedInfo.SignatureMethod = CPSignedXml.XmlDsigGost3410_2012_256Url;</div></div>Это как раз корректный алгоритм SignatureMethod для подписи гост-2012. Если не задаете явно, то вероятно автоматически выбран по алгоритму ключа (открытого ключа в сертификате или закрытого ключа). Попробуйте сначала разобраться с signedXml.SignedInfo.CanonicalizationMethod при таких константах. Его нужно задать явно - аналогично тому как делали для трансформа c14n. В примере Exclusive вариант c14n, а автоматом выбрался Inclusive вариант c14n.<br /><br />P.S. При выборе констант "без 2012" Вы получаете исключение, потому что ключ у Вас гост-2012, а SignatureMethod указан гост-2001. SignatureMethod должен быть согласован с алгоритмом ключа.<br />На актуальной версии КриптоПро Гост-2001 запрещен к генерации ключа и использованию ключа для подписи (то есть если "сильно надо", например, для проверки, то КриптоПро 3.6 сможет им подписать, но эта версия почти наверняка несовместима с 2019 сервером, пробуйте на Семерке).<br /><br /><br /><br /></td></tr></table>2021-04-06T08:27:53+03:002021-04-06T08:27:53+03:00two_oceans<table class="content postContainer" width="100%"><tr><td>Добрый день.<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Сертификат которым я подписываю выпущен и поддерживает:<br />Signature Algoritm GOST R 34.11/34.10-2001<br />Signature hash algoritm GOST R 34.11-94</div></div>Эти строки показывают алгоритм ключа УЦ, если смените УЦ на "свежий", будет другой алгоритм. Более корректно смотреть строку алгоритма открытого ключа.<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Подскажите пожалуйста, что я делаю не так</div></div>Выделенное в примере банка это алгоритмы использовавшиеся в схеме подписания ГОСТ-2001 (подписание гост-2001 и хэш гост-94). Возможно банк просто не обновил пример.<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>reference.DigestMethod = CPSignedXml.XmlDsigGost3411_2012_256Url;<br />signedXml.SignedInfo.SignatureMethod = CPSignedXml.XmlDsigGost3410_2012_256Url;</div></div>Это как раз корректный алгоритм SignatureMethod для подписи гост-2012. Если не задаете явно, то вероятно автоматически выбран по алгоритму ключа (открытого ключа в сертификате или закрытого ключа). Попробуйте сначала разобраться с signedXml.SignedInfo.CanonicalizationMethod при таких константах. Его нужно задать явно - аналогично тому как делали для трансформа c14n. В примере Exclusive вариант c14n, а автоматом выбрался Inclusive вариант c14n.<br /><br />P.S. При выборе констант "без 2012" Вы получаете исключение, потому что ключ у Вас гост-2012, а SignatureMethod указан гост-2001. SignatureMethod должен быть согласован с алгоритмом ключа.<br />На актуальной версии КриптоПро Гост-2001 запрещен к генерации ключа и использованию ключа для подписи (то есть если "сильно надо", например, для проверки, то КриптоПро 3.6 сможет им подписать, но эта версия почти наверняка несовместима с 2019 сервером, пробуйте на Семерке).<br /><br /><br /><br /></td></tr></table>