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/

或者,使用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 名称),上述任何客户端都不需要额外的选项。

相关内容