
藍主機VPS運行 CentOS,卻cat /etc/redhat-release
透露出CloudLinux release 6.10 (Final)
。
在我的本機 PC (Win11/IIS/PHP) 上針對 Twilio API 執行curl 指令效果很好。當我在 Bluehost 伺服器上嘗試相同的操作(啟用詳細輸出)時,它會失敗並顯示以下訊息:
證書使用者名稱「*.us-east-1.es.amazonaws.com」與目標主機名稱「api.twilio.com」不符
* About to connect() to api.twilio.com port 443 (#0)
* Trying 50.19.189.95... connected
* Connected to api.twilio.com (50.19.189.95) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com'
* NSS error -12276
* Closing connection #0
curl: (51) SSL: certificate subject name '*.us-east-1.es.amazonaws.com' does not match target host name 'api.twilio.com'
Twilio 支援人員指示我透過 Chrome 下載他們的 SSL 證書,我照做了。我將證書命名為“cacert.pem”,認為這就是它需要的名稱,但我不知道。以下是他們讓我在 bash 終端機中執行的步驟:
上傳 cacert.pem 檔案:首先,將 cacert.pem 檔案上傳到您的 CentOS VPS。為此,您可以使用 SCP 或 SFTP 等安全檔案傳輸方法。
確定憑證儲存位置:憑證儲存的位置可能會有所不同,具體取決於您要使用它的應用程式。對於系統範圍的信任,您通常可以將憑證放置在 /etc/pki/tls/certs/ 中。
複製憑證檔案:將 cacert.pem 檔案複製到憑證儲存區:
sudo cp cacert.pem /etc/pki/tls/certs/
更新 CA 憑證捆綁包:若要更新 CA 憑證捆綁包,請執行下列命令:
sudo update-ca-trust enable
刷新 CA 信任:使用 update-ca-trust extract 指令更新 CA 信任:
sudo update-ca-trust extract
驗證憑證安裝:您可以透過檢查 CA 套件來驗證憑證是否已成功安裝:
cat /etc/pki/tls/certs/ca-bundle.crt
內容cacert.pem
應包含在該套件中。重新啟動阿帕契。
這些都沒有產生任何影響,並且仍然提供錯誤的證書。
我問他們“作業系統如何知道要使用哪個憑證?”但他們沒有回應。似乎從未指定過。
我針對 Twilio API 運行了一個curl 命令(請注意,我使用-k
insecure 只是為了看看會發生什麼),並收到以下錯誤:
授權標頭需要「Credential」參數。授權標頭需要“Signature”參數。授權標頭需要「SignedHeaders」參數。授權標頭要求存在“X-Amz-Date”或“Date”標頭。授權=基本QUNmN***
dig
我在 Bluehost 伺服器上執行了以下 2 項診斷:
dig api.twilio.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com ;;全域選項:+cmd ;;得到答案:;; ->>HEADER<<- 操作碼:QUERY,狀態:NOERROR,id:58818 ;;標誌:qr rd ra;查詢:1,答案:9,權限:0,附加:0
;;問題部分:;api.twilio.com。在一個
;;答案部分:api.twilio.com。 20 在 CNAME
virginia.us1.api-lb.twilio.com 中。 virginia.us1.api-lb.twilio.com。 20 IN CNAME self-healing.api-alb.us1.api-lb.twilio.com。 self-healing.api-alb.us1.api-lb.twilio.com。 20 在 CNAME ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com 中。 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com。 20 位於 34.204.146.75 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com。 20 在 52.20.98.48 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com 中。 20 在 35.153.214.247 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com。 20 在 54.208.14.118 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com 中。 20 在 54.242.5.138 ien-alb-bapi-b-156106065.us-east-1.elb.amazonaws.com 中。 20 於 34.232.251.189;;查詢時間:10毫秒;;伺服器:1.1.1.1#53(1.1.1.1);;時間:2023 年 11 月 3 日星期五 08:51:38 ;;味精大小 rcvd:260
dig api.twilio.com @8.8.8.8
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <<>> api.twilio.com @8.8.8.8 ;;全域選項:+cmd ;;得到答案:;; ->>HEADER<<- 操作碼:QUERY,狀態:NOERROR,id:58143 ;;標誌:qr rd ra;查詢:1,答案:9,權限:0,附加:0
;;問題部分:;api.twilio.com。在一個
;;答案部分:api.twilio.com。 21 在 CNAME
virginia.us1.api-lb.twilio.com 中。 virginia.us1.api-lb.twilio.com。 21 在 CNAME self-healing.api-alb.us1.api-lb.twilio.com 中。 self-healing.api-alb.us1.api-lb.twilio.com。 21 在 CNAME ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com 中。 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com。 21 在 3.222.47.158 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com 中。 21 在 34.236.63.82 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com 中。 21 在 52.0.177.50 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com 中。 21 在 34.232.27.126 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com 中。 21 在 3.225.164.19 ien-alb-bapi-a-1963256146.us-east-1.elb.amazonaws.com 中。 21 於 52.206.184.52;;查詢時間:23 毫秒;;伺服器:8.8.8.8#53(8.8.8.8);;時間:2023 年 11 月 3 日星期五 08:52:11 ;;味精大小 rcvd:261
根據 Turdie 的建議,我在 NOV-4 上嘗試了以下操作:
curl -v --tlsv1.2 -X POST "https://api.twilio.com/2010-04-01/Accounts/ACf7b58ec793***4d/Messages.json" \
> --data-urlencode "Body=This is the ship that made the Kessel Run in fourteen parsecs?" \
> --data-urlencode "From=+14*****40" \
> --data-urlencode "To=+18*****44" \
> -u ACf7b*****30a4d:0ce7445d*****48bc4d
結果:
- 即將 connect() 到 api.twilio.com 連接埠 443 (#0)
- 試試 50.19.189.95...超時
- 試試 35.168.202.10...超時
- 嘗試 54.173.225.186...超時
- 嘗試 107.22.7.7...超時
- 正在嘗試 52.204.229.116...已連接
- 連接到 api.twilio.com (52.204.229.116) 連接埠 443 (#0)
- 使用 certpath 初始化 NSS:sql:/etc/pki/nssdb
- CA檔:/etc/pki/tls/certs/ca-bundle.crt CA路徑:無
- SSL:憑證使用者名稱「*.glympse.com」與目標主機名稱「api.twilio.com」不匹配
- NSS錯誤-12276
- 關閉連線#0curl:(51)SSL:憑證主題名稱「*.glympse.com」與目標主機名稱「api.twilio.com」不匹配
根據 Turdie 的建議,我還在 NOV-4 上嘗試了以下操作:
openssl s_client -connect api.twilio.com
結果:
沒有定義連接埠
(之後它會吐出大量可用的參數,例如文件。不確定您是否想要那個。)
我是一名開發人員,但是是 Linux 和憑證的新手,所以我希望有人可以幫助我。提前致謝。
答案1
根據我的研究,這是捲曲的問題。
你需要使用
curl -v --tlsv1.2
這看起來與 TS 遇到的問題類似
https://blog.michaelfmcnamara.com/2015/12/curl-and-ssl-tls-issues/
看起來在你的curl中,你正在使用glympse.com NSS發送證書,證書路徑為:sql:/etc/pki/nssdb。這會導致不匹配,因為 twilio.com 和 glympse 是不同的名稱。我認為您需要向 twilio.com 檢查您需要使用哪個憑證來連接到 api。看起來您正在使用 nssdb 和 sql 資料庫,我對此一無所知。
捲曲中的最後一行清楚地表明了證書不匹配
Closing connection #0 curl: (51) SSL: certificate subject name '*.glympse.com' does not match target host name 'api.twilio.com'
編輯
你的 api 密鑰在哪裡?檢查文檔
curl -v --tlsv1.2 -X POST "https://api.twilio.com/2010-04-01/Accounts/ACf7b58ec793***4d/Messages.json" \
> --data-urlencode "Body=This is the ship that made the Kessel Run in fourteen parsecs?" \
> --data-urlencode "From=+14*****40" \
> --data-urlencode "To=+18*****44" \
> -u ACf7b*****30a4d:0ce7445d****