ошибка рукопожатия с сертификатами httpie ssl

2

Я запускаю свой 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/

Почему это не соединяется?

Мэтт Д
источник
Что именно вы подразумеваете под "httpie"?
Ramhound
@Ramhound httpie.org Я думал, что это был хорошо известный инструмент для отправки http-запросов. Разве большинство людей не будут знать, что это такое?
Мэтт Д
Я предположил, что вы думали, что так написано http........
Ramhound

Ответы:

2

На основании связанной с вами документации по HTTPie выясняется, что вы httpнеправильно используете команду. В --certи -cert-keyопции , которые указаны для проверки подлинности сертификата клиента (вместо маркеров API, например). Я не могу быть уверен, но я предполагаю, что вы не используете аутентификацию сертификата клиента.

Предполагая, что у вас есть самозаверяющий сертификат SSL по адресу //anaconda/lib/python3.6/site-packages/sslserver/certs/development.crt, у вас есть два основных варианта:

Рассматривайте самоподписанный сертификат как центр сертификации

Примечание: вы должны быть уверены, что у вас есть правильный сертификат, или вы рискуете теми же проблемами, что и второй вариант ниже

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. Let's Encrypt предлагает их бесплатно, и есть много других CA, которые вы могли бы рассмотреть, если вы хотите кому-то заплатить. При наличии действительного сертификата SSL (и действительного имени DNS) никакие дополнительные параметры не требуются ни для одного из упомянутых клиентов.

Дэвид Сикс
источник
Как я могу быть уверен, что использую правильный сертификат?
Мэтт Д
@ MatthewDrill для клиента или для сервера?
Дэвид Шесть