httpie ssl 憑證的握手錯誤

httpie ssl 憑證的握手錯誤

我正在本地計算機上運行 Django 後端並嘗試使用HTTPie(https://httpie.org/)。

當我運行時python manage.py runsslserver它給我這個輸出:

Starting development server at https://127.0.0.1:8000/
Using SSL certificate: //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt
Using SSL key: //anaconda/lib/python3.6/site-packages/sslserver/certs/development.key
Quit the server with CONTROL-C.

當我嘗試使用該憑證和金鑰連接到本機主機時文件:

http --cert=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt --cert-key=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.key https://127.0.0.1:8000/

我收到一個嚴重的握手錯誤:

http: error: SSLError: ("bad handshake: Error([('SSL 
routines','ssl3_get_server_certificate', 'certificate verify 
failed')],)",) while doing GET request to URL: https://127.0.0.1:8000/

為什麼連線不上?

答案1

根據您連結的 HTTPie 文檔,您似乎沒有http正確使用該命令。您指定的--cert和選項-cert-key用於用戶端憑證驗證(例如,取代 API 令牌)。我不能確定,但我猜測您沒有使用客戶端憑證身份驗證。

假設你有一個自簽署 SSL 憑證//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt,您有兩個主要選擇:

將自簽章憑證視為 CA

筆記: 您應該確保您擁有正確的證書,否則您將面臨與下面第二個選項相同的問題

http --verify=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/

或者,與wgetcurl

curl --cacert //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/
wget --ca-certificate=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/

跳過 SSL 驗證

筆記:這個方法還是會加密您的數據,但不要嘗試認證遠端端點(即您可能正在加密資料並將其發送給攻擊者)。因此,這是不建議用於生產用途

http --verify=no https://127.0.0.1:8000/

另請注意,還有其他更常用的命令列 http 用戶端:

curl -k https://127.0.0.1:8000/
wget --no-check-certificate https://127.0.0.1:8000/

讓我們加密

最後,您可以考慮取得有效的 SSL 憑證。讓我們加密免費提供它們,如果您想向某人付費,還有許多其他 CA 可供您考慮。有了有效的 SSL 憑證(和有效的 DNS 名稱),上述任何用戶端都不需要其他選項。

相關內容