2024年9月16日 星期一

curl 卡在 TLS Handshake 時的 Workaround: 變更 CURL_SSL_BACKEND

我在一些未知的情況下出現了 curl 向 HTTPS 的網址請求會發生 Handshake 卡在第一次 Hello 完的狀態,在無法確認如何解決的情況下,可以採用替換 SSL Backend 的方法繞過。


問題場景


curl -v --insecure -L https://xxxxxxxxxxxxxxx 


並在 Verbose 訊息打印出後卡在: 

*   Trying xx.xx.xx.xx:443...
* Connected to xxxxxxxxxxxxxxxx (xx.xx.xx.xx) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
* [CONN-0-0][CF-SSL] (304) (OUT), TLS handshake, Client hello (1):
* [CONN-0-0][CF-SSL] (304) (IN), TLS handshake, Server hello (2):
* [CONN-0-0][CF-SSL] TLSv1.2 (IN), TLS handshake, Certificate (11):


Workaround


參考 libcurl docs [3] 上的參數: 

SSL backend names (case-insensitive): BearSSL, GnuTLS, mbedTLS, nss, OpenSSL, Rustls, Schannel, Secure-Transport, wolfSSL.

此時將 SSL Backend 轉為 secure-transport 或其他種類型應該有效。

export CURL_SSL_BACKEND="secure-transport" 
curl -v --insecure -L https://xxxxxxxxxxxxxx



Reference:

[1] https://unix.stackexchange.com/questions/252977/curl-hangs-after-client-hello
[2] https://stackoverflow.com/questions/69734654/fixing-git-https-error-bad-key-length-on-macos-12
[3] https://curl.se/libcurl/c/libcurl-env.html

沒有留言:

張貼留言

© Mac Taylor, 歡迎自由轉貼。
Background Email Pattern by Toby Elliott
Since 2014