
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 runsslserver
me 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 http
comando correctamente. Las opciones --cert
y -cert-key
que 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 wget
o 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.