V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaoyong
V2EX  ›  PHP

在函数 file_get_contents():中使用 https 协议时出错

  •  
  •   xiaoyong · 2016-07-08 15:05:14 +08:00 · 8453 次点击
    这是一个创建于 3064 天前的主题,其中的信息可能已经有所发展或是发生改变。

    错误提示:

    Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in

    本地系统是 Win7 。相同的 php 代码在另一台本地 Mac 电脑中测试没有问题,只有在 Win7 有这个错误。 而且按照网上已经可以找到的原因: php.ini 中配置: curl.cainfo=C:\wamp\xxxxxxx\cacert.pem openssl.cafile=C:\wamp\xxxxxxx\cacert.pem 等方法都试过,还是无效。

    疑惑的就是:相同代码在本地 Mac 环境和远程服务器 linux 环境都可可以,在本地 Win7 环境下为什么不可以。 php.ini 配置也对比了,该开启的都开启了。

    如下图:

    11 条回复    2019-04-02 09:30:35 +08:00
    eoo
        2
    eoo  
       2016-07-08 18:27:43 +08:00 via Android
    用 CURL 有相应的处理 https 的参数
    fcicq
        3
    fcicq  
       2016-07-08 18:43:34 +08:00
    OpenSSL 版本? 服务器是否开了 SNI?
    cccRaim
        4
    cccRaim  
       2016-07-08 19:32:45 +08:00
    既然提到 file_get_content 了,那我就再提一个问题,怎么处理非 200 的网页内容,好像不是 200 段的就直接不读取网页内容了,让我遵从 restful api 的人非常尴尬
    cccRaim
        6
    cccRaim  
       2016-07-08 21:01:10 +08:00
    @yexiaoxing 果然还是要用 curl ,总之谢谢了
    yangxin0
        7
    yangxin0  
       2016-07-08 21:56:40 +08:00 via iPhone   ❤️ 1
    服务器证书对应 root 证书你没有配置好
    xiaoyong
        8
    xiaoyong  
    OP
       2016-07-08 23:13:41 +08:00
    @yangxin0 服务器是第三方的,我控制不了。只能访问他们提供的 URL ,即使在浏览器打开这个 URL 默认也是不显示的,提示证书有问题。
    chaegumi
        9
    chaegumi  
       2016-07-09 06:27:02 +08:00
    昨天我一台机子用 composer 有出这样的错误,是 php5.5.7 ,解决不了,后边我又安装了一个 php7 ,用 php7 跑 composer 就好了,也不知道啥回事
    rainfox
        10
    rainfox  
       2019-03-13 12:45:07 +08:00   ❤️ 1
    服务器 下载这个证书,http://curl.haxx.se/ca/cacert.pem


    php.ini 配置

    openssl.cafile = "/etc/ssl/certs/cacert.pem"//你实际下载证书的路径

    重启 php 即可
    irudder
        11
    irudder  
       2019-04-02 09:30:35 +08:00
    遇到同样的问题
    解决办法:
    $stream_opts = [
    "ssl" => [
    "verify_peer"=>false,
    "verify_peer_name"=>false,
    ]
    ];

    $response = file_get_contents("https://www.example.com",
    false, stream_context_create($stream_opts));
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5522 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:02 · PVG 15:02 · LAX 23:02 · JFK 02:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.