MAMP SSL错误:"错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败"

lin*_*zzy 3 php ssl curl mamp osx-yosemite

我在OS X Yosemite上使用MAMP在我的本地机器上开发一个网站.该网站是在HTTPS上运行的API的客户端应用程序.当我尝试从PHP调用API时,我不断收到此错误:

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Run Code Online (Sandbox Code Playgroud)

相同的代码在服务器上运行,但该站点已经在生产中,因此我需要能够创建单独的开发环境.无论我是用cURL调用API,我都会得到完全相同的错误file_get_contents.我可以在命令行上使用cURL或在我的浏览器中加载URL,它工作正常.我花了几个小时阅读并尝试了我在本网站和其他地方找到的所有其他解决方案,但没有一个能够奏效.有没有人见过这个问题?

更新:我在发布这个问题之前终于找到了解决问题的方法,但这是一个非常痛苦的过程,无论如何我都希望它可以帮助其他人避免这种令人毛骨悚然的灾难.我的解决方案如下.

lin*_*zzy 22

解决方案:

  1. brew install openssl
  2. 下载并打开最新的cURL
  3. 在cURL源目录中:

    LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" ./configure --prefix=/Applications/MAMP/Library/
    
    Run Code Online (Sandbox Code Playgroud)
  4. make
  5. make install
  6. 重启MAMP
  7. 在PHP中,在curl_init和之间curl_exec:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    
    Run Code Online (Sandbox Code Playgroud)

说明:

找到解决方案的路径始于此站点,该站点描述了MAMP上的不同SSL错误,并建议重新编译新版本的cURL
--prefix=/Applications/MAMP/Library/以覆盖一个MAMP使用.我尝试了这个,但它没有用.后来,有些东西让我研究cURL编译选项,我注意到在编译时指定不同版本的OpenSSL的说明.我决定尝试一下(承诺自己这是最后的尝试然后我会放弃).我用Homebrew安装了一个最新的OpenSSL软件包,其有用的安装后信息说:

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
Run Code Online (Sandbox Code Playgroud)

这看起来类似于我在cURL编译选项中看到的内容,它为上面指定了正确的语法:

LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" ./configure
Run Code Online (Sandbox Code Playgroud)

我加回的--prefix=/Applications/MAMP/Library/,其次是通常的makemake install,重新启动MAMP,并舒了一口气.

后来我发现我从其他网站抛出的一个cURL选项也是必要的,以避免不同的SSL错误("SSL证书问题:无法获得本地颁发者证书").设置CURLOPT_SSL_VERIFYPEER为false解决了我的问题.