微信支付的時候通過cURL加密傳輸

在開發微信支付的過程中,遇到了關於cURL加密傳輸的問題,做下記錄方便今後查閱。

提交數據到https時,需要pem證書來加密。
我們使用瀏覽器訪問https的時候,瀏覽器會自動加載網站的安全證書進行加密。但是你用curl請求https時,沒有通過瀏覽器,就只有自己手動增加一個安全證書進行加密。


代碼示例:

private function httpGet($url) {
    $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;
}

知識點摘要:
CURLOPT_SSL_VERIFYPEER 設置爲FALSE 禁止 cURL 驗證對等證書(peer’s certificate)。要驗證的交換證書可以在 CURLOPT_CAINFO 選項中設置,或在 CURLOPT_CAPATH中設置證書目錄。

CURLOPT_CAINFO 一個保存着1個或多個用來讓服務端驗證的證書的文件名。這個參數僅僅在和CURLOPT_SSL_VERIFYPEER一起使用時纔有意義。可能需要絕對路徑。

CURLOPT_CAPATH 一個保存着多個CA證書的目錄。這個選項是和CURLOPT_SSL_VERIFYPEER一起使用的。

CURLOPT_SSL_VERIFYHOST 設置爲 1 是檢查服務器SSL證書中是否存在一個公用名(common name)。譯者注:公用名(Common Name)一般來講就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)。 設置成 2,會檢查公用名是否存在,並且是否與提供的主機名匹配。 在生產環境中,這個值應該是 2(默認值)。

相關閱讀:
數字證書及CA的掃盲介紹:http://kb.cnblogs.com/page/194742/
ca證書:http://baike.baidu.com/view/565507.htm
CA數字證書:http://baike.baidu.com/view/3902964.htm
PHP手冊curl_setopt:http://php.net/manual/zh/function.curl-setopt.php

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章