由於以前沒有接觸到https雙向認證,因此有點陌生。
由於ssl證書和私鑰都是對接方提供的,個人理解以下:
ssl證書攜帶了客戶端的公鑰,
對方服務器使用客戶端的私鑰驗證,再用服務端的公鑰加密返回
客戶端再用設置的私鑰解密造成通道,雙方在通道中發收數據。
以前看別人文章時,完整流程還涉及了對稱加密,這裏先記下此次遇到的問題吧,若是有錯誤,歡迎指正。
php的curl代碼以下:~~~~php
$sslcert = 'ssl證書.pem';服務器
$sslkey = 'ssl證書私鑰指定文件'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, '地址'); curl_setopt($ch, CURLOPT_PORT, 443); curl_setopt($ch, CURLOPT_HEADER, ['Content-Type: application/xml']); // 客戶端ssl證書 curl_setopt($ch, CURLOPT_SSLCERT, $sslcert); curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '密碼'); curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); // 私鑰 curl_setopt($ch, CURLOPT_SSLKEY, $sslkey); curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '密碼'); curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, '發送的數據'); //驗證對方的證書 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //以字符串形式輸出 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);