訪問方式由http改為https curl:(51)


系統訪問由http變為https,先申請了CA證書,然后win下瀏覽器訪問時沒問題的,但是linux下通過curl的方式訪問就報錯:

curl:(51) SSLcertificate subject name '*.xxxxxx.com does not match target host name '10.10.xxx.xxx'。

意思是SSL證書使用者名稱與目標主機名不匹配。

百度良久,基本修改方式有兩種,

方法一:設定為不驗證證書和host ,是一段php的代碼,如下寫法:

$url = 'https://www.jb51.net';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_HEADER, 1);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);// https請求 不驗證hosts

$data = curl_exec($curl); curl_close($curl); var_dump($data);  

方法二:設定一個正確的證書,如下寫法:

$curl = curl_init();

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_TIMEOUT, 500); // 為保證第三方服務器與微信服務器之間數據傳輸的安全性,所有微信接口采用https方式調用,必須使用下面2行代碼打開ssl安全校驗。 // 如果在部署過程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);

curl_setopt($curl,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');//這是根據http://curl.haxx.se/ca/cacert.pem 下載的證書,添加這句話之后就運行正常了

curl_setopt($curl, CURLOPT_URL, $url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

但是我們的這個是自己openssl自建CA簽發的證書,因此還有另一種方式,將證書放在linux下,訪問的時候加上此證書,驗證就能通過了。

我們最初生生成的證書格式為pfx,若服務端要求客戶端認證,需要將pfx證書轉換成pem格式。

openssl pkcs12 -clcerts -nokeys -in cert.pfx -out client.pem    #客戶端個人證書的公鑰  

openssl pkcs12 -nocerts -nodes -in cert.pfx -out key.pem #客戶端個人證書的私鑰

也可以轉換為公鑰與私鑰合二為一的文件

openssl pkcs12 -in  cert.pfx -out all.pem -nodes                                   #客戶端公鑰與私鑰,一起存在all.pem中

轉換完成之后,將pem格式的證書放在/etc/pki/tls/certs下。

訪問時的方式為: curl -k --cert www.pem https://xxxxxxxxxxx

使用-k是不對服務器的證書進行檢查,這樣就不必關心服務器證書的導出問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM