php curl https 证书问题 58错误总结

@(mac os x)[mac][os x][curl][https][证书][SSL][OpenSSL]

php curl https 证书问题 58错误总结


在调试微信退款时,报了一个奇怪的错误
curl_errno($ch) 返回 58 错误

很费解。于是到google、百度 查关键字 php curl 证书58错误 微信退款 58错误 找对应的解决方案。
但是得到的回答都是 证书路径是相对路径导致的问题, 要写绝对路径,除此之外再无其他答案

在没有任何进展的情况下,我把关键字提升精确度,匹配到 系统级别, 前面加 linux mac os x 关键字,还是了无进展

其实如果真的没有进展,还是有备选方案的,可以在本地建虚拟机,将php环境部署一份到本机虚拟机中,但是这样很麻烦。我一向是比较钻牛角尖的,不到黄河心不死,于是把这种备选方案先搁置了,继续寻找问题解决办法

于是,我把php curl 报错的详细信息打印出来
curl_error($ch)
报如下的错
curl: (58) SSL: Can't load the certificate "cert.pem" and its private key: OSStatus -25299

至此,终于发现了一点线索,我把这个作为搜算关键字到google详细寻找答案 OSStatus -25299
然后找到了一些感觉搭边的解决方法:
brew rm curl && brew install curl –with-openssl
brew uninstall php56 && brew install php56 –with-homebrew-curl

brew install homebrew/php/php56 –with-curl –with-openssl –with-mcrypt –enable-opcache

但是还是没有解决,沮丧!!

后来又逐一排查问题:
- 是否因为curl header解析问题导致?
于是加了,不起作用。

curl_setopt($ch , CURLOPT_HTTPHEADER, array('Expect:'));
  • 是否是因为本地设了代理?
    于是关了代理 什么adblock浏览器插件、佛跳墙等都关了,也不起作用
  • wireshark抓包吧!
    除了三次握手,其他的没啥端倪

至此,还是没有任何进展
2016-08-24 彻夜无眠。

甘心了没?还是没甘心!,10点多起来马上到公司又抽出了2个小时来看这个问题,
其中还卸载了当前的php,重新编译安装了一次php,但是却毫不留情的不断报503错误,看nginx 的error.log 日志,看php的php-fpm.log日志,也找不到明确的答案,error.log日志报的错也模棱两可。。。

后来,根据网上的类似的问题解决方法,把微信退款需要的证书导入到 keychain 中,但是没用

当日回来继续追查。
发现网上的一个问题很符合我目前所遇到的问题
执行下面的命令:
$ php -i | grep "SSL Version"
  SSL Version => SecureTransport
SecureTransport是苹果的SSL协议栈
主流的协议栈 包括:开源的 OpenSSL、开源的 GnuTLS、微软的 SSP、苹果的 SecureTransport
苹果的 SecureTransport的解析方式与开源的 OpenSSL解析方式是不同的。
需要切换到这种方式:
SSL Version => OpenSSL/1.0.2f

kim-macbook-pro:~ kim$ php -i | grep "SSL"
SSL => Yes
SSL Version => OpenSSL/1.0.2f
SSL Support => enabled
core SSL => supported
extended SSL => supported
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.2f  28 Jan 2016
OpenSSL Header Version => OpenSSL 1.0.2f  28 Jan 2016
OpenSSL support => enabled

下面是详细步骤:
$ brew tap homebrew/versions

$ brew uninstall mcrypt

$ brew uninstall homebrew/php/php56-mcrypt

$ brew install mcrypt

$ brew install homebrew/php/php56-mcrypt

$ brew install --with-homebrew-curl homebrew/php/php56

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

$ sudo nginx -s reload

大功告成!准备洗澡!!

没有更多推荐了,返回首页