
Estou executando meu back-end Django em minha máquina local e tentando conectar-me a ele com HTTPie
(https://httpie.org/).
Quando executo python manage.py runsslserver
ele me dá esta saída:
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.
Quando tento me conectar ao localhost usando esse certificado e chave conformea documentação:
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/
Recebo um erro de aperto de mão incorreto:
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/
Por que não está conectando?
Responder1
Com base na documentação HTTPie vinculada, parece que você não está usando o http
comando corretamente. As opções --cert
e -cert-key
que você especificou são para autenticação de certificado de cliente (no lugar de um token de API, por exemplo). Não tenho certeza, mas suponho que você não esteja usando autenticação de certificado de cliente.
Supondo que você tenha umCertificado SSL autoassinadoem //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt
, você tem duas opções principais:
Trate o certificado autoassinado como uma CA
Observação: Você deve ter certeza de que possui o certificado correto ou corre o risco de ter os mesmos problemas da segunda opção abaixo
http --verify=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/
ou, com wget
ou 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/
Ignorar validação SSL
Observação:Este método aindacriptografarseus dados, mas não faça nenhuma tentativa deautenticaro endpoint remoto (ou seja, você pode estar criptografando dados e enviando-os para um invasor). Portanto, isso éNÃO RECOMENDADO para uso em produção.
http --verify=no https://127.0.0.1:8000/
Além disso, observe que existem outros clientes http de linha de comando mais comumente usados:
curl -k https://127.0.0.1:8000/
wget --no-check-certificate https://127.0.0.1:8000/
Vamos criptografar
Finalmente, você pode considerar obter um certificado SSL válido.Vamos criptografaroferece-os gratuitamente, e há muitas outras CAs que você pode considerar se quiser pagar algo a alguém. Com um certificado SSL válido (e um nome DNS válido), nenhuma opção adicional deverá ser necessária em nenhum dos clientes mencionados.