首页 LNMP PHP 正文

PHP CURL .JKS P12,使用PHP CURL访问双向认证的tomcat https地址

金鹏头像 金鹏 PHP 2022-03-07 18:03:02 0 876
导读:<?php    header("Content-type:text/html;charset=utf-8&qu...
<?php


    header("Content-type:text/html;charset=utf-8");

    /************************curl双向认证常量配置start**************************/

    //根证书路径

    define('HTTPS_CAINFO', '/home/ljlia/https_ca/ca/root.crt');

    //client.pem文件路径

    define('HTTPS_SSLCERT', '/home/ljlia/https_ca/ca/citic/client.pem');

    //私钥文件路径

    define('HTTPS_SSLKEY', '/home/ljlia/https_ca/ca/citic/client.key');

    //私钥密码

    define('HTTPS_SSLKEYPASSWD', '123456');

    /************************curl双向认证常量配置end**************************/

    

    $wxpayUrl = 'https://citic.pay.develop:8443/wxpay/BillCompareServlet';

    $alipayUrl = 'https://citic.pay.develop:8443/alipay/BillCompareServlet';

    $token = md5('BillCompareServletdoPostcasher');  //验证token

    $array = array(

        'token' => $token

    );

    $wechat = doPost($wxpayUrl,$array);

    $alipay = doPost($alipayUrl,$array);

    

    /**

    * [方法描述] CURL模拟post请求,执行https双向认证

    * @param [string] $url  请求路径

    * @param [array] $fields  请求参数 array( 'data' => '111' );

    * @param [array ] $extraheader [header头部的重写]

    * @param [const] 常量定义 HTTPS_CAINFO 根证书 例:/home/ljlia/rgz/ca/root.crt

    * @param [const] 常量定义 HTTPS_SSLCERT client.pem文件路径 例:/home/ljlia/www/pay/client.pem

    * @param [const] 常量定义 HTTPS_SSLCERTPASSWD client证书密码

    * @param [const] 常量定义 HTTPS_SSLKEY 私钥文件路径

    * @param [const] 常量定义 HTTPS_SSLKEYPASSWD 私钥密码

    * @return  接口返回的数据

    */

    function doPost($url, $fields, $extraheader = array()){


        $fields = http_build_query($fields);    //将数据进行URL-encode转换

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_POST, true);

        curl_setopt($ch, CURLOPT_PORT, 8443);//指定端口

        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields );  //post参数

        curl_setopt($ch, CURLOPT_HTTPHEADER, $extraheader);  //设置一个header中传输内容的数组。

        curl_setopt($ch, CURLOPT_SSLVERSION, 1);//传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定,在更多的安全中你必须手工设置

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); //不信任任何证书

        curl_setopt($ch, CURLOPT_CAINFO, HTTPS_CAINFO); //根证书路径

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名,0不验证

        curl_setopt($ch, CURLOPT_VERBOSE, 1); //debug模式

        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

        curl_setopt($ch, CURLOPT_SSLCERT, HTTPS_SSLCERT); //client.pem文件路径

        // curl_setopt($ch, CURLOPT_SSLCERTPASSWD, HTTPS_SSLCERTPASSWD); //client证书密码

        curl_setopt($ch, CURLOPT_SSLKEY, HTTPS_SSLKEY);//私钥文件路径

        curl_setopt($ch, CURLOPT_SSLKEYPASSWD, HTTPS_SSLKEYPASSWD);//私钥密码

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 如果成功只将结果返回,不自动输出任何内容。

        $output = curl_exec($ch);

        if(curl_errno($ch) != 0) $output = 'Curl error: ' . curl_error($ch);//curl错误信息

        curl_close($ch);

        return $output;

    }


?>


本文地址:https://www.jinpeng.work/?id=115
若非特殊说明,文章均属本站原创,转载请注明原链接。
广告3

欢迎 发表评论:

  • 请填写验证码

日历

«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930

控制面板

您好,欢迎到访网站!
  查看权限
广告2

退出请按Esc键