Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mevl  
#1 Оставлено : 22 апреля 2021 г. 13:42:56(UTC)
mevl

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.04.2021(UTC)
Сообщений: 1
Российская Федерация
Откуда: Краснодар

Пытаюсь с помощью Pycades подписывать SOAP запросы, чтобы отправлять их в ЕГИСЗ (тестовую версию).
По их документации:
Цитата:
допускается использование сертификатов с алгоритмами подписей - RSA, ГОСТ Р 34.10-2001, ГОСТ Р 34.10-2012 с длиной ключа 256 бит или ГОСТ Р 34.10-2012 с длиной ключа 512 бит

Цитата:
SOAP-запросы, проходящие через ИПС, должны поддерживать стандарт WS-Security1. Для подписи запросов должен использоваться сертификат системы-инициатора запроса, указанный при регистрации системы.


* Я сделал тестовую сертификат через КриптоПро, установил её в хранилище и проверил
[img=https://ibb.co/31Ndpt2]скриншот сертификата[/img]
* Отправил им сертификат
* Подписываю XML запрос через `pycades` как указано в примере доков pycades, но вижу, что итоговый результат отличается от того, что требуется (например, нет BinarySecurityToken).
Код:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><s:Header><a:Action>sendDocument</a:Action><transportHeader xmlns="http://egisz.rosminzdrav.ru" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><authInfo><clientEntityId>e3817565-5fe2-702d-d437...</clientEntityId></authInfo></transportHeader><a:MessageID/><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To/></s:Header><s:Body xmlns:d2p1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" d2p1:Id="BodyID-de50a37c-7d9b-4132-9453-ef063ddd4b39"/><sendDocument xmlns="http://receiver.service.nr.eu.rt.ru/"><oid xmlns=""/><service xmlns=""/><document xmlns=""/></sendDocument><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature1-29cd0f288-431b-f561-ab7d-24e2c48c014">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<ds:DigestValue>KtJVtIiy4WM2IyHexS06HCIkTid4OViFaNUmI0oaCvA=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedPropertiesReferenceId1-29cd0f288-431b-f561-ab7d-24e2c48c014">
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<ds:DigestValue>yo9b5U5th6oyZACefGXb7KKxU5aIIzbyDS92oMrJcHM=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>zJ230slHHhTQLAsCp0twiGZ9h4TzqOkA3rqPPXDCzQBUVNRJUUOPvTeAN99RCbJy
lUAE0dJ1iKvdK7XRrotRRw==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDATCCArCgAwIBAgITEgBSvyCprndfsUNAOQABAFK/IDAIBgYqhQMCAgMwfzEj
MCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV
MQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD
VQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMjEwNDIxMDgyMjQzWhcN
MjEwNzIxMDgzMjQzWjAbMRkwFwYDVQQDDBBUZXN0IENlcnRpZmljYXRlMGYwHwYI
KoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIDQwAEQIec2BD6HVustKxbib4A
nH4df4XUKi46/SUuWj0iUjHF4gFDPGegVj1pyxB3jyWk0ozzlcqZGiMeZunE9oxK
vgCjggFiMIIBXjAPBgNVHQ8BAf8EBQMDB/AAMB0GA1UdDgQWBBTV1nnlNvhmtBF0
FYqqaHCT4smoZDAfBgNVHSMEGDAWgBROgz4Uae/sXXqVK18R/jcyFklVKzBcBgNV
HR8EVTBTMFGgT6BNhktodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5y
b2xsL0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcmwwgawGCCsG
AQUFBwEBBIGfMIGcMGQGCCsGAQUFBzAChlhodHRwOi8vdGVzdGNhLmNyeXB0b3By
by5ydS9DZXJ0RW5yb2xsL3Rlc3QtY2EtMjAxNF9DUllQVE8tUFJPJTIwVGVzdCUy
MENlbnRlciUyMDIoMSkuY3J0MDQGCCsGAQUFBzABhihodHRwOi8vdGVzdGNhLmNy
eXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBAEYxRFo58uJILnoe
9eoDrrtG63YKgKmPjtfcJrOtuM8EY36ReorlEiZKnKpdEjP4RYH9fhfHZ8gOn1Rb
oQI3nmI=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object>
<QualifyingProperties xmlns="http://uri.etsi.org/01903/v1.3.2#" Target="#Signature1-29cd0f288-431b-f561-ab7d-24e2c48c014">
<SignedProperties Id="SignedPropertiesReferenceId1-29cd0f288-431b-f561-ab7d-24e2c48c014">
<SignedSignatureProperties>
<SigningTime>2021-04-22T08:26:56.777Z</SigningTime>
<SigningCertificateV2>
<Cert>
<CertDigest>
<ds:DigestMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">EswYY4/iTxJl1qQyuyCLElEpxES9EvNwK7QbPbQmG+g=</ds:DigestValue>
</CertDigest>
<IssuerSerialV2>MIGcMIGEpIGBMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRvcHJvLnJ1MQswCQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5DUllQVE8tUFJPIExMQzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAyAhMSAFK/IKmud1+xQ0A5AAEAUr8g</IssuerSerialV2>
</Cert>
</SigningCertificateV2>
</SignedSignatureProperties>
</SignedProperties>
</QualifyingProperties>
</ds:Object>
</ds:Signature></s:Envelope>



* В ответ от тестового сервиса ЕГИС приходит:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <wsse:Security
      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
      xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-e18bbd95-c949-401f-abca-2c463ee9c878">MIIB4zCCAY4CFHQS0RhMqu/a8sxl4uAsCSQrEI1IMAwGCCqFAwcBAQMCBQAwbzELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzEPMA0GA1UEBwwGTW9zY293MQ4wDAYDVQQKDAVFR0lTWjEMMAoGA1UECwwDSVBTMSAwHgYDVQQDDBdpcHMtdGVzdC5yb3NtaW56ZHJhdi5ydTAeFw0xODExMTkwNTQ2MjNaFw0yMzExMTkwNTQ2MjNaMG8xCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZNb3Njb3cxDzANBgNVBAcMBk1vc2NvdzEOMAwGA1UECgwFRUdJU1oxDDAKBgNVBAsMA0lQUzEgMB4GA1UEAwwXaXBzLXRlc3Qucm9zbWluemRyYXYucnUwZjAfBggqhQMHAQEBATATBgcqhQMCAiMBBggqhQMHAQECAgNDAARAZmU9pXI9pfyz3RjaXJMznDn4teUwVz735WmooeXcKHl2EY3qOkyWquyXnvKr4T1RkXM7EiTCDVwASbbjKUoGvjAMBggqhQMHAQEDAgUAA0EA5tDM4QG1iJQdjOd1xWVQgCBc7OOh4oRD4wN6ZLYOr3WSRTNptjAUDttm1IzdWd3+ybtGiWrg9k17YEIso0soNw==</wsse:BinarySecurityToken>
      <ds:Signature
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="SIG-d57b5b04-4625-45ed-b0d8-4c5811fa987c">
        <ds:SignedInfo>
          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          <ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
          <ds:Reference URI="#id-0d1451d9-5bee-4737-9c7f-fca0f5588389">
            <ds:Transforms>
              <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
            <ds:DigestValue>6o+jDPzLOgYz+RG1dU2Dkkec3otLFCYeTIniCVljyHM=</ds:DigestValue>
          </ds:Reference>
          <ds:Reference URI="#TS-02255817-86e0-4ca3-ac53-783d96c4bc87">
            <ds:Transforms>
              <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
            <ds:DigestValue>IzfOBfwjebOuIS93YRp7QEDFlpJQ0m2FX6eXj/vBKNA=</ds:DigestValue>
          </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>XG6wCTga8Q4hmeBUVEeve/WtvMH3jIzPn6vPOOCFY2tg3P+3MgXOCGWTi+ckMd/cBJxaRwGtwSIhWZBJQ/daxA==</ds:SignatureValue>
        <ds:KeyInfo Id="KI-2a95afa8-36cb-41a5-b74a-5f80e38f2bfa">
          <wsse:SecurityTokenReference wsu:Id="STR-41305df7-400e-4d4b-8e2a-6cc1865e2ae2">
            <wsse:Reference URI="#X509-e18bbd95-c949-401f-abca-2c463ee9c878" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
          </wsse:SecurityTokenReference>
        </ds:KeyInfo>
      </ds:Signature>
      <wsu:Timestamp wsu:Id="TS-02255817-86e0-4ca3-ac53-783d96c4bc87">
        <wsu:Created>2021-04-22T08:27:33.274Z</wsu:Created>
        <wsu:Expires>2021-04-22T08:37:33.274Z</wsu:Expires>
      </wsu:Timestamp>
    </wsse:Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-0d1451d9-5bee-4737-9c7f-fca0f5588389">
    <SOAP-ENV:Fault>
      <faultcode
        xmlns:ns0="https://ips-test.rosminzdrav.ru">ns0:Client.GW-011
      </faultcode>
      <faultstring>Не найден сертификат, соответствующий системе</faultstring>
    </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Мой код:
Код:

import sys
sys.path.append(r'pycades_0.1.22769/build/')
import pycades

store = pycades.Store()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert(certs.Count != 0), "Сертификат не установлен в хранилище или не установлен родительский сертификат"

signer = pycades.Signer()
signer.Certificate = certs.Item(1)
signer.CheckCertificate = True

content_to_sign = 'xml из примера'

signedXML = pycades.SignedXML()
signedXML.Content = content_to_sign
signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED | pycades.CADESCOM_XADES_BES
signature = signedXML.Sign(signer)

signedXML.Content = ""
signedXML.Verify(signature)
assert(signature == signedXML.Content), "Incorrect value of SignedXML.Verify result"
signature = signedXML.Sign(signer)


Формат запроса из документации:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  <s:Header>
    <a:Action>sendDocument</a:Action>
    <transportHeader xmlns="http://egisz.rosminzdrav.ru" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <authInfo>
        <clientEntityId>Идентификатор ИС, полученный при регистрации</clientEntityId>
      </authInfo>
    </transportHeader>
    <a:MessageID>Идентификатор сообщения</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To>Адрес сервиса Системы в ИПС</a:To>
    <wsse:Security>
      Блок подписи
    </wsse:Security>
  </s:Header>
  <s:Body xmlns:d2p1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" d2p1:Id="BodyID-de50a37c-7d9b-4132-9453-ef063ddd4b39">
    <sendDocument xmlns="http://receiver.service.nr.eu.rt.ru/">
      <oid xmlns="">OID медицинской организации, ключ указанный при регистрации</oid>
      <service xmlns="">Наименование метода</service>
      <document xmlns="">Полезная нагрузка сообщения (сообщение в формате Base64)</document>
    </sendDocument>
  </s:Body>
</s:Envelope>


Подскажите, пожалуйста, возможно ли реализовать подписание XML в нужном формате(Ws-Security) через библиотеку pycades?
Если да, то подскажите что для этого нужно исправить?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.