2.4.6. Работа с Web-сервисами

Для обмена данными по протоколу HTTP(S) в системе Global предлагается использовать COM-объект WinHTTP, который входит в стандартную поставку ОС Windows.

отправить HTTPS-запрос (с указанием сертификата клиента)
<pascal soap_service_url, soap_service_function https_cert_subject, service_login, service_password, xml>
HttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');

HttpReq.Open('POST', soap_service_url, false);
HttpReq.SetClientCertificate(https_cert_subject);
HttpReq.setRequestHeader('Accept', 'text/xml;charset=UTF-8');
HttpReq.SetRequestHeader('SOAPAction', 'urn:' + soap_service_function);
HttpReq.SetCredentials(service_login, service_password, 0);

HttpReq.Send(xml);
Result := HttpReq.ResponseBody; //Возвращает массив байт - ответ сервера в оригинальной кодировке.
</pascal>

2.4.6.1. ЧаВО

Q: Метод Post генерирует ошибку с сообщением: Ошибка поддержки безопасных каналов

A: Клиентский сертификат (переданный в метод SetClientCertificate) не принят сервером

Q: Метод Post генерирует ошибку с сообщением: Недопустимый или неправильный центр сертификации

A: Возникает при использовании протокола https. Сервер предоставил невалидный сертификат - изданный сертификационным центром к которому нет доверия. Доверие к сертификационному центру определяется наличием его сертификата в хранилище сертификатов “Доверенные корневые центры сертификации”.

Q: Как сделать центр сертификации доверенным

A: Если у вас есть сертификат изданный интересующим центром - открыть этот сертификат и найти на вкладке “Путь сертификации” сертификат сертификационного центра (верхний узел в дереве сертификатов). Двойным кликом по этому узлу можно открыть сам сертификат и воспользоваться экспортом в соответствующее хранилище.

Q: Если необходимо управлять сертификатами более чем на одной машине в рамках корпоративной сети - можно ли автоматизировать процесс?

A: Можно эту функцию возложить на домен. Лучше поручить квалифицированному специалисту (системному администратору). Краткая инструкция от Microsoft.

Q: Метод Post генерирует ошибку с сообщением: Имя узла в сертификате недопустимо либо не соответствует

A: Сертификат предоставляемый сервером по протоколу HTTPS должен быть выдан на его доменное имя, в противном случае вы получите выше указанную ошибку. Это не ошибка клиента - ошибка держателя ресурса, либо ресурс не является подлинным (за ним стоит злоумышленник).