Шифрование и дешифрование с opensaml - PullRequest
0 голосов
/ 16 января 2020

У меня есть задача вызова soap службы без wsdl. У меня есть образец запроса и ответа и файл p12. Запрос должен выглядеть следующим образом:

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:al="http://example/exampleService/1.0">
  <soap:Header>
    <wsse:Security>
      <saml:EncryptedAssertion>
        <xenc:EncryptedData
            Type="http://www.w3.org/2001/04/xmlenc#Element">
          <xenc:EncryptionMethod
                Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
            <ds:KeyInfo>
              <xenc:EncryptedKey>
                <xenc:EncryptionMethod
                      Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
                  <ds:KeyInfo>
                    <ds:X509Data>
                      <ds:X509Certificate>[...]</ds:X509Certificate>
                    </ds:X509Data>
                  </ds:KeyInfo>
                  <xenc:CipherData>
                    <xenc:CipherValue>[...]</xenc:CipherValue>
                  </xenc:CipherData>
              </xenc:EncryptedKey>
            </ds:KeyInfo>
            <xenc:CipherData>
              <xenc:CipherValue>[...]</xenc:CipherValue>
            </xenc:CipherData>
        </xenc:EncryptedData>
      </saml:EncryptedAssertion>
    </wsse:Security>
  </soap:Header>
  <soap:Body>
    <al:ExampleRequest>
      <Artifact>[...]</Artifact>
    </al:ExampleRequest>
  </soap:Body>
</soap:Envelope>

Ответ будет выглядеть следующим образом.

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:al="http://example/exampleService/1.0">
  <soap:Body>
    <al:ExampleResponse>
      <IpAddress>[...]</IpAddress>
      <saml:EncryptedAssertion>
        <xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element">
          <xenc:EncryptionMethod
                Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
            <ds:KeyInfo>
              <xenc:EncryptedKey>
                <xenc:EncryptionMethod
                      Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
                  <ds:KeyInfo>
                    <ds:X509Data>
                      <ds:X509Certificate>[...]</ds:X509Certificate>
                    </ds:X509Data>
                  </ds:KeyInfo>
                  <xenc:CipherData>
                    <xenc:CipherValue>[...]</xenc:CipherValue>
                  </xenc:CipherData>
              </xenc:EncryptedKey>
            </ds:KeyInfo>
            <xenc:CipherData>
              <xenc:CipherValue>[...]</xenc:CipherValue>
            </xenc:CipherData>
          </xenc:EncryptedData>
        </saml:EncryptedAssertion>
      </al:ExampleResponse>
   </soap:Body>
</soap:Envelope>

Я буду использовать opensaml2, но я относительно новичок в saml и xml шифрование. Достаточно ли документа на этой странице https://wiki.shibboleth.net/confluence/display/OpenSAML/OSTwoUserManJavaXMLEncryption для создания xml части saml: encryptedassertion и для расшифровки ответа?

У вас есть пример того, как я это делаю? Спасибо

...