欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[PHP] curl访问https与CA证书问题

程序员文章站 2022-04-28 14:02:58
CA证书,用来在调用HTTPS资源的时候,验证对方网站是否是CA颁布的证书,而不是自己随便生成的 curl命令1.需要下载CA证书 文件地址是 http://curl.haxx.se/ca/cacert.pem2.把下载的文件放到这个位置 /etc/pki/tls/certs/ca-bundle.c ......

ca证书,用来在调用https资源的时候,验证对方网站是否是ca颁布的证书,而不是自己随便生成的

curl命令
1.需要下载ca证书 文件地址是 http://curl.haxx.se/ca/cacert.pem
2.把下载的文件放到这个位置 /etc/pki/tls/certs/ca-bundle.crt
3.curl就可以访问https的资源了

php代码

function post($url, $data=array(), $refer = "", $timeout = 30, $header = array()){
    $curlobj = curl_init();
    $ssl = stripos($url,'https://') === 0 ? true : false;
    $options = array(
        curlopt_url => $url,
        curlopt_returntransfer => 1,
        curlopt_post => 1,
        curlopt_postfields => $data,
        curlopt_followlocation => 1,
        curlopt_autoreferer => 1,
        curlopt_useragent => 'webface selfservice form',
        curlopt_timeout => $timeout,
        curlopt_http_version => curl_http_version_1_0,
        curlopt_ipresolve => curl_ipresolve_v4,
        curlopt_referer => $refer
    );  
    if (!empty($header)) {
        $options[curlopt_httpheader] = $header;
    }   
    if ($refer) {
        $options[curlopt_referer] = $refer;
    }   
    if ($ssl) {
        //注意看这里就是配置ca证书
        //只信任ca颁布的证书
        $options[curlopt_ssl_verifypeer]=true;  
        //本地ca证书,用来验证网站的证书是否是ca颁布的
        $options[curlopt_cainfo]=getcwd() . '/cacert.pem';
        //验证域名是否匹配
        $options[curlopt_ssl_verifyhost] = 2;
        /*  
        //忽略证书验证,信任任何证书
        $options[curlopt_ssl_verifyhost] = false;
        $options[curlopt_ssl_verifypeer] = false;
        */
    }   
    curl_setopt_array($curlobj, $options);
    $returndata = curl_exec($curlobj);
    if (curl_errno($curlobj)) {
        $returndata = curl_error($curlobj);
    }   
    curl_close($curlobj);
    return $returndata;
}
$res=post("https://www.baidu.com");
var_dump($res);