erro de handshake inválido com certificados SSL httpie

1

Estou executando meu back-end do Django em minha máquina local e tentando me conectar a ele com HTTPie ( link ).

Quando eu executo python manage.py runsslserver , isso me dá essa 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 conectar-me ao localhost usando esse certificado e a chave de acordo com a 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 mau aperto de mão:

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á se conectando?

    
por Matt D 20.06.2017 / 22:33

1 resposta

2

Com base na documentação do HTTPie que você vinculou, parece que você não está usando o comando http 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 posso ter certeza, mas acredito que você não esteja usando a autenticação de certificado de cliente.

Supondo que você tenha um certificado SSL auto-assinado em //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt , você tem duas opções principais:

Trate o certificado auto-assinado como uma CA

Note: You should be sure you have the right certificate, or you risk the same issues as the second option below

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 a validação SSL

Note: This method will still encrypt your data, but make no attempt to authenticate the remote endpoint (i.e. you could be encrypting data and sending it to an attacker). Therefore, this is NOT RECOMMENDED for production use.

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

Além disso, observe que há 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

Por fim, você pode considerar obter um certificado SSL válido. Vamos criptografar oferece gratuitamente, e há muitas outras ACs 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 deve ser necessária em nenhum dos clientes mencionados.

    
por 20.06.2017 / 23:21