Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту alfa_api@alfabank.ru. При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
Для шифрования и подписания сообщения необходимо предварительно загрузить сертификат, используя следующий метод. Если Вы уже загружали сертификат, используя данный метод - повторно выполнять эту операцию не нужно.
Подписание и шифрование XML
Сформируйте электронную подпись в cоответствии с XMLDsig. Необходимо использовать:
-
•
-
•метод канонизации: Canonicalization Method Algorithm
-
•алгоритм подписи:
urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256 -
•метод трансформации: Enveloped Signature Transform (Transform Algorithm)
-
•метод трансформации: Exclusive XML Canonicalization (Transform Algorithm)
-
•алгоритм хэширования:
urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256
1<?xml version="1.0" encoding="UTF-8"?>
2<Request>
3 <XmlElementName1>XmlElementValue1</XmlElementName1>
4 <XmlElementName2>XmlElementValue2</XmlElementName2>
5 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
6 <ds:SignedInfo>
7 <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
8 </ds:CanonicalizationMethod>
9 <ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256">
10 </ds:SignatureMethod>
11 <ds:Reference URI="">
12 <ds:Transforms>
13 <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
14 </ds:Transform>
15 <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
16 </ds:Transform>
17 </ds:Transforms>
18 <ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
19 </ds:DigestMethod>
20 <ds:DigestValue>q78yoPNf7grtP/yf9XNZwtxCnn9h80FvORe/Zu70Yvk=</ds:DigestValue>
21 </ds:Reference>
22 </ds:SignedInfo>
23 <ds:SignatureValue>ESXSfYUqFwMkngNQ54S4+qRNpomGuo62L8ufbZDcbgLzDgprGKi3N2PDzM8kS004MDpm+3Zjvnl/gk7uiqQCzw==</ds:SignatureValue>
24 <ds:KeyInfo>
25 <ds:X509Data>
26 <ds:X509Certificate>MIIPFzCCDsSgAwIBAgIRBpr44wAlsg6pTg7qS9+X8scwCgYIKoUDBwEBAwIwggELMRgwFgYFKoUDZAESDTEwMjc3MDAwNjczMjgxGjAYBggqhQMDgQMBARIMMDA3NzI4MTY4OTcxMQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxKjAoBgNVBAkMIdCj0LsuINCa0LDQu9Cw0L3Rh9C10LLRgdC60LDRjyAyNzEPMA0GA1UECwwG0KPQmNCRMSEwHwYDVQQKDBjQkNCeINCQ0JvQrNCk0JAt0JHQkNCd0JoxNTAzBgNVBAMMLNCi0JXQodCiINCj0KYgMi4wINCQ0J4gItCQ0JvQrNCk0JAt0JHQkNCd0JoiMB4XDTI0MTExMTEzNDAwMVoXDфTMyMDMxNTA4MjMwOFowggJjMRcwFQYFKoUDZAQMDDAwNzcyODE2ODk3MTE/MD0GA1UEKgw20KHQtdGA0YLQuNGE0LjQutCw0YIt0JLRgtC+0YDQvtC5INCh0L7RgtGA0YPQtNC90LjQutCwMSYwJAYDVQQEDB3QotC10YHRgtC+0LLRi9C5LdCS0YLQvtGA0L7QuTEWMBQGBSqFA2QDEgs0NzY3NzQ4NDE1ODFJMEcGA1UECQxAMTA3MDc4LCDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQmtCw0LvQsNC90YfQtdCy0YHQutCw0Y8sINC0LiAyNzEaMBgGCCqFAwOBAwEBEgw1MjQ0ODE3OTMzMTQxGDAWBgUqhQNkARINMTAyNzcwMDA2NzMyODFHMEUGA1UEDAw+0KHQuNGB0YLQtdC80L3Ri9C5INCw0YDRhdC40YLQtdC60YLQvtGAINC90LDQv9GA0LDQstC70LXQvdC40Y8xLDAqBgkqhkiG9w0BCQEWHXRydXN0Y29yZV9zdXBwb3J0QGFsZmFiYW5rLnJ1MQswCQYDVQQGEwJSVTEVMBMGA1UECAwM0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxIzAhBgNVBAoMGtCQ0J4gItCQ0LvRjNGE0LAt0JHQsNC90LoiMVYwVAYDVQQLDE3QlNC10L/QsNGA0YLQsNC80LXQvdGCINGA0LDQt9GA0LDQsdC+0YLQutC4INGG0LjRhNGA0L7QstGL0YUg0YHQtdGA0LLQuNGB0L7QsjEXMBUGA1UEAwwOMnRydXN0Y29yZS0yNTYwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARAlBCZ9BS4/QF3WuEYP7kmjSQLJAbpYezzDOQZNLzZq/G/4FbAGC5dD00xJzzih6o/duyAFQkPFmKPPrhEfKacJKOCCp4wggqaMA4GA1UdDwEB/wQEAwID+DAfBgkrBgEEAYI3FQcEEjAQBggqhQMCAi4ACAIBAQIBADAdBgNVHQ4EFgQU1LPWWhT+ybiXm3qye09pvekYJ9YwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwggPbBggrBgEFBQcBAQSCA80wggPJMD4GCCsGAQUFBzABhjJodHRwOi8vdGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvb2NzcC9vY3NwLnNyZjBhBggrBgEFBQcwAoZVaHR0cDovL3Rlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2FpYS8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNydDBiBggrBgEFBQcwAoZWaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9haWEvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcnQwYgYIKwYBBQUHMAKGVmh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvYWlhLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3J0MGUGCCsGAQUFBzAChllodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L3JhL2FpYS8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNydDBlBggrBgEFBQcwAoZZaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9jYS9haWEvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcnQwYgYIKwYBBQUHMAKGVmh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvYWlhLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3J0MGIGCCsGAQUFBzAChlZodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2FpYS8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNydDBiBggrBgEFBQcwAoZWaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9haWEvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcnQwYgYIKwYBBQUHMAKGVmh0d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</ds:X509Certificate>
27 </ds:X509Data>
28 </ds:KeyInfo>
29 </ds:Signature>
30</Request>
Выполните шифрование подписанного сообщения, сформированного на шаге 2, алгоритмом ГОСТ 34.12.2015 (блочный шифр с длиной блока n = 64 бит «Магма») открытым ключом сертификата Альфа-Банка, и передайте его в теле запроса. Для получения сертификата напишите на почту alfa_api@alfabank.ru.
Информация об используемых стандартах ТК 26
Алгоритм экспорта ключей KExp15 на основе симметричного блочного шифра "Магма". OID: 1.2.643.7.1.1.7.1.1
Алгоритм шифрования послания "Магма" в режиме гаммирования CTR с механизмом преобразования ключа ACPKM с вычислением имитовставки. OID: 1.2.643.7.1.1.5.1.2
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
Если добавить заголовки Content-Type: application/xml + X-Request-ChannelSecurity: NO и отправить запрос, то подпись запроса не будет проверяться.
Если добавить заголовки Content-Type: application/xml + X-Request-ChannelSecurity: ENCRYPTION и отправить запрос, то подпись запроса будет проверяться.
Банк дешифрует запрос и проверяет подпись. Если подпись валидна - запрос обрабатывается, если невалидна - Банк определяет запрос как неподлинный и возвращает ошибку.
Дешифрование и проверка подписи XML
-
1.Примените алгоритм канонизации, указанный в
ds:CanonicalizationMethod, к элементуSignedInfo. Используйте алгоритм Exclusive XML Canonicalization для преобразованияSignedInfoв каноническую форму. -
2.Используя алгоритм хеширования, указанный в
ds:SignatureMethod-urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256, вычислите хеш-значение из канонизированногоSignedInfo. -
3.Декодируйте значение подписи из элемента
ds:SignatureValueс использованием Base64. -
4.Проверьте целостность содержимого:
-
•вычислите хеш-значение оригинальных данных (то есть тела сообщения без учёта подписи), используя алгоритм, указанный в
ds:DigestMethod-urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256`; -
•сравните вычисленное хеш-значение с декодированным из Base64 значением, указанным в
ds:DigestValue. Если значения совпадают, содержимое не изменилось после подписания.
-
1<?xml version="1.0" encoding="UTF-8"?>
2<Response>
3 <XmlElementName1>XmlElementValue1</XmlElementName1>
4 <XmlElementName2>XmlElementValue2</XmlElementName2>
5 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
6 <ds:SignedInfo>
7 <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
8 </ds:CanonicalizationMethod>
9 <ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256">
10 </ds:SignatureMethod>
11 <ds:Reference URI="">
12 <ds:Transforms>
13 <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
14 </ds:Transform>
15 <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
16 </ds:Transform>
17 </ds:Transforms>
18 <ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
19 </ds:DigestMethod>
20 <ds:DigestValue>q78yoPNf7grtP/yf9XNZwtxCnn9h80FvORe/Zu70Yvk=</ds:DigestValue>
21 </ds:Reference>
22 </ds:SignedInfo>
23 <ds:SignatureValue>ESXSfYUqFwMkngNQ54S4+qRNpomGuo62L8ufbZDcbgLzDgprGKi3N2PDzM8kS004MDpm+3Zjvnl/gk7uiqQCzw==</ds:SignatureValue>
24 <ds:KeyInfo>
25 <ds:X509Data>
26 <ds:X509Certificate>MIIPFzCCDsSgAwIBAgIRBpr44wAlsg6pTg7qS9+X8scwCgYIKoUDBwEBAwIwggELMRgwFgYFKoUDZAESDTEwMjc3MDAwNjczMjgxGjAYBggqhQMDgQMBARIMMDA3NzI4MTY4OTcxMQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxKjAoBgNVBAkMIdCj0LsuINCa0LDQu9Cw0L3Rh9C10LLRgdC60LDRjyAyNzEPMA0GA1UECwwG0KPQmNCRMSEwHwYDVQQKDBjQkNCeINCQ0JvQrNCk0JAt0JHQkNCd0JoxNTAzBgNVBAMMLNCi0JXQodCiINCj0KYgMi4wINCQ0J4gItCQ0JvQrNCk0JAt0JHQkNCd0JoiMB4XDTI0MTExMTEzNDAwMVoXDфTMyMDMxNTA4MjMwOFowggJjMRcwFQYFKoUDZAQMDDAwNzcyODE2ODk3MTE/MD0GA1UEKgw20KHQtdGA0YLQuNGE0LjQutCw0YIt0JLRgtC+0YDQvtC5INCh0L7RgtGA0YPQtNC90LjQutCwMSYwJAYDVQQEDB3QotC10YHRgtC+0LLRi9C5LdCS0YLQvtGA0L7QuTEWMBQGBSqFA2QDEgs0NzY3NzQ4NDE1ODFJMEcGA1UECQxAMTA3MDc4LCDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQmtCw0LvQsNC90YfQtdCy0YHQutCw0Y8sINC0LiAyNzEaMBgGCCqFAwOBAwEBEgw1MjQ0ODE3OTMzMTQxGDAWBgUqhQNkARINMTAyNzcwMDA2NzMyODFHMEUGA1UEDAw+0KHQuNGB0YLQtdC80L3Ri9C5INCw0YDRhdC40YLQtdC60YLQvtGAINC90LDQv9GA0LDQstC70LXQvdC40Y8xLDAqBgkqhkiG9w0BCQEWHXRydXN0Y29yZV9zdXBwb3J0QGFsZmFiYW5rLnJ1MQswCQYDVQQGEwJSVTEVMBMGA1UECAwM0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxIzAhBgNVBAoMGtCQ0J4gItCQ0LvRjNGE0LAt0JHQsNC90LoiMVYwVAYDVQQLDE3QlNC10L/QsNGA0YLQsNC80LXQvdGCINGA0LDQt9GA0LDQsdC+0YLQutC4INGG0LjRhNGA0L7QstGL0YUg0YHQtdGA0LLQuNGB0L7QsjEXMBUGA1UEAwwOMnRydXN0Y29yZS0yNTYwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARAlBCZ9BS4/QF3WuEYP7kmjSQLJAbpYezzDOQZNLzZq/G/4FbAGC5dD00xJzzih6o/duyAFQkPFmKPPrhEfKacJKOCCp4wggqaMA4GA1UdDwEB/wQEAwID+DAfBgkrBgEEAYI3FQcEEjAQBggqhQMCAi4ACAIBAQIBADAdBgNVHQ4EFgQU1LPWWhT+ybiXm3qye09pvekYJ9YwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwggPbBggrBgEFBQcBAQSCA80wggPJMD4GCCsGAQUFBzABhjJodHRwOi8vdGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvb2NzcC9vY3NwLnNyZjBhBggrBgEFBQcwAoZVaHR0cDovL3Rlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2FpYS8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNydDBiBggrBgEFBQcwAoZWaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9haWEvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcnQwYgYIKwYBBQUHMAKGVmh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvYWlhLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3J0MGUGCCsGAQUFBzAChllodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L3JhL2FpYS8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNydDBlBggrBgEFBQcwAoZZaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9jYS9haWEvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcnQwYgYIKwYBBQUHMAKGVmh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvYWlhLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3J0MGIGCCsGAQUFBzAChlZodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2FpYS8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNydDBiBggrBgEFBQcwAoZWaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9haWEvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcnQwYgYIKwYBBQUHMAKGVmh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvYWlhLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3J0MB0GA1UdIAQWMBQwCAYGKoUDZHEBMAgGBiqFA2RxAjCCAUMGBSqFA2RwBIIBODCCATQMNNCh0JrQl9CYICLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDQuMCkMWtCf0JDQmiAi0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAICLQmtGA0LjQv9GC0L7Qn9GA0L4g0KPQpiIg0LLQtdGA0YHQuNC4IDIuMAxP0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPIOKEliDQodCkLzEyNC0zMDEwINC+0YIgMzAuMTIuMjAxNgxP0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPIOKEliDQodCkLzEyOC0yOTgzINC+0YIgMTguMTEuMjAxNjA/BgUqhQNkbwQ2DDTQodCa0JfQmCAi0JrRgNC40L/RgtC+0J/RgNC+IENTUCIgKNCy0LXRgNGB0LjRjyA0LjApMIIC+gYDVR0fBIIC8TCCAu0wU6BRoE+GTWh0dHA6Ly9jYS5hbGZhaW50cmEubmV0L2NlcnRkYXRhLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3JsMFygWqBYhlZodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2NkcC8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNybDBfoF2gW4ZZaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9yYS9jZHAvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcmwwX6BdoFuGWWh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvY2EvY2RwLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3JsMFygWqBYhlZodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2NkcC8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNybDBcoFqgWIZWaHR0cDovL250ZXN0LXVjMi5tb3Njb3cuYWxmYWludHJhLm5ldC9jZHAvMmRiMjgyYjI1MDg0MzYxZTQ5YThhZjdkZTE5YmU3MWZhYTI0MzcxZS5jcmwwXKBaoFiGVmh0dHA6Ly9udGVzdC11YzIubW9zY293LmFsZmFpbnRyYS5uZXQvY2RwLzJkYjI4MmIyNTA4NDM2MWU0OWE4YWY3ZGUxOWJlNzFmYWEyNDM3MWUuY3JsMFygWqBYhlZodHRwOi8vbnRlc3QtdWMyLm1vc2Nvdy5hbGZhaW50cmEubmV0L2NkcC8yZGIyODJiMjUwODQzNjFlNDlhOGFmN2RlMTliZTcxZmFhMjQzNzFlLmNybDCCAU0GA1UdIwSCAUQwggFAgBQtsoKyUIQ2Hkmor33hm+cfqiQ3HqGCAROkggEPMIIBCzEYMBYGBSqFA2QBEg0xMDI3NzAwMDY3MzI4MRowGAYIKoUDA4EDAQESDDAwNzcyODE2ODk3MTELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMSowKAYDVQQJDCHQo9C7LiDQmtCw0LvQsNC90YfQtdCy0YHQutCw0Y8gMjcxDzANBgNVBAsMBtCj0JjQkTEhMB8GA1UECgwY0JDQniDQkNCb0KzQpNCQLdCR0JDQndCaMTUwMwYDVQQDDCzQotCV0KHQoiDQo9CmIDIuMCDQkNCeICLQkNCb0KzQpNCQLdCR0JDQndCaIoIRBjzujABZrpG6QiDAPXSeuzAwKwYDVR0QBCQwIoAPMjAyNDExMTExMzQwMDFagQ8yMDI2MDIxMTEzNDAwMVowCgYIKoUDBwEBAwIDQQAM256h66k88WVhDUNKDWkURvANBdnATxKrSAed+hwo0CAfT27l7XiBlzXcq1tOy6K48OyFkSDVA3TK8lnd+6Hd</ds:X509Certificate>
27 </ds:X509Data>
28 </ds:KeyInfo>
29 </ds:Signature>
30</Response>
Используйте открытый ключ сертификата Банка для проверки подписи, сравнивая вычисленное хеш-значение SignedInfo с декодированным значением подписи SignatureValue , используя алгоритм, указанный в SignatureMethod . Для получения сертификата напишите на почту alfa_api@alfabank.ru
1<?xml version="1.0" encoding="UTF-8"?>
2<Response>
3 <XmlElementName1>XmlElementValue1</XmlElementName1>
4 <XmlElementName2>XmlElementValue2</XmlElementName2>
5</Response>