php实现https双向验证

首发 PHP社区
QRI的头像

QRI

这人还不错哦!

通常情况下,在部署https的时候,是基于ssl单向认证的,也就是说只要客户端认证服务器,而服务器不需要认证客户端。
但在一些安全性较高的场景,通常会要求进行客户端认证。从而实现ssl的双向认证。

准备工作

  • ca证书
  • 客户端证书

代码实例

代码中使用stream_context_create()函数,创建创建资源流上下文。具体参数可参考上下文(Context)选项和参数https://www.php.net/manual/zh/context.php

    /**
     * https 双向验证接口
     * @param string $url  请求链接
     * @param mixed $data body 参数
     * @param array $header 附加header参数
     * @param string $reqType   请求类型
     * @return false|string
     */
    function SendHttps($url,$data,$header=['Content-Type:application/json;charset=utf-8'],$reqType='POST'){
        $opts = [
            'http' => [
                'method' => $reqType,
                'header' => $header,
                'content' => $data,
            ],
            'ssl' => [
                "verify_peer" => true,
                "verify_peer_name" => false,// 忽略客户端证书验证
                'cafile'=>'ca.crt',         // 根证书
                'allow_self_signed'=>true,  // 是否允许自签名证书
                'local_cert'=>'client.crt', // 客户端证书
                'local_pk'=>'client.key',   // 客户端私钥
            ]
        ];
        $opts = stream_context_create($opts);
        return @file_get_contents(trim($url), false, $opts);
    }
发布于 2020-08-21 09:28:44
阅读:1 0 2020-08-21
文章被以下专栏收录
PHP社区

PHP技术分享,干货分享

目录