PHP cURL Error: Peer reports incompatible or unsupported protocol version.

PHP cURL 遇到的錯誤:cURL Error: Peer reports incompatible or unsupported protocol version.,探討解決方案。

範例程式碼

以下是我使用的範例程式碼,用於向 API Server 傳送資料:

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT);
// 執行 cURL 請求
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch) . "\n";
} else {
echo "Response:\n";
echo $response;
}

此程式碼導致錯誤,因為主機與 API Server 支援的 SSL/TLS 協議不匹配。

系統環境

發生原因

檢查 OpenSSL 版本後發現,OpenSSL 1.0.2k-fips 只支持到 TLS 1.2,但目標 API Server 僅允許 TLS 1.3。這就導致了協議不匹配,從而引發了錯誤。

OpenSSL 1.0.2k-fips 支援的 SSL/TLS 協議:

因為 OpenSSL 1.0.2 不支持 TLS 1.3,而 API Server 僅允許 TLS 1.3,導致 SSL/TLS 協議不兼容。

解決方案

1. 升級主機的 SSL/TLS 支援

若 API Server 僅支援 TLS 1.3,主機必須升級至支援 TLS 1.3 的 OpenSSL 版本(至少為 OpenSSL 1.1.1)。這樣可以確保 PHP 主機與 API Server 之間的 SSL/TLS 協議匹配。

2. 讓 API Server 向下兼容 TLS 1.2

如果 API Server 能夠向下兼容 TLS 1.2,則可以暫時允許 TLS 1.2 通訊,以解決當前的不兼容問題。儘管 TLS 1.3 更加安全,但在過渡期間允許使用 TLS 1.2,可以確保現有系統正常運行。

實作過程

在我的情況下,由於主機當前無法即時升級至支援 TLS 1.3 的 OpenSSL,我選擇了讓 API Server 向下兼容 TLS 1.2 的方案。這樣系統可以恢復運作,並且在未來 OpenSSL 升級至支援 TLS 1.3 時,再切換至僅支持 TLS 1.3 的模式。

在 Plesk 中,可以使用以下命令來啟用 TLS 1.2 和 TLS 1.3:

# plesk bin server_pref -u -ssl-protocols 'TLSv1.2 TLSv1.3'

執行此命令後,請重啟相關服務(如 Apache、Nginx、PHP-FPM)以應用更改。
這樣可以臨時解決協議不兼容的問題。

檢測工具

SSL Labs

當不確定目標主機支援哪些 TLS 協議版本時,可以使用 SSL Labs 工具來檢查目標主機的 TLS 支援情況。該工具可以幫助你確定目標主機的協議支援,從而避免不兼容問題的發生。

參考資料

https://www.plesk.com/kb/support/how-to-enable-disable-tls-protocol-versions-in-plesk-for-linux/
https://talk.plesk.com/threads/best-practice-for-upgrading-openssl-on-centos-7-9-obsidian-v18-0-54.371042/
https://www.isres.com/jingyan2/79.html
https://blog.csdn.net/weixin_46858088/article/details/135718447

[……]

閱讀更多

WordPress wp_remote_post curl: (35) Peer reports incompatible or unsupported protocol version

分享如何處理使用 WordPress 的 wp_remote_post() 函數時遇到的錯誤:curl: (35) Peer reports incompatible or unsupported protocol version,探討解決方案。

範例程式碼

以下是我使用的範例程式碼,用於向 API Server 傳送資料:

$crm_api_url = 'https://crm.example.com/api/hello';
$response = wp_remote_post( $crm_api_url, [
'body' => $post_body,
]);
wp_die( print_r( $response, true ) );

此程式碼導致錯誤,因為主機與 API Server 支援的 SSL/TLS 協議不匹配。

系統環境

發生原因

檢查 OpenSSL 版本後發現,OpenSSL 1.0.2k-fips 只支持到 TLS 1.2,但目標 API Server 僅允許 TLS 1.3。這就導致了協議不匹配,從而引發了錯誤。

OpenSSL 1.0.2k-fips 支援的 SSL/TLS 協議:

因為 OpenSSL 1.0.2 不支持 TLS 1.3,而 API Server 僅允許 TLS 1.3,導致 SSL/TLS 協議不兼容。

解決方案

1. 升級主機的 SSL/TLS 支援

若 API Server 僅支援 TLS 1.3,主機必須升級至支援 TLS 1.3 的 OpenSSL 版本(至少為 OpenSSL 1.1.1)。這樣可以確保 WordPress 主機與 API Server 之間的 SSL/TLS 協議匹配。

2. 讓 API Server 向下兼容 TLS 1.2

如果 API Server 能夠向下兼容 TLS 1.2,則可以暫時允許 TLS 1.2 通訊,以解決當前的不兼容問題。儘管 TLS 1.3 更加安全,但在過渡期間允許使用 TLS 1.2,可以確保現有系統正常運行。

實作過程

在我的情況下,由於主機當前無法即時升級至支援 TLS 1.3 的 OpenSSL,我選擇了讓 API Server 向下兼容 TLS 1.2 的方案。這樣系統可以恢復運作,並且在未來 OpenSSL 升級至支援 TLS 1.3 時,再切換至僅支持 TLS 1.3 的模式。

在 Plesk 中,可以使用以下命令來啟用 TLS 1.2 和 TLS 1.3:

# plesk bin server_pref -u -ssl-protocols 'TLSv1.2 TLSv1.3'

執行此命令後,請重啟相關服務(如 Apache、Nginx、PHP-FPM)以應用更改。
這樣可以臨時解決協議不兼容的問題。

檢測工具

SSL Labs

當不確定目標主機支援哪些 TLS 協議版本時,可以使用 SSL Labs 工具來檢查目標主機的 TLS 支援情況。該工具可以幫助你確定目標主機的協議支援,從而避免不兼容問題的發生。

參考資料

https://www.plesk.com/kb/support/how-to-enable-disable-tls-protocol-versions-in-plesk-for-linux/
https://talk.plesk.com/threads/best-practice-for-upgrading-openssl-on-centos-7-9-obsidian-v18-0-54.371042/
https://www.isres.com/jingyan2/79.html
https://blog.csdn.net/weixin_46858088/article/details/135718447

[……]

閱讀更多

更新了Whois資料?如何秒查Whois修改!

更新了Whois資料?如何秒查最新動態!

更新了你的域名資訊,迫不及待想看看變化了沒?我們都經歷過那種刷新鍵按到手軟,卻還是看到老舊資料的無奈。今天,我要和大家聊聊,怎麼樣能夠在更新Whois資料後,快速獲得最新的更新!

Whois365

網址:https://www.whois365.com/

這是先前我最常查詢 Whois 的線上工具,但這次我更新我註冊資料後,發現一直都沒有變化,過了一個小時還是沒變化,我懷疑 whois365 有快取機制,無法快速查到我已修改的正確內容。

ICANN Lookup

網址:https://lookup.icann.org/en

接下來,我想向大家介紹另一個可以快速查詢到Whois資料更新的線上工具——ICANN Lookup。

ICANN Lookup提供了一種更直接和即時的方式來查詢Whois資料。與其他Whois查詢工具不同,ICANN Lookup直接與全球域名註冊數據庫接口,能夠提供最即時、最準確的域名註冊信息。

為什麼ICANN Lookup比較快?

透過ICANN Lookup,你不僅可以獲得最新的Whois資料,還可以確保這些資訊是準確無誤的。無論你是域名擁有者還是僅僅是對某個域名感興趣的人,這都是一個值得信賴的查詢工具。

對於那些更新了Whois資料後希望快速確認更新是否生效的用戶來說,ICANN Lookup無疑是最佳選擇。快去試試吧!

[……]

閱讀更多

三竹簡訊串接 – API 網址

三竹簡訊官方API文件,API Call 的網址如下:,

https://{三竹網域名稱}/b2c/mtk/SmSend

還以為真的是直接用他官網的網域,太天真了,弄半天結果不是,最後透過客服得知三竹簡訊目前帳號分為,個人帳號 (二站)、企業帳號 (三站),Call 的網址不同,call 的網址分別為下面兩個網址:

API 網址

企業帳號 (三站)
https://smsapi.mitake.com.tw/api/mtk/SmSend?

個人帳號 (二站)
http://smsb2c.mitake.com.tw/b2c/mtk/SmSend?

簡單測試API

[……]

閱讀更多

Google 掛了嗎?即時查詢Google服務狀態

雖然 Google 是大神,但難免也會掛、Google 服務包羅萬象,不管是生活或商務多多少少都會使用到 Google 提供的服務,常見的大概就是 Gmail、Google雲端硬碟、Google Map、Google 相簿或是YouTube, 如果當機起來還真的會造成許多不便,甚至哀號遍野

Google 掛掉拉

在寫這篇的同時,就是Google掛掉了,不管是Gmail、Youbube、Chrome、雲端硬碟通通都掛掉了,等待修復的時間有點閒來寫這篇吧。

如何判斷是 Google 掛了,還是自己的網路環境有問題呢?

除了跟地震一樣,上 Facebook 上看有沒有慘叫聲以外,Google 官方有提供一個所有產品目前服務狀態查詢的網頁,清楚標記各種產品目前是正常運行還是掛掉了,用燈號來表示目前的服務狀態、故障持續的時間,如此一來,如果您是基於 Google 提供延伸的服務,這樣才有辦法貼給客戶看,客戶才不會煩你煩到你掛掉

今天還蠻慘的耶,幾乎所有服務都掛掉了,也讓我有閒功夫在這邊打這篇文章,Google 實在是大到不能停,它當機真的算是天災了

Google 服務狀態面板

[……]

閱讀更多

HTML5的lang速查 ( 注意:繁體中文不是zh-TW喔 )

在 HTML5 的 <html> 中可增加 lang= 來標註網頁的語系,讓瀏覽器能更正確的解析與編碼,但從 XHTML 1.0 以來 lang=??? 就不斷演進中,而在 HTML5 的時代究竟要怎麼定義?

目前最主要的規範是依照 IETF(Internet Engineering Task Force 國際網路工程研究團隊)的 RFC 4646 的 Tags for Identifying Languages 所定義。它的要求為 language-script-region-variant-extension-privateuse 就是 語言 – 字體 – 地區 – 方言 – 特殊附加資訊。

以台灣繁體中文標示即為 zh-Hant-TW 不是以往認知的zh-tw囉

使用範例:

速查表 zh-Hans

繁體中文:

zh-Hant繁體中文zh-Hant-TW臺灣使用的繁體中文zh-Hant-CN大陸地區使用的繁體中文zh-Hant-HK香港地區使用的繁體中文zh-Hant-MO澳門使用的繁體中文zh-Hant-SG新加坡使用的繁體中文

簡體中文 zh-Hans:

zh-Hans簡體中文zh-Hans-CN大陸地區使用的簡體中文zh-Hans-HK香港地區使用的簡體中文zh-Hans-MO澳門使用的簡體中文zh-Hans-SG新加坡使用的簡體中文zh-Hans-TW臺灣使用的簡體中文

參考:

[……]

閱讀更多