ошибка плохого рукопожатия с сертификатами 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) никакие дополнительные опции не должны потребоваться ни для одного из упомянутых клиентов.

Связанный контент