Из-за недавней уязвимости, обнаруженной в SSLv3 , многие поставщики веб-сервисов (например, PayPal, Facebook, Google) отключают это и хотят, чтобы мы использовали TLS вместо этого. У меня есть немного проблемы с выяснением, как это сделать.
В настоящее время я использую следующую функцию для обработки моих запросов cURL.
function CURLRequest($Request = "", $APIName = "", $APIOperation = "", $PrintHeaders = false) { $curl = curl_init(); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_URL, $this->EndPointURL); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $Request); if($this->APIMode == 'Certificate') { curl_setopt($curl, CURLOPT_SSLCERT, $this->PathToCertKeyPEM); } $Response = curl_exec($curl); /* * If a cURL error occurs, output it for review. */ if($this->Sandbox) { if(curl_error($curl)) { echo curl_error($curl).'<br /><br />'; } } curl_close($curl); return $Response; }
Однако, когда я пытаюсь попасть в изолированную программную панель PayPal, в которой они уже отключены, я получаю ошибку cURL: ошибка: 14077410: процедуры SSL: SSL23_GET_SERVER_HELLO: отказ в сбое оповещения sslv3
Информация, которую я обнаружил, заключается в том, что мне просто нужно изменить это, чтобы использовать TLS вместо SSL, а другие ответы, которые я видел, просто делают это, добавляя параметр curl для моей функции …
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
Однако я добавил эту опцию, и я все равно получаю тот же результат. Любая информация о том, как я могу получить эту работу, будет очень благодарна. Благодаря!
Скопировано из: Ошибка SSL не может измениться на TLS
Попробуйте добавить curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
к вашему коду.
Это будет работать, если вы используете cURL на основе OpenSSL libssl, но не на основе nss .
Лучшее решение до тех пор, пока Paypal не обновит свой основной SDK, было бы переопределить CURLOPT_SSL_CIPHER_LIST непосредственно в вашем приложении. Таким образом, вам не нужно напрямую вмешиваться в пакет sdk-core-php, и вы сможете бесплатно обновить его в будущем.
Вы можете добавить что-то вроде следующего в логику загрузки или обработки платежей приложения:
PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSL_CIPHER_LIST] = 'TLSv1';
Просто убедитесь, что вы подробно прокомментируете его и не забывайте вынимать его позже, когда проблема была исправлена в ядре.
Я только что решил обновить библиотеку nss
через терминал.
Если вышеуказанное не помогает, проверьте версию OPENSSL. Вероятно, из-за версии OPENSSL <= 0.9.8. Обновление для PHP7 помогает, что связано с более высокой версией OPENSSL.