#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
Мое требование таково
- цифровая подпись Имя пользователя,метка времени и тело с использованием закрытого ключа и подписи включают элемент информации о ключе, содержащий сведения о сертификате X. 509
- после подписания зашифруйте имя пользователя и тело с помощью открытого ключа
Я попытался выполнить образец запроса без подписи и шифрования
<?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 для справки. Спасибо