
내 로컬 컴퓨터에서 Django 백엔드를 실행하고 다음을 사용하여 연결하려고 합니다 HTTPie
.https://httpie.org/).
실행하면 python manage.py runsslserver
다음과 같은 결과가 출력됩니다.
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.
해당 인증서와 키를 사용하여 localhost에 연결하려고 하면문서:
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/
잘못된 핸드셰이크 오류가 발생합니다.
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/
왜 연결되지 않나요?
답변1
연결한 HTTPie 문서에 따르면 http
명령을 올바르게 사용하지 않는 것으로 보입니다. 지정한 --cert
및 -cert-key
옵션은 클라이언트 인증서 인증용입니다(예: API 토큰 대신). 확신할 수는 없지만 클라이언트 인증서 인증을 사용하고 있지 않은 것으로 추측됩니다.
당신이 가지고 있다고 가정자체 서명된 SSL 인증서에는 //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt
두 가지 주요 옵션이 있습니다.
자체 서명된 인증서를 CA로 취급
메모: 올바른 인증서가 있는지 확인해야 합니다. 그렇지 않으면 아래 두 번째 옵션과 동일한 문제가 발생할 위험이 있습니다.
http --verify=//anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt https://127.0.0.1:8000/
또는 wget
또는 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/
SSL 검증 건너뛰기
메모:이 방법은 여전히암호화하다데이터를 제공하지만 시도하지 마십시오.인증하다원격 엔드포인트(즉, 데이터를 암호화하여 공격자에게 보낼 수 있음) 그러므로 이것은프로덕션 용도로 권장되지 않음.
http --verify=no https://127.0.0.1:8000/
또한 더 일반적으로 사용되는 다른 명령줄 http 클라이언트도 있습니다.
curl -k https://127.0.0.1:8000/
wget --no-check-certificate https://127.0.0.1:8000/
암호화하자
마지막으로 유효한 SSL 인증서를 얻는 것을 고려할 수 있습니다.암호화하자무료로 제공하며, 누군가에게 비용을 지불하려는 경우 고려할 수 있는 다른 CA가 많이 있습니다. 유효한 SSL 인증서(및 유효한 DNS 이름)를 사용하면 언급된 클라이언트에 추가 옵션이 필요하지 않습니다.