2015-09-07 1 views
2

Я использую MAMP для OS X Yosemite для разработки веб-сайта на моей локальной машине. Веб-сайт представляет собой клиентское приложение для API, работающего на HTTPS. Я постоянно получаю эту ошибку, когда я пытаюсь вызвать API из PHP:Ошибка MAMP SSL: «ошибка: 14077410: SSL-процедуры: SSL23_GET_SERVER_HELLO: сбой сбоя связи sslv3»

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 

Тот же самый код работает на сервере, но сайт уже находится в производстве, поэтому мне нужно, чтобы быть в состоянии создать отдельную среду разработки. Я получаю точно такую ​​же ошибку, называю ли я API API cURL или file_get_contents. Я могу использовать cURL в командной строке или загружать URL-адрес в моем браузере, и он отлично работает. Я потратил несколько часов на чтение и пробовал все другие решения, которые я мог найти на этом сайте и в других местах, и никто из них не работал. Кто-нибудь еще видел эту проблему?

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

ответ

18

Решение:

  1. brew install openssl
  2. Скачать и распаковать последнюю cURL
  3. В исходном каталоге Скручивание

    LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" ./configure --prefix=/Applications/MAMP/Library/ 
    
  4. make
  5. make install
  6. Restart MAMP
  7. В PHP, между curl_init и curl_exec:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    

Объяснение:

Путь к нахождению решения началось с this site, который описывает другую ошибку SSL на MAMP, и предлагает перекомпилировать новую версию cURL с
--prefix=/Applications/MAMP/Library/, чтобы перезаписать один M AMP использует. Я пробовал это, но это не сработало. Позже кое-что овладело мной, чтобы изучить параметры компиляции cURL, и я заметил инструкции для указания другой версии OpenSSL при ее компиляции. Я решил попробовать (обещая, что это была последняя попытка, а затем я сдаюсь). Я установил до даты OpenSSL пакета с Homebrew, и его полезно после установки информации сказала:

If you build your own software and it requires this formula, you'll need to add to your 
build variables: 

LDFLAGS: -L/usr/local/opt/openssl/lib 
CPPFLAGS: -I/usr/local/opt/openssl/include 

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

LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" ./configure 

Я добавил обратно в --prefix=/Applications/MAMP/Library/, а затем обычным make и make install, перезапущен MAMP, и вздохнул с облегчением.

Позже я обнаружил, что один из вариантов cURL, который я выбрал с другого веб-сайта, также был необходим, чтобы избежать другой ошибки SSL («проблема с сертификатом SSL: не удалось получить сертификат локального эмитента»).Установка CURLOPT_SSL_VERIFYPEER на ложное решение для меня.

+1

Благодаря этим решить мою проблему. Я боролся с ошибкой: 14077410: SSL-процедуры: SSL23_GET_SERVER_HELLO: sslv3 ошибка сбоя рукопожатия в течение нескольких дней в моей локальной среде разработки и обновила мою версию SSL, но не связали ее с Mamp. Этот пост связал точки для меня! –

+0

Спасибо, это сэкономило мне несколько часов разочарования и ударило головой о мой стол. Я не могу заплатить вам, но я сделаю следующее самое лучшее - дайте вам несколько очков. –

+0

Большое вам спасибо, я потерял 3 дня, пытаясь найти решение, пока не попробовал его с вашей инструкцией – fenixkim

0

Вот решение, которое работает для меня на MAMP Pro 3.5 работает на OSX 10.11.1

В вашем PHP вы, возможно, потребуется установить версию SSL и соответствующий Cipher для curl_init():

curl_setopt($ch, CURLOPT_SSLVERSION, 1); 
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); 

для точных параметров вы можете перейти к CURLOPT_SSLVERSION см: http://php.net/manual/en/function.curl-setopt.php

Также следующее может отображать ошибки, связанные с SSL версии используются, чтобы помочь найти точную версию конфликта у вас есть:

$error = curl_error($ch); 
echo $error; 

Больше по этой команде: http://php.net/manual/en/ref.curl.php

+0

Стоит отметить, что, к сожалению, это работает только в том случае, если ваша система имеет некоторые последние версии PHP и/или OpenSSL. –

0

Ive была такая же проблема. Я решил это, вместо того, чтобы использовать программу Apple SecurePransport SSL. Следующее работал для меня:

  1. Скачать последний завиток (ZIP) версию от here
  2. Перейти к загрузкам папки и извлечь почтовый файл, дважды щелкнув на нем. Теперь в папках с загружаемыми файлами будет папка.
  3. Открыть терминал и перейдите к папке `кд ~/Downloads/папка имя-завиток»
  4. Затем в терминале типа
  5. make && make install

Restart MAMP и посмотреть, если эти изменения работали. Один из способов проверить это назвать следующие на вашей MAMP программы PHP в терминале:

/Applications/MAMP/bin/php/php5.5.14/bin/php -r 'echo json_encode(curl_version(), JSON_PRETTY_PRINT);'

Вы должны увидеть "ssl_version": "SecureTransport"