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双向认证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #define用法集锦[修正版]
- 下一篇: Cocos2d学习之路三(使用Zwopt