error de protocolo de enlace incorrecto con certificados httpie ssl

error de protocolo de enlace incorrecto con certificados httpie ssl

Estoy ejecutando mi backend de Django en mi máquina local e intentando conectarme con HTTPie(https://httpie.org/).

Cuando lo ejecuto python manage.py runsslserverme da este resultado:

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.

Cuando intento conectarme a localhost usando ese certificado y clave segúnla documentación:

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/

Recibo un error de apretón de manos incorrecto:

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 qué no se conecta?

Respuesta1

Según la documentación de HTTPie que vinculó, parece que no está utilizando el httpcomando correctamente. Las opciones --certy -cert-keyque especificó son para la autenticación de certificado de cliente (en lugar de un token de API, por ejemplo). No puedo estar seguro, pero supongo que no estás utilizando la autenticación de certificado de cliente.

Suponiendo que tienes unCertificado SSL autofirmadoEn //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt, tienes dos opciones principales:

Trate el certificado autofirmado como una CA

Nota: Debe asegurarse de tener el certificado correcto o correrá el riesgo de sufrir los mismos problemas que la segunda opción a continuación.

http --verify=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/

o, con wgeto 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/

Saltar validación SSL

Nota:Este método todavíacifrarsus datos, pero no intenteautenticarel punto final remoto (es decir, podría estar cifrando datos y enviándolos a un atacante). Por lo tanto, esto esNO RECOMENDADO para uso en producción.

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

Además, tenga en cuenta que existen otros clientes http de línea de comandos más utilizados:

curl -k https://127.0.0.1:8000/
wget --no-check-certificate https://127.0.0.1:8000/

Vamos a cifrar

Por último, podría considerar obtener un certificado SSL válido.Vamos a cifrarlos ofrece de forma gratuita y hay muchas otras CA que podría considerar si desea pagarle algo a alguien. Con un certificado SSL válido (y un nombre DNS válido), no deberían necesitarse opciones adicionales en ninguno de los clientes mencionados.

información relacionada