erro de handshake incorreto com certificados SSL httpie

erro de handshake incorreto com certificados SSL httpie

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 runsslserverele 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 httpcomando corretamente. As opções --certe -cert-keyque 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 wgetou 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.

informação relacionada