Atom Лента - Форум КриптоПро - Тема:Модифицированный EncryptedXml - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:ModificirovannyjjEncryptedXml-10:1Copyright 2024 Форум КриптоПро2024-03-28T13:25:22Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruАртём Макаровhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=44532&name=Артём МакаровАртём Макаровhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=44532&name=Артём Макаровarchimed7592https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=32563&name=archimed7592Артём Макаровhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=44532&name=Артём МакаровАртём Макаровhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=44532&name=Артём МакаровАртём Макаровhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=44532&name=Артём Макаровarchimed7592https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=32563&name=archimed7592archimed7592https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=32563&name=archimed7592archimed7592https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=32563&name=archimed7592Артём Макаровhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=44532&name=Артём Макаровarchimed7592https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=32563&name=archimed7592YetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid120582:1Модифицированный EncryptedXml<table class="content postContainer_Alt" width="100%"><tr><td>Релиз будет позже, но с скорее всего с этой же правкой, если не обнаружим каких либо вылезших ошибок дополнительно.</td></tr></table>2020-11-17T15:17:02+03:002020-11-17T15:17:02+03:00Артём Макаров<table class="content postContainer_Alt" width="100%"><tr><td>Релиз будет позже, но с скорее всего с этой же правкой, если не обнаружим каких либо вылезших ошибок дополнительно.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120580:1Модифицированный EncryptedXml<table class="content postContainer" width="100%"><tr><td>Тестовая сборка работает, спасибо!<br />Будет ли позднее боевая сборка или можно эту тестовую использовать в проде?</td></tr></table>2020-11-17T15:12:47+03:002020-11-17T15:12:47+03:00archimed7592<table class="content postContainer" width="100%"><tr><td>Тестовая сборка работает, спасибо!<br />Будет ли позднее боевая сборка или можно эту тестовую использовать в проде?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120570:1Модифицированный EncryptedXml<table class="content postContainer_Alt" width="100%"><tr><td>День добрый.<br /><br />Внесли некоторые изменения для осуществления корректной работы вашего сценария. Для rsa сценария должен корректно вызываться перегруженный в наследниках метод. Тестовая сборка во вложении, пароль 1.<br /><br />После обновления обязательна перезагрузка. Если по рекомендациям ранее создавали новое значение в реестре - его необходимо удалить.<br /><br />[attach]9247[/attach]</td></tr></table>2020-11-17T10:07:07+03:002020-11-17T10:07:07+03:00Артём Макаров<table class="content postContainer_Alt" width="100%"><tr><td>День добрый.<br /><br />Внесли некоторые изменения для осуществления корректной работы вашего сценария. Для rsa сценария должен корректно вызываться перегруженный в наследниках метод. Тестовая сборка во вложении, пароль 1.<br /><br />После обновления обязательна перезагрузка. Если по рекомендациям ранее создавали новое значение в реестре - его необходимо удалить.<br /><br />[attach]9247[/attach]</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120533:1Модифицированный EncryptedXml<table class="content postContainer" width="100%"><tr><td>Нет, всё ещё обнаружилась проблема, при установке данного флага. Посмотрим дополнительно, что ещё можно сделать.</td></tr></table>2020-11-16T12:05:46+03:002020-11-16T12:05:46+03:00Артём Макаров<table class="content postContainer" width="100%"><tr><td>Нет, всё ещё обнаружилась проблема, при установке данного флага. Посмотрим дополнительно, что ещё можно сделать.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120528:1Модифицированный EncryptedXml<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо. Ошибку воспроизвели через DataProtection. <br /><br />Проблема в том, что при использовании сборок core в .net Framework 4.8 используются и зависимости из core. Так как некоторые методы в core изменились, относительно 4.8 (в частности методы Security.Xml, в частности виновник вашей ошибки DecryptEncryptedKey) при их исправлении в КриптоПро.NET используется их старая логика (из .net Framework), которой видимо недостаточно для вашего сценария. В результате метод DecryptEncryptedKey возвращает null, ибо именно так повёл бы себя исправленный метод на .net Framework 4.8 в данном контексте.<br /><br />Как лучше обойти данный момент - пока подумаем. Временно и экспериментально должна помочь правка реестра <br /><br />Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CProPatches\NetDetStarter40\XML<br /><br />Добавьте строковый параметр HiVersion со значением 4.8. Сохраните и перезапустите машину. В результате исправления не должны устанавливаться на сборки Security.Xml версии 5.0<br /><br />[attach]9242[/attach]<br /><br />Дополнение - не поможет. Отключит исправления на xml для 4.8. Ищем другое решение.</td></tr></table>2020-11-16T12:06:33+03:002020-11-16T12:06:33+03:00Артём Макаров<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо. Ошибку воспроизвели через DataProtection. <br /><br />Проблема в том, что при использовании сборок core в .net Framework 4.8 используются и зависимости из core. Так как некоторые методы в core изменились, относительно 4.8 (в частности методы Security.Xml, в частности виновник вашей ошибки DecryptEncryptedKey) при их исправлении в КриптоПро.NET используется их старая логика (из .net Framework), которой видимо недостаточно для вашего сценария. В результате метод DecryptEncryptedKey возвращает null, ибо именно так повёл бы себя исправленный метод на .net Framework 4.8 в данном контексте.<br /><br />Как лучше обойти данный момент - пока подумаем. Временно и экспериментально должна помочь правка реестра <br /><br />Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\CProPatches\NetDetStarter40\XML<br /><br />Добавьте строковый параметр HiVersion со значением 4.8. Сохраните и перезапустите машину. В результате исправления не должны устанавливаться на сборки Security.Xml версии 5.0<br /><br />[attach]9242[/attach]<br /><br />Дополнение - не поможет. Отключит исправления на xml для 4.8. Ищем другое решение.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120527:1Модифицированный EncryptedXml<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: archimed7592 <a href="/forum2/default.aspx?g=posts&m=120446#post120446"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>AspNetCore.DataProtection имеет собственный класс EncryptedXmlWithCertificateKeys, который наследуется от EncryptedXml и переопределяет GetDecryptionKey для того, чтобы можно было расшифровывать ключ не только сертификатами из хранилища, но и вручную загруженным pfx из файла.<br />Так вот, штатно всё это работает, реализация базового класса дергает GetDecryptionKey и всё ОК.<br />А в случае с установленным КриптоПро.NET GetDecryptionKey не дергается и ничего не работает.<br /></div></div><br /><br /><br />Прошу прощения, запутал вас. В DataProtection переопределен DecryptEncryptedKey и он как раз не дергается. А GetDecryptionKey я сам переопределял, когда пытался отладить проблему.</td></tr></table>2020-11-16T11:24:24+03:002020-11-16T11:24:24+03:00archimed7592<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: archimed7592 <a href="/forum2/default.aspx?g=posts&m=120446#post120446"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>AspNetCore.DataProtection имеет собственный класс EncryptedXmlWithCertificateKeys, который наследуется от EncryptedXml и переопределяет GetDecryptionKey для того, чтобы можно было расшифровывать ключ не только сертификатами из хранилища, но и вручную загруженным pfx из файла.<br />Так вот, штатно всё это работает, реализация базового класса дергает GetDecryptionKey и всё ОК.<br />А в случае с установленным КриптоПро.NET GetDecryptionKey не дергается и ничего не работает.<br /></div></div><br /><br /><br />Прошу прощения, запутал вас. В DataProtection переопределен DecryptEncryptedKey и он как раз не дергается. А GetDecryptionKey я сам переопределял, когда пытался отладить проблему.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120526:1Модифицированный EncryptedXml<table class="content postContainer_Alt" width="100%"><tr><td>Сделал пример, который вообще не использует DataProtection и демонстрирует проблему.<br /><br />Код не требует ни pfx ни чего-либо ещё и содержит выжимку зашифрованного ключа из DataProtection.<br />.NET Core вариант кидает исключение "ОК", что подтверждает вход в переопредленный DecryptEncryptedKey.<br />.NET FW вариант кидает исключение Unhandled Exception: System.Security.Cryptography.CryptographicException: Unable to retrieve the decryption key. at System.Security.Cryptography.Xml.EncryptedXml.DecryptDocument(), т.е. до DecryptEncryptedKey дело не доходит.<br /><br />Полный solution: <a rel="nofollow" href="https://1drv.ms/u/s!At6LBizAApN_q2oTscxyBY-uWfza?e=BIgVAB" title="https://1drv.ms/u/s!At6LBizAApN_q2oTscxyBY-uWfza?e=BIgVAB">CryptoProDotNetEncryptedXml</a><br />Сюда скопирую тело Main, чтобы можно было без скачивания оценить ситуацию.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace CryptoProDotNetEncryptedXml
{
class Program
{
static void Main(string[] args)
{
var xml = @"
<EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element' xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod Algorithm='http://www.w3.org/2001/04/xmlenc#aes256-cbc' />
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<EncryptedKey xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod Algorithm='http://www.w3.org/2001/04/xmlenc#rsa-1_5' />
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<X509Data>
<X509Certificate>MIIFOzCCAyOgAwIBAgIUNahT4sTQIh1TbBO2XM+X5B5w0g4wDQYJKoZIhvcNAQELBQAwJTEjMCEGA1UEAwwaRGF0YVByb3RlY3Rpb25UZXN0MjAyMDExMTAwHhcNMjAxMTEwMTg0NDI5WhcNMjAxMTExMTg0NDI5WjAlMSMwIQYDVQQDDBpEYXRhUHJvdGVjdGlvblRlc3QyMDIwMTExMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKJ/i1qszxcA3dguZ4q8d7BDYp05RAHn+keVyJleQhxK7O9Hy8tdIPxZOIwhUVYdds5UOMpke45z9JdnrOmlrge7hzSyKw+AXZYF7oJUgD9JZ08r1bTOW6bMBKfgW9u9ORwEh2Ge0cKEgsjL8JwqRqR71dy6MhyxnEmNf2MaoX0EOrgXjYplnFjHXhrl1lto5JwjW7gsLjam9j0uiRQp0K8uvgEYbu3hcHzVabmaJs0lqgiByUPxmOKIjkZezyPdZgYUpWoZZ/2w2OFSZGPyHF8X6Xb69bRWmpZp2d2cXvjrszJxwMFUzAHTPxdwUsQ4m0SLE+ix6OKcnn4Pdj4xj8SrxUJObSkN30nqna3BSWR/b5dfCpa8fh53wF5agFMZVHKjRp7Q1pMSQ40z4rOGs4N0cLk1tR/C6FZzePPH8KtjtPu7l4Fumt6kYHeATOV/zAt+D9NRMhMu0sn/KjwPY6lgWRqkO42B6CMPRZds7aOsgYPcI0+1oOqSJu0o6ktBSZfrTqipgdTjL4c+/GRef40OOidVFHJPjKxIuKJu/DUBVkOTJk0cot06ycF7hgl82Z3EQo8D2oiijlJz9n0+CdpXhKbTz50sX70IRt591fe/JpbdV8XE7ZEFUaikvcQgrUtOt/YkQgJ+OfFQYJdat1aUqyRoMlTECt84b6k/ZW3zAgMBAAGjYzBhMB0GA1UdDgQWBBTgQsl0/jVqoQPkovFx2cyek04/UTAfBgNVHSMEGDAWgBTgQsl0/jVqoQPkovFx2cyek04/UTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAgEAkvK9N7hmpv7ui88QmJXO2LCXRtBJLVq9uT222rXAnq2lS3G4oKsvA6cXMaa0eds9MCMlHbZKjXWzolfQXTO9ByG7y4fjFmLBZ6z31QJXS4wzc92ILeJMYkKECqaXgW8qbGug0kX2d9ucAMC1C8QjH5jEC2c6bKOSsXFMZluQyBcuETzIkqJ7+TIPk4jxDMWyoJmKUV9R3Td8vPhztjIGSptvJxYsgypOkQv4XjJhvbi0GhlKZeQfjFnPeeZe7DVPIceoIbO/quTqZQsp5EBDqP2/C1gXROFumXgyKYmMhLPmieUTiQcFyomhA6lkcPWwEvgqVYeStaYUF1q15zjIKirSyRrbx9QKYEwVdmIShTt0A3Q3yz+CCxVXFMkS+YPlCWoKXfNwLx2vIctvJhAv2b3ABJkLnraxd8gShvpeQwchiZodOPz/EQB1f3qm4hJEmPNeZVRcgGsAWczQ0o9iLRB8Nw4I9K+m5Q7kohLopxROLA5MYSI/ESOH3d2SkfVyVQYhb9YBtVWgAk1SVBBIPVOujef3xE93Yy81dm4y3oGlEUwS8QatlRY+iIrFlijUIhq4buRkg26RQnmJ+nBFTB7s+qVOU+o8BmqQaUwgx3/qV1JeAPlhuWe3ou+r2/QzIvRcXsLQrpmo+bJZlCZ+rs5KFgj6yMbJE+cvhlK/8ew=</X509Certificate>
</X509Data>
</KeyInfo>
<CipherData>
<CipherValue>BCq00jehpyhkWRMv3MuTL9wueSUWXGjYMkJguiaLJ1z6f+k1rmB2xsR2FgsptdQU4whqA07PIw00Df7GWo77kizYtdndRWKB56HB9t/NA7PzmCM5WyP45m+oM1G/yPBrKqMBXjJEhcq4nVCS2EogMI5D1kB9UgTjrlP5JTVHt41dsDNfZKFnhHNJLq1qqr8aw40Oy1lC2QTz3yYoy/c9HonLaQDzlKivfmA1e9aJbaqqLuD0EWco1SCKFvrDE4+MsH5+yajSlMRe97KUev7TVpSHePDLSVFuMnAzMcFjUO+qZRHZL9RU5ubMyDWqSw9YPTSCRlvQOmFYhHrlWPDOhUHc5SBXMUX4lmF1OaZDyjGeO3afJYO73cgg2IQxXTiGGUi95G0xDp8gVUzhHk9+1rzYc+aBCL6IueZL1dzikC8s1t56vIgc9Ar4CHOYuW/788/A1gBelGvHR9bRFqpNsu+kN4svqHLTtm2kMEoOXsmaPtlT78HHlsaN06UQ+StRLnyKukCv3ZWGlHNf7z5Csv5C/RfvCICcApVn5HQP7Fup9OQK1SI5LfkwIzqQRs3MaBs+W2RltqpT8jGLYYpOZeLmzfsifIFhE8Mc6dB/YX+ZZJ+RA9Rovqx16FYFsgkDOaPLMg01jIoplmatURtww225Ks9Q6YPICYKPeb2mwvc=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>AJp357+F98MEg04+IbtCM+mF0CvxPalEHya/SVK8PynDt4wW5xr9CKtYc3AWIqKgiikQGoxe1CFR4G6cKDQwV3lF0UvLEjJWjZSiMSTY+1jbEmnk8RTMfCjlu7/FdgnXNErmWBb0bdASTlaCCXmSA/qakgBkC0KpMmBbg9HKa6Z+5NE/S2Ipb5mxZgGhwWOc/tfTg9CB0fE8NEW8CP9u7RZ+j690CoFWk7Q46LyigMtqXNgN6XqjQ886uyhKFwmjX8auE48Cep9she7NUA3asJmKPRsNbraQOCvUaOeoTHOqoWp8gtk5sd7Q5ducUaTHzBUEV53PfrtKneS69hm9XduT0AvbBQXD5M5z7nH+Sv/wWir4HBtFJOUIEh2kKZZ9Es2CKb2abkbCqLCFjsNvyg==</CipherValue>
</CipherData>
</EncryptedData>";
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
var encryptedXml =
new EncryptedXml2(xmlDocument);
encryptedXml.DecryptDocument();
}
}
class EncryptedXml2
: EncryptedXml
{
public EncryptedXml2(XmlDocument xmlDocument)
: base(xmlDocument)
{ }
public override byte[] DecryptEncryptedKey(EncryptedKey encryptedKey)
{
throw new Exception("OK");
}
}
}
</code></pre>
</div></div></td></tr></table>2020-11-16T11:20:58+03:002020-11-16T11:20:58+03:00archimed7592<table class="content postContainer_Alt" width="100%"><tr><td>Сделал пример, который вообще не использует DataProtection и демонстрирует проблему.<br /><br />Код не требует ни pfx ни чего-либо ещё и содержит выжимку зашифрованного ключа из DataProtection.<br />.NET Core вариант кидает исключение "ОК", что подтверждает вход в переопредленный DecryptEncryptedKey.<br />.NET FW вариант кидает исключение Unhandled Exception: System.Security.Cryptography.CryptographicException: Unable to retrieve the decryption key. at System.Security.Cryptography.Xml.EncryptedXml.DecryptDocument(), т.е. до DecryptEncryptedKey дело не доходит.<br /><br />Полный solution: <a rel="nofollow" href="https://1drv.ms/u/s!At6LBizAApN_q2oTscxyBY-uWfza?e=BIgVAB" title="https://1drv.ms/u/s!At6LBizAApN_q2oTscxyBY-uWfza?e=BIgVAB">CryptoProDotNetEncryptedXml</a><br />Сюда скопирую тело Main, чтобы можно было без скачивания оценить ситуацию.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace CryptoProDotNetEncryptedXml
{
class Program
{
static void Main(string[] args)
{
var xml = @"
<EncryptedData Type='http://www.w3.org/2001/04/xmlenc#Element' xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod Algorithm='http://www.w3.org/2001/04/xmlenc#aes256-cbc' />
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<EncryptedKey xmlns='http://www.w3.org/2001/04/xmlenc#'>
<EncryptionMethod Algorithm='http://www.w3.org/2001/04/xmlenc#rsa-1_5' />
<KeyInfo xmlns='http://www.w3.org/2000/09/xmldsig#'>
<X509Data>
<X509Certificate>MIIFOzCCAyOgAwIBAgIUNahT4sTQIh1TbBO2XM+X5B5w0g4wDQYJKoZIhvcNAQELBQAwJTEjMCEGA1UEAwwaRGF0YVByb3RlY3Rpb25UZXN0MjAyMDExMTAwHhcNMjAxMTEwMTg0NDI5WhcNMjAxMTExMTg0NDI5WjAlMSMwIQYDVQQDDBpEYXRhUHJvdGVjdGlvblRlc3QyMDIwMTExMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKJ/i1qszxcA3dguZ4q8d7BDYp05RAHn+keVyJleQhxK7O9Hy8tdIPxZOIwhUVYdds5UOMpke45z9JdnrOmlrge7hzSyKw+AXZYF7oJUgD9JZ08r1bTOW6bMBKfgW9u9ORwEh2Ge0cKEgsjL8JwqRqR71dy6MhyxnEmNf2MaoX0EOrgXjYplnFjHXhrl1lto5JwjW7gsLjam9j0uiRQp0K8uvgEYbu3hcHzVabmaJs0lqgiByUPxmOKIjkZezyPdZgYUpWoZZ/2w2OFSZGPyHF8X6Xb69bRWmpZp2d2cXvjrszJxwMFUzAHTPxdwUsQ4m0SLE+ix6OKcnn4Pdj4xj8SrxUJObSkN30nqna3BSWR/b5dfCpa8fh53wF5agFMZVHKjRp7Q1pMSQ40z4rOGs4N0cLk1tR/C6FZzePPH8KtjtPu7l4Fumt6kYHeATOV/zAt+D9NRMhMu0sn/KjwPY6lgWRqkO42B6CMPRZds7aOsgYPcI0+1oOqSJu0o6ktBSZfrTqipgdTjL4c+/GRef40OOidVFHJPjKxIuKJu/DUBVkOTJk0cot06ycF7hgl82Z3EQo8D2oiijlJz9n0+CdpXhKbTz50sX70IRt591fe/JpbdV8XE7ZEFUaikvcQgrUtOt/YkQgJ+OfFQYJdat1aUqyRoMlTECt84b6k/ZW3zAgMBAAGjYzBhMB0GA1UdDgQWBBTgQsl0/jVqoQPkovFx2cyek04/UTAfBgNVHSMEGDAWgBTgQsl0/jVqoQPkovFx2cyek04/UTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAgEAkvK9N7hmpv7ui88QmJXO2LCXRtBJLVq9uT222rXAnq2lS3G4oKsvA6cXMaa0eds9MCMlHbZKjXWzolfQXTO9ByG7y4fjFmLBZ6z31QJXS4wzc92ILeJMYkKECqaXgW8qbGug0kX2d9ucAMC1C8QjH5jEC2c6bKOSsXFMZluQyBcuETzIkqJ7+TIPk4jxDMWyoJmKUV9R3Td8vPhztjIGSptvJxYsgypOkQv4XjJhvbi0GhlKZeQfjFnPeeZe7DVPIceoIbO/quTqZQsp5EBDqP2/C1gXROFumXgyKYmMhLPmieUTiQcFyomhA6lkcPWwEvgqVYeStaYUF1q15zjIKirSyRrbx9QKYEwVdmIShTt0A3Q3yz+CCxVXFMkS+YPlCWoKXfNwLx2vIctvJhAv2b3ABJkLnraxd8gShvpeQwchiZodOPz/EQB1f3qm4hJEmPNeZVRcgGsAWczQ0o9iLRB8Nw4I9K+m5Q7kohLopxROLA5MYSI/ESOH3d2SkfVyVQYhb9YBtVWgAk1SVBBIPVOujef3xE93Yy81dm4y3oGlEUwS8QatlRY+iIrFlijUIhq4buRkg26RQnmJ+nBFTB7s+qVOU+o8BmqQaUwgx3/qV1JeAPlhuWe3ou+r2/QzIvRcXsLQrpmo+bJZlCZ+rs5KFgj6yMbJE+cvhlK/8ew=</X509Certificate>
</X509Data>
</KeyInfo>
<CipherData>
<CipherValue>BCq00jehpyhkWRMv3MuTL9wueSUWXGjYMkJguiaLJ1z6f+k1rmB2xsR2FgsptdQU4whqA07PIw00Df7GWo77kizYtdndRWKB56HB9t/NA7PzmCM5WyP45m+oM1G/yPBrKqMBXjJEhcq4nVCS2EogMI5D1kB9UgTjrlP5JTVHt41dsDNfZKFnhHNJLq1qqr8aw40Oy1lC2QTz3yYoy/c9HonLaQDzlKivfmA1e9aJbaqqLuD0EWco1SCKFvrDE4+MsH5+yajSlMRe97KUev7TVpSHePDLSVFuMnAzMcFjUO+qZRHZL9RU5ubMyDWqSw9YPTSCRlvQOmFYhHrlWPDOhUHc5SBXMUX4lmF1OaZDyjGeO3afJYO73cgg2IQxXTiGGUi95G0xDp8gVUzhHk9+1rzYc+aBCL6IueZL1dzikC8s1t56vIgc9Ar4CHOYuW/788/A1gBelGvHR9bRFqpNsu+kN4svqHLTtm2kMEoOXsmaPtlT78HHlsaN06UQ+StRLnyKukCv3ZWGlHNf7z5Csv5C/RfvCICcApVn5HQP7Fup9OQK1SI5LfkwIzqQRs3MaBs+W2RltqpT8jGLYYpOZeLmzfsifIFhE8Mc6dB/YX+ZZJ+RA9Rovqx16FYFsgkDOaPLMg01jIoplmatURtww225Ks9Q6YPICYKPeb2mwvc=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>AJp357+F98MEg04+IbtCM+mF0CvxPalEHya/SVK8PynDt4wW5xr9CKtYc3AWIqKgiikQGoxe1CFR4G6cKDQwV3lF0UvLEjJWjZSiMSTY+1jbEmnk8RTMfCjlu7/FdgnXNErmWBb0bdASTlaCCXmSA/qakgBkC0KpMmBbg9HKa6Z+5NE/S2Ipb5mxZgGhwWOc/tfTg9CB0fE8NEW8CP9u7RZ+j690CoFWk7Q46LyigMtqXNgN6XqjQ886uyhKFwmjX8auE48Cep9she7NUA3asJmKPRsNbraQOCvUaOeoTHOqoWp8gtk5sd7Q5ducUaTHzBUEV53PfrtKneS69hm9XduT0AvbBQXD5M5z7nH+Sv/wWir4HBtFJOUIEh2kKZZ9Es2CKb2abkbCqLCFjsNvyg==</CipherValue>
</CipherData>
</EncryptedData>";
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
var encryptedXml =
new EncryptedXml2(xmlDocument);
encryptedXml.DecryptDocument();
}
}
class EncryptedXml2
: EncryptedXml
{
public EncryptedXml2(XmlDocument xmlDocument)
: base(xmlDocument)
{ }
public override byte[] DecryptEncryptedKey(EncryptedKey encryptedKey)
{
throw new Exception("OK");
}
}
}
</code></pre>
</div></div></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120517:1Модифицированный EncryptedXml<table class="content postContainer" width="100%"><tr><td>Добрый день.<br /><br />Вот solution на котором я экспериментирую: <a rel="nofollow" href="https://1drv.ms/u/s!At6LBizAApN_q2gIAE1WJlQYUoZv?e=e3jfgs" title="https://1drv.ms/u/s!At6LBizAApN_q2gIAE1WJlQYUoZv?e=e3jfgs">sln</a><br />alarm info: <a rel="nofollow" href="https://1drv.ms/u/s!At6LBizAApN_q2nTmpqfUqtPngFg?e=COlbN9" title="https://1drv.ms/u/s!At6LBizAApN_q2nTmpqfUqtPngFg?e=COlbN9">osinfo</a><br />Версии на тестовой машине на которой экспериментировал (могу свободно удалять/устанавливать ПО):<br />* CSP 4.0.9975<br />* CPNet 1.0.7132.2<br /><br />Версии на машине на которой изначально столкнулся с проблемой, но не могу удалить CP.NET:<br />* CSP 5.0.11944<br />* CPNet 1.0.7132.2</td></tr></table>2020-11-16T09:05:39+03:002020-11-16T09:05:39+03:00archimed7592<table class="content postContainer" width="100%"><tr><td>Добрый день.<br /><br />Вот solution на котором я экспериментирую: <a rel="nofollow" href="https://1drv.ms/u/s!At6LBizAApN_q2gIAE1WJlQYUoZv?e=e3jfgs" title="https://1drv.ms/u/s!At6LBizAApN_q2gIAE1WJlQYUoZv?e=e3jfgs">sln</a><br />alarm info: <a rel="nofollow" href="https://1drv.ms/u/s!At6LBizAApN_q2nTmpqfUqtPngFg?e=COlbN9" title="https://1drv.ms/u/s!At6LBizAApN_q2nTmpqfUqtPngFg?e=COlbN9">osinfo</a><br />Версии на тестовой машине на которой экспериментировал (могу свободно удалять/устанавливать ПО):<br />* CSP 4.0.9975<br />* CPNet 1.0.7132.2<br /><br />Версии на машине на которой изначально столкнулся с проблемой, но не могу удалить CP.NET:<br />* CSP 5.0.11944<br />* CPNet 1.0.7132.2</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120505:1Модифицированный EncryptedXml<table class="content postContainer_Alt" width="100%"><tr><td>Добрый день. <br /><br />Пробуем воспроизвести ваш сценарий - всё отрабатывает на 4.8 с установленным КриптоПро.NET без ошибок на RSA сертификате.<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-csharp">using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.DataProtection;
namespace ConsoleApp9
{
class Program
{
static void Main(string[] args)
{
var dpp =
DataProtectionProvider.Create(
keyDirectory:
new DirectoryInfo(
@"C:\tmp\DataProtectionTestKeyStore"),
setupAction:
cfg =>
{
cfg.ProtectKeysWithCertificate(
new X509Certificate2(
fileName: @"C:\tmp\key.pfx",
password: @"super-secret-password"));
});
var dp = dpp.CreateProtector("test purpose");
var secret = dp.Protect("test secret");
Console.WriteLine(secret);
}
}
}</code></pre>
</div></div><br /><br />+ что интересно, не вижу в вашем стеке наших вызовов метода CPEncryptedXml.DecryptDocument, который мог бы всё сломать.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup">Unhandled Exception: System.Security.Cryptography.CryptographicException: Unable to retrieve the decryption key.
at System.Security.Cryptography.Xml.EncryptedXml.DecryptDocument()
at Microsoft.AspNetCore.DataProtection.XmlEncryption.EncryptedXmlDecryptor.Decrypt(XElement encryptedElement)
at Microsoft.AspNetCore.DataProtection.XmlEncryption.XmlEncryptionExtensions.DecryptElement(XElement element, IActivator activator)
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.IInternalXmlKeyManager.DeserializeDescriptorFromKeyElement(XElement keyElement)
at Microsoft.AspNetCore.DataProtection.KeyManagement.DeferredKey.<>c__DisplayClass1_0.<GetLazyDescriptorDelegate>b__0()
at System.Lazy`1.CreateValue()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyBase.get_Descriptor()
at Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngGcmAuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey key)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyBase.CreateEncryptor()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRing.KeyHolder.GetEncryptorInstance(Boolean& isRevoked)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRing.get_DefaultAuthenticatedEncryptor()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Protect(Byte[] plaintext)
at Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Protect(IDataProtector protector, String plaintext)
at ConsoleApp9.Program.Main(String[] args)</code></pre>
</div></div><br /><br />Дабы воспроизвести максимально близко к вам - соберите пожалуйста проектик, на котором воспроизводится и приложите сертификат (желательно сам pfx + пароль, или хотя бы cer).<br />Укажите также используемую версию КриптоПро.NET (желательно, чтобы была последней).<br />И на всякий случай соберите и приложите osinfo.xml (подробнее - <a rel="nofollow" href="https://cpdn.cryptopro.ru/content/cpnet/html/4ea672e7-9694-4aae-9898-f8cbc474e132.htm" title="https://cpdn.cryptopro.ru/content/cpnet/html/4ea672e7-9694-4aae-9898-f8cbc474e132.htm">https://cpdn.cryptopro.r...ae-9898-f8cbc474e132.htm</a> ):<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup">cd C:\Program Files\Crypto Pro\.NET
alarm info</code></pre>
</div></div><br />Отправить можно сюда архивом или на <a href="mailto:makarov@cryptopro.ru">makarov@cryptopro.ru</a></td></tr></table>2020-11-13T22:26:16+03:002020-11-13T22:26:16+03:00Артём Макаров<table class="content postContainer_Alt" width="100%"><tr><td>Добрый день. <br /><br />Пробуем воспроизвести ваш сценарий - всё отрабатывает на 4.8 с установленным КриптоПро.NET без ошибок на RSA сертификате.<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-csharp">using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.DataProtection;
namespace ConsoleApp9
{
class Program
{
static void Main(string[] args)
{
var dpp =
DataProtectionProvider.Create(
keyDirectory:
new DirectoryInfo(
@"C:\tmp\DataProtectionTestKeyStore"),
setupAction:
cfg =>
{
cfg.ProtectKeysWithCertificate(
new X509Certificate2(
fileName: @"C:\tmp\key.pfx",
password: @"super-secret-password"));
});
var dp = dpp.CreateProtector("test purpose");
var secret = dp.Protect("test secret");
Console.WriteLine(secret);
}
}
}</code></pre>
</div></div><br /><br />+ что интересно, не вижу в вашем стеке наших вызовов метода CPEncryptedXml.DecryptDocument, который мог бы всё сломать.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup">Unhandled Exception: System.Security.Cryptography.CryptographicException: Unable to retrieve the decryption key.
at System.Security.Cryptography.Xml.EncryptedXml.DecryptDocument()
at Microsoft.AspNetCore.DataProtection.XmlEncryption.EncryptedXmlDecryptor.Decrypt(XElement encryptedElement)
at Microsoft.AspNetCore.DataProtection.XmlEncryption.XmlEncryptionExtensions.DecryptElement(XElement element, IActivator activator)
at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager.Microsoft.AspNetCore.DataProtection.KeyManagement.Internal.IInternalXmlKeyManager.DeserializeDescriptorFromKeyElement(XElement keyElement)
at Microsoft.AspNetCore.DataProtection.KeyManagement.DeferredKey.<>c__DisplayClass1_0.<GetLazyDescriptorDelegate>b__0()
at System.Lazy`1.CreateValue()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyBase.get_Descriptor()
at Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngGcmAuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey key)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyBase.CreateEncryptor()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRing.KeyHolder.GetEncryptorInstance(Boolean& isRevoked)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRing.get_DefaultAuthenticatedEncryptor()
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Protect(Byte[] plaintext)
at Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Protect(IDataProtector protector, String plaintext)
at ConsoleApp9.Program.Main(String[] args)</code></pre>
</div></div><br /><br />Дабы воспроизвести максимально близко к вам - соберите пожалуйста проектик, на котором воспроизводится и приложите сертификат (желательно сам pfx + пароль, или хотя бы cer).<br />Укажите также используемую версию КриптоПро.NET (желательно, чтобы была последней).<br />И на всякий случай соберите и приложите osinfo.xml (подробнее - <a rel="nofollow" href="https://cpdn.cryptopro.ru/content/cpnet/html/4ea672e7-9694-4aae-9898-f8cbc474e132.htm" title="https://cpdn.cryptopro.ru/content/cpnet/html/4ea672e7-9694-4aae-9898-f8cbc474e132.htm">https://cpdn.cryptopro.r...ae-9898-f8cbc474e132.htm</a> ):<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup">cd C:\Program Files\Crypto Pro\.NET
alarm info</code></pre>
</div></div><br />Отправить можно сюда архивом или на <a href="mailto:makarov@cryptopro.ru">makarov@cryptopro.ru</a></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid120446:1Модифицированный EncryptedXml<table class="content postContainer" width="100%"><tr><td>Здравствуйте.<br /><br />Наткнулся на странное поведение AspNetCore.DataProtection - оно отличалось между .NET FW и .NET Core.<br />Подробное описание проблемы: <a rel="nofollow" href="https://github.com/dotnet/aspnetcore/issues/27690" title="https://github.com/dotnet/aspnetcore/issues/27690">.NET FW 4.8 DataProtection ProtectKeysWithCertificate with a certificate not stored in the certificate store</a>.<br />Уже начал грешить на некорректную работу JIT и совершенно случайно локализовал проблему - она заключалася в установленном КриптоПро.NET.<br />AspNetCore.DataProtection имеет собственный класс EncryptedXmlWithCertificateKeys, который наследуется от EncryptedXml и переопределяет GetDecryptionKey для того, чтобы можно было расшифровывать ключ не только сертификатами из хранилища, но и вручную загруженным pfx из файла.<br />Так вот, штатно всё это работает, реализация базового класса дергает GetDecryptionKey и всё ОК.<br />А в случае с установленным КриптоПро.NET GetDecryptionKey не дергается и ничего не работает.<br />Есть ощущение, что КриптоПро.NET как-то подменяет штатную реализацию некоторых классов в .NET FW.<br /><br />Можно ли с этим что-то сделать?</td></tr></table>2020-11-12T15:15:51+03:002020-11-12T15:15:51+03:00archimed7592<table class="content postContainer" width="100%"><tr><td>Здравствуйте.<br /><br />Наткнулся на странное поведение AspNetCore.DataProtection - оно отличалось между .NET FW и .NET Core.<br />Подробное описание проблемы: <a rel="nofollow" href="https://github.com/dotnet/aspnetcore/issues/27690" title="https://github.com/dotnet/aspnetcore/issues/27690">.NET FW 4.8 DataProtection ProtectKeysWithCertificate with a certificate not stored in the certificate store</a>.<br />Уже начал грешить на некорректную работу JIT и совершенно случайно локализовал проблему - она заключалася в установленном КриптоПро.NET.<br />AspNetCore.DataProtection имеет собственный класс EncryptedXmlWithCertificateKeys, который наследуется от EncryptedXml и переопределяет GetDecryptionKey для того, чтобы можно было расшифровывать ключ не только сертификатами из хранилища, но и вручную загруженным pfx из файла.<br />Так вот, штатно всё это работает, реализация базового класса дергает GetDecryptionKey и всё ОК.<br />А в случае с установленным КриптоПро.NET GetDecryptionKey не дергается и ничего не работает.<br />Есть ощущение, что КриптоПро.NET как-то подменяет штатную реализацию некоторых классов в .NET FW.<br /><br />Можно ли с этим что-то сделать?</td></tr></table>