После 4 лет надежной работы мой сценарий прослушивания PHP начал давать сбой с 8 октября 2019 года с ошибкой
- Запрос был прерван: не удалось создать безопасный канал SSL / TLS.
Я ничего не изменил на своем сервере. Сертификат SSL является действительным v3 от Lets Encrypt. TLS - 1.2.
Я часами звонил в службу поддержки без разрешения, кроме того, что они говорили мне, что мне нужно установить их сертификаты здесь: https://www.docusign.com/trust/compliance/public-certificates
Проблема в том, что яне знаю, как бы я интегрировал это с моим сервером, и мой веб-хостинг тоже не знает. Когда их спрашивают, они также не могут объяснить это.
Сценарий слушателя на моем сервере довольно прост:
function guid() {
$uuid = '';
if (function_exists('com_create_guid')){
$uuid = com_create_guid();
// somehow the function com_create_guid includes {}, while our webservice
// doesn't. Here we are changing the format by taking those curly braces out.
$uuid = str_ireplace("{", "", $uuid );
$uuid = str_ireplace("}", "", $uuid );
} else {
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12);
}
return $uuid;
}
// Figure out the URL of this server
// NOTE: DocuSign only pushes status to HTTPS!
$postBackPath = empty($_SERVER['HTTPS']) ? 'http://' : 'https://';
$postBackPath .= ($_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'] );
$postedXml = @file_get_contents('php://input');
if (!empty($_POST['post'])) {
// if this is a sample load
$xml = simplexml_load_file("post.sample") or die("Unable to load sample XML file!");
$xml->EnvelopeStatus->EnvelopeID = guid(); // here we replace the GUID so we have unique files
// using the curl library to get the post
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,30);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_URL, $postBackPath);
curl_setopt($curl, CURLOPT_HEADER, array("Content-Type: application/xml"));
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml->asXML());
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec ( $curl );
curl_close ($curl);
}
else if(!empty($postedXml)) {
// see if this is a post to this page if it is then we have to save it.
$xml = simplexml_load_string($postedXml);
$post = $xml;
print 'Got Envelope ID: ' . $xml->EnvelopeStatus->EnvelopeID . '<br />';
}
После этого кода он просто анализирует данные из xml, который яперейти в мой CRM.
В настройках Docusign Connect у меня включен журнал и требуется подтверждение. Все параметры интеграции и безопасности не проверены (подпись HMAC, Включить заголовок базовой аутентификации, требуется взаимный TLS, использовать интерфейс SOAP, включить взаимный контроль TLS, все не проверены).
ОБНОВЛЕНИЕ: Ответот моего веб-хостинга, помогающего в этом вопросе:
Здравствуйте еще раз.
Я посмотрел на SSL, который вы в настоящее время установили для sub.domain.com (вы можете увидеть информацию изБраузер Chrome) Если вы щелкнете по замку в строке URL-адреса, а затем щелкните Сертификат> Сведения> Версия, вы (или docusign) увидите, что этот сертификат является версией 3, так как они указали, что вам нужно. Мне не ясно, где, по их мнению, вы должны установить их сертификат. Сертификат по предоставленной ссылке распространяется на na2.docusign.net, который не размещен на вашем сервере, поэтому нет места для установки того, о чем я знаю. Вы можете убедиться в этом, загрузив сертификат NA2 по предоставленной ими ссылке: https://www.docusign.com/trust/compliance/public-certificates
Откройте файл .cer в простейшем доступном текстовом редакторе и вставьте содержимое здесь: https://www.sslshopper.com/certificate-decoder.html
Это даст вам всю информацию о сертификате. В разделе «Subject:» вы увидите CN = na2.docusign.net, что означает, что он охватывает их домен, а не ваш.
Боюсь, нам понадобится дополнительная информация от DocuSign, чтобы помочь вам. ,Если бы этот SSL был установлен на вашем домене, он не прошел бы проверку подлинности любым браузером, подключающимся к вашему сайту, который не внушил бы никакой уверенности вашим посетителям.
Это тоже мое впечатлениепоэтому я чувствую, что мы неправильно понимаем, как этот сертификат от Docusign будет работать вместе с сертификатом, который у нас уже есть от Lets Encrypt.
Это проблема кодирования?
Я использую очень простую интеграцию подключения Docusign, которая является просто прослушивателем php, перехватывающим XML из законченного конверта и анализирующим еготак что я могу передать это моей CRM.