PHP 编程 · 2019/10/27 0

PHP ssl3_get_server_certificate certificate verify failed

出现此类问题, 表明服务器的证书不在执行程序的服务器的信任证书列表里, 导致证书验证出错, 因此方案有两种:

一. 修复证书信任列表载入

此种方法通常没啥效果, 但是安全性没有损失

方案有:

  1. 更新证书
    sudo update-ca-certificates

二. 代码中忽略校验

此种方法非常有效, 但是可能会受到中间人攻击, 这点需要注意, 需要忽略两种常用校验:

  1. 忽略流内容中的校验
    <?php
    stream_context_set_default( [ 'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ]);
    
  2. 忽略CURL请求中的校验
    <?php
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);