首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP cURL 執行報錯「CURL ERROR: Recv failure: Connection reset by peer」解決方案

     編輯:PHP 綜合知識

錯誤現象

CURL ERROR: Recv failure: Connection reset by peer

根本原因

目標站點使用 HTTPS (SSL/TLS) 協議,cURL 預設會驗證 SSL 憑證。若未設定跳過驗證參數,連線會在 SSL 握手階段被伺服器重置。

解決方案

<?php
$ch = curl_init();

// 關鍵:跳過 SSL 憑證驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不驗證憑證來源
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不驗證主機名稱

// 其他常用設定...
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
}
curl_close($ch);

參數說明

選項值說明
CURLOPT_SSL_VERIFYPEERfalse停用對等憑證驗證(不檢查 CA 簽發鏈)
CURLOPT_SSL_VERIFYHOSTfalse (或 0)停用主機名稱驗證(不檢查 CN/SAN)

安全性警示 ⚠️

生產環境強烈不建議永久關閉驗證,這會暴露中間人攻擊風險。正確做法:

  1. 下載目標站點 CA 憑證或公開金鑰
  2. 設定 CURLOPT_CAINFO 指向本地 CA 憑證檔(.pem/.crt)
  3. 保持 CURLOPT_SSL_VERIFYPEER = true、CURLOPT_SSL_VERIFYHOST = 2
// 生產環境安全配置範例
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/certs/ca-bundle.crt'); // 包含常見 CA 的 bundle

常見誤區

  • CURLOPT_SSL_VERIFYHOST = 1 已棄用,僅檢查 CN 存在性,必須用 2(檢查 CN/SAN 匹配)
  • 自簽憑證環境需將自簽 CA 加入信任清單,而非關閉驗證
  • PHP 5.6+ 預設啟用驗證,舊版本可能預設關閉,升級後會出現此錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved