官方文档:

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双向认证相关推荐

  1. java代码实现证书生成客户端证书 实现ssl双向认证

    目的:实现web项目的ssl双向认证客户端证书代码生成. 使用openssl生成ca证书和服务端证书,当然也可以通过代码实现 1)创建CA私钥,创建目录ca openssl genrsa -out c ...

  2. 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

    我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...

  3. SSL双向认证和SSL单向认证的区别

    双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证 SSL 协议不需要客户拥有CA证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥 ...

  4. HTTPS|SSL笔记-SSL双向认证成功握手过程(含wireshark分析)

    这里只研究连接过程. 整体的流程是这样的 前三个那个SYN.SYN ACK.ACK是TCP三次握手,就不说了. 1. 握手成功后,客户端发送自己支持的加密套,和随机数给服务端,也就是Client He ...

  5. java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android

    客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...

  6. SSL双向认证和单向认证原理

    一.公钥私钥 1,公钥和私钥成对出现 2,公开的密钥叫公钥,只有自己知道的叫私钥 3,用公钥加密的数据只有对应的私钥可以解密 4,用私钥加密的数据只有对应的公钥可以解密 5,如果可以用公钥解密,则必然 ...

  7. SSL双向认证和SSL单向认证的流程和区别

    refs: SSL双向认证和SSL单向认证的区别 https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证! https://cloud.te ...

  8. 什么是SSL双向认证,与单向认证证书有什么区别?

    SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是 ...

  9. Android 10 SSL双向认证握手失败

    Android 10 SSL双向认证握手失败 公司项目前端时间遇到的一个问题(已经解决了),最近有时间准备分享一下. 项目工程中一直使用SSL双向认证的套接字通信方式,前段时间有Android 10的 ...

最新文章

  1. Kmeans++、Mini-Batch Kmeans、Bisecting Kmeans、K中心点(K-Medoids)算法、K众数聚类、核K均值聚类
  2. JVM class加载机制的总结 收藏
  3. 干货丨一组图详解元数据、主数据与参考数据
  4. 逆向建模软件介绍_逆向技术在2代机修理中的应用
  5. 【推荐系统】基于知识图谱的推荐系统总结
  6. 玩转oracle 11g(48):oracle命令窗口执行sql语句
  7. MySQL左关联、右关联、内关联查询
  8. 缓冲区 | 没吃透Netty 缓冲区,还能算得上Java老司机?
  9. 三大工艺因素影响百万像素镜头成像质量
  10. SQL:postgresql一条sql语句查询多个count
  11. 【linux内核分析与应用-陈莉君】字符设备驱动
  12. IBM新型Tivoli产品搭建绿色销售渠道
  13. ps滤镜教程大全:ps怎么加好看的滤镜
  14. 20220630学习打卡
  15. oracle trim没用,Oracle中Trim函数的使用方法
  16. VC6.0 MFC 模拟弹簧运动(改进版)
  17. CLIP: 打通文本图像迁移模型的新高度
  18. [Android]gradle与Android gradle
  19. 智能社 Javascript之Node.Js-经典全套教程(价值300元)
  20. 网上最全的套接字socket

热门文章

  1. .jsp与servlet之间页面跳转及参数传递实例
  2. golang中的strings.Trim
  3. 贪心算法--会场安排问题
  4. 利用curl命令测试服务端
  5. remap(地址重映射)机制
  6. springboot特点
  7. @RequestMapping中method的默认值是什么?
  8. 微软Skype突破!视讯人数上限来到50人
  9. 4.3. postForObject
  10. 记录mysql客户端所有的操作