我在一些未知的情況下出現了 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
沒有留言:
張貼留言