美文网首页
使用PHP CURL访问双向认证的tomcat https地址

使用PHP CURL访问双向认证的tomcat https地址

作者: _伽蓝寺听雨声 | 来源:发表于2017-06-21 10:59 被阅读646次

    <?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;

    }

    linux下Tomcat+OpenSSL配置单向&双向认证(自制证书)

    生成双向认证证书

    制作根证书

    1. 创建根证书密钥文件(自己做CA) root.key

    openssl genrsa -des3 -out root.key 2048

    2. 创建根证书的申请文件 root.csr

    openssl req -new -key root.key -out root.csr

    3. 创建一个自当前日期起为期十年的根证书 root.crt

    openssl x509 -req -days 3650 -sha256  -extensions v3_ca -signkey root.key -in root.csr -out root.crt

    4.根据CA证书生成truststore JKS文件 root.truststore

    //这一步只针对双向认证,单向不需要

    keytool -keystore root.truststore -keypass 123456 -storepass 123456 -alias ca -import -trustcacerts -file root.crt

    键入回事后,提示是否信息此证书,输入yes, 则生成truststore成功

    制作service服务器端证书

    1.创建服务器证书密钥 server.key

    openssl genrsa -des3 -out server.key 2048

    2.创建服务器证书的申请文件 server.csr

    openssl req -new -key server.key -out server.csr

    3.创建自当前日期起有效期为期十年的服务器证书 server.crt

    openssl x509 -req -days 3650 -sha256  -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -in server.csr -out server.crt

    4.导出.p12文件 server.p12

    openssl pkcs12 -export -in server.crt -inkey server.key -out  server.p12 -name "server"

    根据命令提示,输入server.key密码,创建p12密码。

    5.将.p12 文件导入到keystore JKS文件 server.keystore

    keytool -importkeystore -v -srckeystore  server.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore server.keystore -deststoretype jks -deststorepass 123456

    这里srcstorepass后面的123456为server.p12的密码deststorepass后的123456为keyStore的密码

    制作client客户端证书

    1.创建客户端证书密钥文件 client.key

    openssl genrsa -des3 -out client.key 2048

    2.创建客户端证书的申请文件 client.csr

    openssl req -new -key client.key -out client.csr

    3.创建一个自当前日期起有效期为十年的客户端证书 client.crt

    openssl x509 -req -days 3650 -sha256  -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -in client.csr -out client.crt

    4.导出.p12文件 client.p12

    openssl pkcs12 -export -in client.crt -inkey client.key -out  client.p12 -name "client"

    根据命令提示,输入client.key密码,创建p12密码。

    curl 生成所需pem文件:

    openssl x509 -req -days 3650 -sha256  -extensions v3_req -CA ../root.crt -CAkey ../root.key -CAcreateserial -in client.csr -out client.pem

    相关文章

      网友评论

          本文标题:使用PHP CURL访问双向认证的tomcat https地址

          本文链接:https://www.haomeiwen.com/subject/gqmzqxtx.html