Как исправить ошибки политики безопасности, выполнив запрос curl soap с помощью библиотеки robrichards/wse-php

#xml #web-services #encryption #soap #digital-signature

Вопрос:

Я пытаюсь запросить веб-службы, которые реализованы на основе стандартов OASIS. стек веб-служб поддерживает WS-Security и WS-SecurityPolicy для настройки обработки безопасности

Я использовал эту библиотеку php для подписи и шифрования своего запроса, https://github.com/robrichards/wse-php/blob/master/examples/soap-sign-encrypt.php

Мое требование таково

  1. цифровая подпись Имя пользователя,метка времени и тело с использованием закрытого ключа и подписи включают элемент информации о ключе, содержащий сведения о сертификате X. 509
  2. после подписания зашифруйте имя пользователя и тело с помощью открытого ключа

Я попытался выполнить образец запроса без подписи и шифрования

 <?xml version="1.0"?>
<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:dit=""
    xmlns:req="">
    <soapenv:Header>
        <wsse:Security
            xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
            <wsse:UsernameToken>
                <wsse:Username>XXXXX</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXX</wsse:Password>
                <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">uB GW2PHDDR3t dTz7bNJguBQgLqlR5 R0=</wsse:Nonce>
                <wsu:Created
                    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2021-05-17T08:46:53Z
                </wsu:Created>
            </wsse:UsernameToken>
            <wsu:Timestamp
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <wsu:Created>2021-05-17T08:46:53Z</wsu:Created>
                <wsu:Expires>2021-05-17T08:52:53Z</wsu:Expires>
            </wsu:Timestamp>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <dit:getAddClientServicecDetails>
            <dit:DitRequest uniqueRequestId="XXXXXXXX">
                <req:pan>CFXXXXXXXXXX</req:pan>
                <req:dob>XX/XX/XXXX</req:dob>
            </dit:DitRequest>
        </dit:getAddClientServicecDetails>
    </soapenv:Body>
</soapenv:Envelope>
 

Получите следующий ответ, помогите мне в устранении следующей проблемы

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>These policy alternatives can not be satisfied: 
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}AsymmetricBinding: Received Timestamp does not match the requirements
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}InitiatorToken
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}X509Token: The received token does not match the token inclusion requirement
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}RecipientToken
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}IncludeTimestamp
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}OnlySignEntireHeadersAndBody
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}SignedEncryptedSupportingTokens: The received token does not match the signed encrypted supporting token requirement
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}SignedParts: {http://schemas.xmlsoap.org/soap/envelope/}Body not SIGNED
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}EncryptedParts: {http://schemas.xmlsoap.org/soap/envelope/}Body not ENCRYPTED</faultstring></soap:Fault></soap:Body></soap:Envelope>
 

После добавления подписи и шифрования возникает следующая ошибка

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode xmlns:ns1="http://ws.apache.org/wss4j">ns1:SecurityError</faultcode><faultstring>A security error was encountered when verifying the message</faultstring></soap:Fault></soap:Body></soap:Envelope>
 

Будет полезно, если вы поделитесь некоторыми допустимыми образцами xml для справки. Спасибо