php使用curl库进行ssl双向认证
官方文档:
http://www.php.net/manual/zh/function.curl-setopt.php#10692
官方举例:
<?php
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '1');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '1');
curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ca.crt');
curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/cert/mycert.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'password');
?>
由于业务原因,后台登陆需要使用SSL双向认证,即web服务器有证书,浏览器客户端也需要安装证书
然后这样的话,php接口文件就需要走443端口来访问了
直接附上代码:
/*** @name ssl Curl Post数据* @param string $url 接收数据的api* @param string $vars 提交的数据* @param int $second 要求程序必须在$second秒内完成,负责到$second秒后放到后台执行* @return string or boolean 成功且对方有返回值则返回*/function curl_post_ssl($url, $vars, $second=30,$aHeader=array()){$ch = curl_init();//curl_setopt($ch,CURLOPT_VERBOSE,'1');curl_setopt($ch,CURLOPT_TIMEOUT,$second);curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLCERT,'/data/cert/php.pem');curl_setopt($ch,CURLOPT_SSLCERTPASSWD,'1234');curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLKEY,'/data/cert/php_private.pem');if( count($aHeader) >= 1 ){curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);}curl_setopt($ch,CURLOPT_POST, 1);curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);$data = curl_exec($ch);curl_close($ch);if($data)return $data;else return false;}
参数解释:
CURLOPT_TIMEOUT:超时时间
CURLOPT_RETURNTRANSFER:是否要求返回数据
CURLOPT_SSL_VERIFYPEER:是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的
CURLOPT_SSL_VERIFYHOST:是否检测服务器的域名与证书上的是否一致
CURLOPT_SSLCERTTYPE:证书类型,"PEM" (default), "DER", and"ENG".
CURLOPT_SSLCERT:证书存放路径
CURLOPT_SSLCERTPASSWD:证书密码
CURLOPT_SSLKEYTYPE:私钥类型,"PEM" (default), "DER", and"ENG".
CURLOPT_SSLKEY:私钥存放路径
由于php的curl只支持pem格式、der、eng格式,而之前生成的是p12的格式,所以需要转换一下
PKCS#12 到 PEM 的转换
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem 验证 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem
转载于:https://www.cnblogs.com/freespider/p/3622830.html
php使用curl库进行ssl双向认证相关推荐
- java代码实现证书生成客户端证书 实现ssl双向认证
目的:实现web项目的ssl双向认证客户端证书代码生成. 使用openssl生成ca证书和服务端证书,当然也可以通过代码实现 1)创建CA私钥,创建目录ca openssl genrsa -out c ...
- 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的
我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...
- SSL双向认证和SSL单向认证的区别
双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证 SSL 协议不需要客户拥有CA证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥 ...
- HTTPS|SSL笔记-SSL双向认证成功握手过程(含wireshark分析)
这里只研究连接过程. 整体的流程是这样的 前三个那个SYN.SYN ACK.ACK是TCP三次握手,就不说了. 1. 握手成功后,客户端发送自己支持的加密套,和随机数给服务端,也就是Client He ...
- java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android
客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...
- SSL双向认证和单向认证原理
一.公钥私钥 1,公钥和私钥成对出现 2,公开的密钥叫公钥,只有自己知道的叫私钥 3,用公钥加密的数据只有对应的私钥可以解密 4,用私钥加密的数据只有对应的公钥可以解密 5,如果可以用公钥解密,则必然 ...
- SSL双向认证和SSL单向认证的流程和区别
refs: SSL双向认证和SSL单向认证的区别 https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证! https://cloud.te ...
- 什么是SSL双向认证,与单向认证证书有什么区别?
SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是 ...
- Android 10 SSL双向认证握手失败
Android 10 SSL双向认证握手失败 公司项目前端时间遇到的一个问题(已经解决了),最近有时间准备分享一下. 项目工程中一直使用SSL双向认证的套接字通信方式,前段时间有Android 10的 ...
最新文章
- Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类
- JVM class加载机制的总结 收藏
- 干货丨一组图详解元数据、主数据与参考数据
- 逆向建模软件介绍_逆向技术在2代机修理中的应用
- 【推荐系统】基于知识图谱的推荐系统总结
- 玩转oracle 11g(48):oracle命令窗口执行sql语句
- MySQL左关联、右关联、内关联查询
- 缓冲区 | 没吃透Netty 缓冲区,还能算得上Java老司机?
- 三大工艺因素影响百万像素镜头成像质量
- SQL:postgresql一条sql语句查询多个count
- 【linux内核分析与应用-陈莉君】字符设备驱动
- IBM新型Tivoli产品搭建绿色销售渠道
- ps滤镜教程大全:ps怎么加好看的滤镜
- 20220630学习打卡
- oracle trim没用,Oracle中Trim函数的使用方法
- VC6.0 MFC 模拟弹簧运动(改进版)
- CLIP: 打通文本图像迁移模型的新高度
- [Android]gradle与Android gradle
- 智能社 Javascript之Node.Js-经典全套教程(价值300元)
- 网上最全的套接字socket