
我正在本地計算機上運行 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/
或者,與wget
或curl
:
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 名稱),上述任何用戶端都不需要其他選項。