Как исправить «незащищенный ответ» с PHP SOAP-сервера через SSL - PullRequest
0 голосов
/ 14 февраля 2019

Клиент WCF инициирует безопасное соединение с сервером SOAP через WSDL.Журнал показывает, что авторизация WS-безопасности прошла нормально, и сервер SOAP правильно ответил, но клиент разорвал соединение, потому что ответ был небезопасным.Поскольку у меня нет доступа к клиентской среде, мне нужна помощь, чтобы решить эту проблему на стороне сервера.Какие дополнительные заголовки я должен добавить к ответу?

У сервера есть сертификат, у клиента есть ключ.

<wsp:Policy xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken">
  <wsp:ExactlyOne>
   <wsp:All>
    <sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
     <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
     <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"/>
    </wsp:Policy>
   </sp:SupportingTokens>
  </wsp:All>
 </wsp:ExactlyOne>
</wsp:Policy>

Заголовок запроса:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <s:Header>
        <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <u:Timestamp u:Id="_0">
                <u:Created>2019-02-14T18:30:07.568Z</u:Created>
                <u:Expires>2019-02-14T18:35:07.568Z</u:Expires>
            </u:Timestamp>
                <o:UsernameToken u:Id="xxx" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <o:Username>user</o:Username>
                <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">xxx</o:Password>
                <o:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">xxx</o:Nonce>
                <u:Created>2019-02-14T18:30:07.568Z</u:Created>
            </o:UsernameToken>
        </o:Security>
    </s:Header>
    <s:Body>
        <isSystemListening xmlns="urn:xxx"/>
    </s:Body>
</s:Envelope> 

Заголовок ответа:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns3="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordDigest" xmlns:ns4="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#Base64Binary" xmlns:ns5="urn:xxx">
    <SOAP-ENV:Header>
        <ns1:Security SOAP-ENV:mustUnderstand="1" SOAP-ENV:actor="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <ns1:Timestamp>
            <Created>2019-02-14T18:30:07Z</Created>
            <Expires>2019-02-14T18:35:07Z</Expires>
        </ns1:Timestamp>
            <ns2:UsernameToken>
                <ns2:Username xsi:type="ns1:string">user</ns2:Username>
                <ns1:Password xsi:type="ns3:string">xxx</ns1:Password>
                <ns1:Nonce xsi:type="ns4:string">xxx</ns1:Nonce>
                <ns2:Created xsi:type="ns1:string">2019-02-14T18:30:07.568Z</ns2:Created>
            </ns2:UsernameToken>
        </ns1:Security>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns5:isSystemListeningResponse>
            <isUp>true</isUp>
        </ns5:isSystemListeningResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Какой бы клиент не получил ошибку

Произошла ошибка связи: процессору безопасности не удалось найти заголовок безопасности в сообщении.Это может быть связано с тем, что сообщение является незащищенной ошибкой или из-за несоответствия между связывающими сторонами.Это может произойти, если служба настроена для обеспечения безопасности, а клиент не использует защиту.

...