httpie SSL 인증서의 잘못된 핸드셰이크 오류

httpie SSL 인증서의 잘못된 핸드셰이크 오류

내 로컬 컴퓨터에서 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 이름)를 사용하면 언급된 클라이언트에 추가 옵션이 필요하지 않습니다.

관련 정보