• PHP 使用 cURL HTTPS 协议证书认证问题


    参考 :

    StackOverflow

    CA证书下载地址 :

    Click Me

    PHP 使用 cURL 模块访问 https 时认证问题

    $ch = curl_init();
    $options = array(
        CURLOPT_URL=>$url,
        // 返回状态大于400时报错错误, 默认忽略
        CURLOPT_FAILONERROR=>true, 
        // 将返回内容赋值到变量, 默认直接输出
        CURLOPT_RETURNTRANSFER=>false,
        // 汇报全部的连接过程和意外
        CURLOPT_VERBOSE => 1,
    	/*
    	将verbose存储在资源中
    	curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+'));
    	OR 
    	curl_setopt($session, CURLOPT_FILE, $logfh);
    	*/
        //显示头部信息
        // CURLOPT_HEADER => TRUE,
        CURLOPT_SSLVERSION => 3,
    	
        // **关键部分** 
        // 这里的路径指向认证服务器证书的CA证书, 不是服务器的证书
        CURLOPT_CAINFO=>'A:xxxcertcacert.pem',
        //CURLOPT_CAPATH=>dirname(__FILE__),
    	
        // 连接时使用 SSL/TLS 认证 , 一般和下面的 CURLOPT_SSL_VERIFYHOST 一起用
        // 忽略SSL/TLS认证, 2者同时为假
        CURLOPT_SSL_VERIFYPEER=>TRUE,
        // 认证证书中公用名称, 一般指证书中的 Common Name 即域名
        CURLOPT_SSL_VERIFYHOST=>2,
        
        //CURLOPT_HTTP200ALIASES=>[200],
        // 设置代理
        //CURLOPT_PROXY=>'http://127.0.0.1:8989',
        CURLOPT_POST=>true,
        // POST 内容, 需要urlencode处理一下
        CURLOPT_POSTFIELDS=>$data,
        // 设置头部
        CURLOPT_HTTPHEADER=>$header,
    );
    curl_setopt_array($ch, $options);
            
    try{
        $reponse = curl_exec($ch);
        if($reponse === false){
        	throw new Exception("访问异常: " . curl_error($ch), 400);
        }
    }catch(Exception $e){
    	echo $e->getMessage();
    }
    //echo $reponse;
    // print_r(curl_getinfo($ch));
    curl_close($ch);
    
    
  • 相关阅读:
    laravel5.1--数据库操作
    coreseek (sphinx)+ Mysql + Thinkphp搭建中文搜索引擎详解
    apache配置虚拟主机
    PHP下利用PHPMailer
    linux中编译安装Apache、PHP、MySQL(上)
    MariaDB配置远程访问权限
    虚拟主机的配置
    PHP–图像XX因其本身有错无法显示
    apache重写中匹配?即查询时用到的字符
    nginx反向代理时的情况分析
  • 原文地址:https://www.cnblogs.com/dongyanglv/p/6669033.html
Copyright © 2020-2023  润新知