Я пытаюсь проверить подпись XML-файла (электронного счета со стандартами UBL). Подпись в файле является лишь образцом и недействительна. Я просто хочу узнать, как проверить подпись.
Ошибка:
System.Security.Cryptography.CryptographicException: SignatureDescription could not be created for the signature algorithm supplied.
at System.Security.Cryptography.Xml.SignedXml.CheckSignedInfo(AsymmetricAlgorithm key)
at System.Security.Cryptography.Xml.SignedXml.CheckSignature(AsymmetricAlgorithm key)
at System.Security.Cryptography.Xml.SignedXml.CheckSignature(X509Certificate2 certificate, Boolean verifySignatureOnly)
at TestClass.Validate(TextReader textReader)
Мой код проверки:
public static bool Validate(string XmlFilePath)
{
using var textReader = new StreamReader(XmlFilePath);
return Validate(textReader);
}
public static bool Validate(TextReader textReader) // A StreamReader or StringReader containing the XML to validate
{
//Create [Doc]
#region
var Doc = new XmlDocument();
Doc.PreserveWhitespace = true;
Doc.Load(textReader);
#endregion
//Create [Namespaces]
#region
var Namespaces = new XmlNamespaceManager(Doc.NameTable);
//IDictionary localNamespaces = null;
var Navigator = Doc.CreateNavigator();
while (Navigator.MoveToFollowing(XPathNodeType.Element))
{
var LocalNamespaces = Navigator.GetNamespacesInScope(XmlNamespaceScope.Local);
foreach (var localNamespace in LocalNamespaces)
{
var Prefix = localNamespace.Key;
if (string.IsNullOrEmpty(Prefix))
{
Prefix = "tst";
}
Namespaces.AddNamespace(Prefix, localNamespace.Value);
}
}
#endregion
//Get [Certificate_Base64]
var Certificate_Base64 = Doc.DocumentElement.SelectSingleNode("ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/ds:Signature/ds:KeyInfo/ds:X509Data/ds:X509Certificate", Namespaces).InnerText;
//Create [Certificate]
var Certificate = new X509Certificate2(Convert.FromBase64String(Certificate_Base64));
var SignedDoc = new SignedXml(Doc);
var Result = SignedDoc.CheckSignature(Certificate, true);
return Result;
}
Исходный XML-файл слишком велик для включения, и его изменение приведет к аннулированию подписи. .NET Скрипка. .NET Fiddle, включающий упрощенную версию XML с опущенным двоичным вложением. Это воспроизводит проблему, но, конечно, подпись будет недействительной:
public static void Test()
{
using var reader = new StringReader(GetXml());
Validate(reader);
}
static string GetXml() =>
"""
mlTwy1zNm4dBEo1Q/97X9gBxOn0tIfsMKFzb++8RmGA=R+bfkY3DfJdtIxvlPStb2U7d9XuiOpq94G7l11a7OD4=dOnabcq+IdcG1NKMp95JycSttsNDLzJvABQilovAPWRyFzTkpElKDHOX8xrreFYHvq2WvIfxJv2G
NcBpe7TzixsLNyPrLTn+KoTNWEAlIRr7O+p7tr84cKN0cFBLsZHC7cvkQXcCXq5fFkZCIzKjP6NM
w8eem9u1bRynsOB+Wan12QvfAvzMPGlBl5sGQ8b/cUavG07YDGZJukIQbInSpdwrjo69A4J/6OQ8
nbxZhvzAfCWOmCsqvekq+hL44smThHCPQeyeVdyhdGUy0UIlwvZhaVLgPhln4b/eNOZO/w/kAYfr
1iAXDhr8WS19mODhWIBg4Ps4Cvhw5s8MbBldOQ==g4fWV5+GRbNQTnVpG5naG/4xC167blIngQJdOJVss7LSBjFkOOitvJtpV0Qvsld1HzW9A+P8aR17
KdgZzqsc5+akR0+volN2ZH9M+q0Xza7zSQjgBzovv2R6VQWLnEyFb4i3PzEqQMDbF8n30oNWj0Bj
BvNn+eTkxmk8ifhLDAwrrDasje5CudTNo9pIv73VcJqA3F+pKwW7MGIZeDJpLnbbqz+ELOIR3ev5
1Ewb889QQyqlMiu2LKaDVmpsFzAlFo25ayLTJ896/cL0Lff+/W+CKeOo3f/SrAcZWp0RWmiKZDET
9LqCodeH+2x3M8+KK2IwjABk378e8/TipjfENQ==AQABCN=e-Fatura Deneme A.Ş.,2.5.4.5=#130a39393939393939393939,OU=e-Fatura Deneme A.Ş.MIIFrDCCBJSgAwIBAgIGAJpaGcRqMA0GCSqGSIb3DQEBCwUAMFwxCzAJBgNVBAYTAlRSMU0wSwYD
VQQDDERNYWxpIE3DvGjDvHIgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPE
sXPEsSAtIFPDvHLDvG0gMTAeFw0xMDAyMDQxMTI0MzlaFw0xNTAyMDMxMTI0MzlaMFUxHjAcBgNV
BAsMFWUtRmF0dXJhIERlbmVtZSBBLsWeLjETMBEGA1UEBRMKOTk5OTk5OTk5OTEeMBwGA1UEAwwV
ZS1GYXR1cmEgRGVuZW1lIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg4fW
V5+GRbNQTnVpG5naG/4xC167blIngQJdOJVss7LSBjFkOOitvJtpV0Qvsld1HzW9A+P8aR17KdgZ
zqsc5+akR0+volN2ZH9M+q0Xza7zSQjgBzovv2R6VQWLnEyFb4i3PzEqQMDbF8n30oNWj0BjBvNn
+eTkxmk8ifhLDAwrrDasje5CudTNo9pIv73VcJqA3F+pKwW7MGIZeDJpLnbbqz+ELOIR3ev51Ewb
889QQyqlMiu2LKaDVmpsFzAlFo25ayLTJ896/cL0Lff+/W+CKeOo3f/SrAcZWp0RWmiKZDET9LqC
odeH+2x3M8+KK2IwjABk378e8/TipjfENQIDAQABo4ICeTCCAnUwHwYDVR0jBBgwFoAURiCpUxso
DByu8ihRg7MevvJTFHwwHQYDVR0OBBYEFBuWz6YnIrQxH7pm5HESs3vtJx9cMA4GA1UdDwEB/wQE
AwIHgDCCATMGA1UdIASCASowggEmMIIBIgYLYIYYAQIBAQUHBAEwggERMCoGCCsGAQUFBwIBFh5o
dHRwOi8vZGVwby5rYW11c20uZ292LnRyL2lsa2UwgeIGCCsGAQUFBwICMIHVHoHSAEIAdQAgAHMA
ZQByAHQAaQBmAGkAawBhACAAaQBsAGUAIABpAGwAZwBpAGwAaQAgAHMAZQByAHQAaQBmAGkAawBh
ACAAdQB5AGcAdQBsAGEAbQBhACAAZQBzAGEAcwBsAGEAcgExAG4BMQAgAG8AawB1AG0AYQBrACAA
aQDnAGkAbgAgAGIAZQBsAGkAcgB0AGkAbABlAG4AIAB3AGUAYgAgAHMAaQB0AGUAcwBpAG4AaQAg
AHoAaQB5AGEAcgBlAHQAIABlAGQAaQBuAGkAegAuMAwGA1UdEwEB/wQCMAAwFgYDVR0lBA8wDQYL
YIYYAQIBAQUHMgEwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2RlcG8ua2FtdXNtLmdvdi50ci9r
dXJ1bXNhbC9tbWVzaHMtczEuY3JsMIGCBggrBgEFBQcBAQR2MHQwPAYIKwYBBQUHMAKGMGh0dHA6
Ly9kZXBvLmthbXVzbS5nb3YudHIva3VydW1zYWwvbW1lc2hzLXMxLmNydDA0BggrBgEFBQcwAYYo
aHR0cDovL2Npc2R1cG1tczEua3VydW1zYWwua2FtdXNtLmdvdi50cjANBgkqhkiG9w0BAQsFAAOC
AQEACYMEtQf5/4+qEZrubSB9W5vjslgmCAiWg5b02DGxknjlrCpaXWq2WnBo2r5t2wCXkVXSpHYP
mx+AkJI7R0vOeUrNwMJokjDRG8iII2hUqrdqC+7eOKVPaoNcn1LKbvg8bMde3qcfMF1FFgCSQaon
u/3H1hl9r6kjLln1N3gSzdlCrumzx071FguBIrtWWfIdj8SZNicuru0Jr9xKQYHSRAvm1/noiTbz
iLj34Ayxz3/srXAJlp+9Z47D6XIUyhztwHKeS4Pf71yITWVszThmA4hm5hKPSJ3zt4tCbXwlSEkd
MNtPl6PFVBR/l/gtIYiBsR9lpib3+Lv9g0Gorz/5XQ==2013-06-19T14:47:55.311+03:004pCQHzUOwVViUIbtc2C5LQkMH/4nS2aTFSx93qp5x8Y=CN=Mali Mühür Elektronik Sertifika Hizmet Sağlayıcısı - Sürüm 1, C=TR662936601706Tedarikçi
2.0
TR1.0
TEMELFATURA
TST2013000000766
false
96a8b0f1-7e10-4a44-8d78-eb961539bb4b
2013-06-19
SATIS
Sicil No: 123
İşletme Merkezi: Ankara
TRL
1
9999999999
9999999999
1
Etlik Caddesi
Gelir İdaresi Ek. Hizmet Binası
16
Altındağ
Ankara
06110
Dışkapı
Türkiye
#Signature_TST2013000000766
9999999999
e-Fatura Deneme A.Ş.
1
Etlik Caddesi
Gelir İdaresi Ek. Hizmet Binası
16
Altındağ
Ankara
06110
Dışkapı
Türkiye
Başkent
03123021700
03123021539
efatura@gelirler.gov.tr
9999999999
e-Fatura Deneme A.Ş.
1
Etlik Caddesi
Gelir İdaresi Ek. Hizmet Binası
16
Altındağ
Ankara
06110
Dışkapı
Türkiye
Başkent
03123021700
03123021539
efatura@gelirler.gov.tr
0.10
10.00
0.10
1
1
KDV
0015
10.00
10.00
10.10
0.00
10.10
1
10
10
0.10
10
0.1
1
1
KDV
0015
EKMEK
1
""";
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-xml-file
Как проверить подпись X509Certificate2 в XML-файле? [закрыто] ⇐ C#
Место общения программистов C#
-
Anonymous
1760394158
Anonymous
Я пытаюсь проверить подпись XML-файла (электронного счета со стандартами UBL). Подпись в файле является лишь образцом и недействительна. Я просто хочу узнать, как проверить подпись.
Ошибка:
System.Security.Cryptography.CryptographicException: SignatureDescription could not be created for the signature algorithm supplied.
at System.Security.Cryptography.Xml.SignedXml.CheckSignedInfo(AsymmetricAlgorithm key)
at System.Security.Cryptography.Xml.SignedXml.CheckSignature(AsymmetricAlgorithm key)
at System.Security.Cryptography.Xml.SignedXml.CheckSignature(X509Certificate2 certificate, Boolean verifySignatureOnly)
at TestClass.Validate(TextReader textReader)
Мой код проверки:
public static bool Validate(string XmlFilePath)
{
using var textReader = new StreamReader(XmlFilePath);
return Validate(textReader);
}
public static bool Validate(TextReader textReader) // A StreamReader or StringReader containing the XML to validate
{
//Create [Doc]
#region
var Doc = new XmlDocument();
Doc.PreserveWhitespace = true;
Doc.Load(textReader);
#endregion
//Create [Namespaces]
#region
var Namespaces = new XmlNamespaceManager(Doc.NameTable);
//IDictionary localNamespaces = null;
var Navigator = Doc.CreateNavigator();
while (Navigator.MoveToFollowing(XPathNodeType.Element))
{
var LocalNamespaces = Navigator.GetNamespacesInScope(XmlNamespaceScope.Local);
foreach (var localNamespace in LocalNamespaces)
{
var Prefix = localNamespace.Key;
if (string.IsNullOrEmpty(Prefix))
{
Prefix = "tst";
}
Namespaces.AddNamespace(Prefix, localNamespace.Value);
}
}
#endregion
//Get [Certificate_Base64]
var Certificate_Base64 = Doc.DocumentElement.SelectSingleNode("ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/ds:Signature/ds:KeyInfo/ds:X509Data/ds:X509Certificate", Namespaces).InnerText;
//Create [Certificate]
var Certificate = new X509Certificate2(Convert.FromBase64String(Certificate_Base64));
var SignedDoc = new SignedXml(Doc);
var Result = SignedDoc.CheckSignature(Certificate, true);
return Result;
}
Исходный XML-файл слишком велик для включения, и его изменение приведет к аннулированию подписи. .NET Скрипка. .NET Fiddle, включающий упрощенную версию XML с опущенным двоичным вложением. Это воспроизводит проблему, но, конечно, подпись будет недействительной:
public static void Test()
{
using var reader = new StringReader(GetXml());
Validate(reader);
}
static string GetXml() =>
"""
mlTwy1zNm4dBEo1Q/97X9gBxOn0tIfsMKFzb++8RmGA=R+bfkY3DfJdtIxvlPStb2U7d9XuiOpq94G7l11a7OD4=dOnabcq+IdcG1NKMp95JycSttsNDLzJvABQilovAPWRyFzTkpElKDHOX8xrreFYHvq2WvIfxJv2G
NcBpe7TzixsLNyPrLTn+KoTNWEAlIRr7O+p7tr84cKN0cFBLsZHC7cvkQXcCXq5fFkZCIzKjP6NM
w8eem9u1bRynsOB+Wan12QvfAvzMPGlBl5sGQ8b/cUavG07YDGZJukIQbInSpdwrjo69A4J/6OQ8
nbxZhvzAfCWOmCsqvekq+hL44smThHCPQeyeVdyhdGUy0UIlwvZhaVLgPhln4b/eNOZO/w/kAYfr
1iAXDhr8WS19mODhWIBg4Ps4Cvhw5s8MbBldOQ==g4fWV5+GRbNQTnVpG5naG/4xC167blIngQJdOJVss7LSBjFkOOitvJtpV0Qvsld1HzW9A+P8aR17
KdgZzqsc5+akR0+volN2ZH9M+q0Xza7zSQjgBzovv2R6VQWLnEyFb4i3PzEqQMDbF8n30oNWj0Bj
BvNn+eTkxmk8ifhLDAwrrDasje5CudTNo9pIv73VcJqA3F+pKwW7MGIZeDJpLnbbqz+ELOIR3ev5
1Ewb889QQyqlMiu2LKaDVmpsFzAlFo25ayLTJ896/cL0Lff+/W+CKeOo3f/SrAcZWp0RWmiKZDET
9LqCodeH+2x3M8+KK2IwjABk378e8/TipjfENQ==AQABCN=e-Fatura Deneme A.Ş.,2.5.4.5=#130a39393939393939393939,OU=e-Fatura Deneme A.Ş.MIIFrDCCBJSgAwIBAgIGAJpaGcRqMA0GCSqGSIb3DQEBCwUAMFwxCzAJBgNVBAYTAlRSMU0wSwYD
VQQDDERNYWxpIE3DvGjDvHIgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPE
sXPEsSAtIFPDvHLDvG0gMTAeFw0xMDAyMDQxMTI0MzlaFw0xNTAyMDMxMTI0MzlaMFUxHjAcBgNV
BAsMFWUtRmF0dXJhIERlbmVtZSBBLsWeLjETMBEGA1UEBRMKOTk5OTk5OTk5OTEeMBwGA1UEAwwV
ZS1GYXR1cmEgRGVuZW1lIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg4fW
V5+GRbNQTnVpG5naG/4xC167blIngQJdOJVss7LSBjFkOOitvJtpV0Qvsld1HzW9A+P8aR17KdgZ
zqsc5+akR0+volN2ZH9M+q0Xza7zSQjgBzovv2R6VQWLnEyFb4i3PzEqQMDbF8n30oNWj0BjBvNn
+eTkxmk8ifhLDAwrrDasje5CudTNo9pIv73VcJqA3F+pKwW7MGIZeDJpLnbbqz+ELOIR3ev51Ewb
889QQyqlMiu2LKaDVmpsFzAlFo25ayLTJ896/cL0Lff+/W+CKeOo3f/SrAcZWp0RWmiKZDET9LqC
odeH+2x3M8+KK2IwjABk378e8/TipjfENQIDAQABo4ICeTCCAnUwHwYDVR0jBBgwFoAURiCpUxso
DByu8ihRg7MevvJTFHwwHQYDVR0OBBYEFBuWz6YnIrQxH7pm5HESs3vtJx9cMA4GA1UdDwEB/wQE
AwIHgDCCATMGA1UdIASCASowggEmMIIBIgYLYIYYAQIBAQUHBAEwggERMCoGCCsGAQUFBwIBFh5o
dHRwOi8vZGVwby5rYW11c20uZ292LnRyL2lsa2UwgeIGCCsGAQUFBwICMIHVHoHSAEIAdQAgAHMA
ZQByAHQAaQBmAGkAawBhACAAaQBsAGUAIABpAGwAZwBpAGwAaQAgAHMAZQByAHQAaQBmAGkAawBh
ACAAdQB5AGcAdQBsAGEAbQBhACAAZQBzAGEAcwBsAGEAcgExAG4BMQAgAG8AawB1AG0AYQBrACAA
aQDnAGkAbgAgAGIAZQBsAGkAcgB0AGkAbABlAG4AIAB3AGUAYgAgAHMAaQB0AGUAcwBpAG4AaQAg
AHoAaQB5AGEAcgBlAHQAIABlAGQAaQBuAGkAegAuMAwGA1UdEwEB/wQCMAAwFgYDVR0lBA8wDQYL
YIYYAQIBAQUHMgEwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2RlcG8ua2FtdXNtLmdvdi50ci9r
dXJ1bXNhbC9tbWVzaHMtczEuY3JsMIGCBggrBgEFBQcBAQR2MHQwPAYIKwYBBQUHMAKGMGh0dHA6
Ly9kZXBvLmthbXVzbS5nb3YudHIva3VydW1zYWwvbW1lc2hzLXMxLmNydDA0BggrBgEFBQcwAYYo
aHR0cDovL2Npc2R1cG1tczEua3VydW1zYWwua2FtdXNtLmdvdi50cjANBgkqhkiG9w0BAQsFAAOC
AQEACYMEtQf5/4+qEZrubSB9W5vjslgmCAiWg5b02DGxknjlrCpaXWq2WnBo2r5t2wCXkVXSpHYP
mx+AkJI7R0vOeUrNwMJokjDRG8iII2hUqrdqC+7eOKVPaoNcn1LKbvg8bMde3qcfMF1FFgCSQaon
u/3H1hl9r6kjLln1N3gSzdlCrumzx071FguBIrtWWfIdj8SZNicuru0Jr9xKQYHSRAvm1/noiTbz
iLj34Ayxz3/srXAJlp+9Z47D6XIUyhztwHKeS4Pf71yITWVszThmA4hm5hKPSJ3zt4tCbXwlSEkd
MNtPl6PFVBR/l/gtIYiBsR9lpib3+Lv9g0Gorz/5XQ==2013-06-19T14:47:55.311+03:004pCQHzUOwVViUIbtc2C5LQkMH/4nS2aTFSx93qp5x8Y=CN=Mali Mühür Elektronik Sertifika Hizmet Sağlayıcısı - Sürüm 1, C=TR662936601706Tedarikçi
2.0
TR1.0
TEMELFATURA
TST2013000000766
false
96a8b0f1-7e10-4a44-8d78-eb961539bb4b
2013-06-19
SATIS
Sicil No: 123
İşletme Merkezi: Ankara
TRL
1
9999999999
9999999999
1
Etlik Caddesi
Gelir İdaresi Ek. Hizmet Binası
16
Altındağ
Ankara
06110
Dışkapı
Türkiye
#Signature_TST2013000000766
9999999999
e-Fatura Deneme A.Ş.
1
Etlik Caddesi
Gelir İdaresi Ek. Hizmet Binası
16
Altındağ
Ankara
06110
Dışkapı
Türkiye
Başkent
03123021700
03123021539
efatura@gelirler.gov.tr
9999999999
e-Fatura Deneme A.Ş.
1
Etlik Caddesi
Gelir İdaresi Ek. Hizmet Binası
16
Altındağ
Ankara
06110
Dışkapı
Türkiye
Başkent
03123021700
03123021539
efatura@gelirler.gov.tr
0.10
10.00
0.10
1
1
KDV
0015
10.00
10.00
10.10
0.00
10.10
1
10
10
0.10
10
0.1
1
1
KDV
0015
EKMEK
1
""";
Подробнее здесь: [url]https://stackoverflow.com/questions/79789178/how-can-i-validate-a-x509certificate2-signature-on-an-xml-file[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия