Команда Openssl s_client всегда говорит 400 Bad Request

Я пытаюсь проверить сервер, который работает нормально в веб-браузере, с параметром openssl s_client, напрямую связав его с помощью openssl, возвращает 400 Bad Request:

openssl s_client -servername example.com -connect example.com:443 -tls1 (some information about the certificate) GET / HTTP/1.1 (and the error occurs **immediately** - no time to include more headers like Host:) 

Важно: я уже попытался поместить заголовок Host: дело в том, что когда я запускаю GET, ошибка возникает сразу, и у меня нет возможности включить больше заголовков. Замените example.com моим хостом …

3 Solutions collect form web for “Команда Openssl s_client всегда говорит 400 Bad Request”

Из того, что я вижу, 400 Bad Request, вероятно, будет связан с использованием HTTP / 1.1 в вашей линии GET.

Вы добавили заголовок «Хост:» после запроса GET? RFC заявляет, что для HTTP / 1.1 требуется заголовок узла:

https://www.ietf.org/rfc/rfc2616.txt

19.6.1.1 Изменения в упрощении многоуровневых веб-серверов и сохранении IP-адресов

Требования, которые клиенты и серверы поддерживают заголовок запроса хоста, сообщают об ошибке, если отсутствует заголовок запроса хоста (раздел 14.23) из запроса HTTP / 1.1 и принимают абсолютные URI (раздел 5.1.2), являются одними из самых важных изменения, определенные этой спецификацией.

У OK тоже было то же самое, и мне потребовалось время, чтобы разобраться.

Я не могу найти способ отправки нескольких строк в запросе при интерактивном использовании s_client. Он всегда отправляет запрос немедленно, как только вы ввели первую строку. Если кто-то знает, как обойти это, пожалуйста, дайте мне знать!

Тем временем, как было предложено, вы должны использовать echo для этого:

 echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | openssl s_client ... 

Следующая проблема заключается в том, что по умолчанию openssl закрывает соединение, когда входной файл закрывается. Это происходит сразу же при использовании echo подобного этому. Таким образом, вы не получите время, чтобы увидеть ответ, а вместо этого просто увидите вывод DONE! 🙁

Вы можете добавить sleep к команде echo, чтобы обойти это (обратите внимание, что скобки важны):

 (echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"; sleep 10) | openssl s_client ... 

Или, лучше, вы можете использовать опцию -ign_eof чтобы оставить соединение открытым:

 echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | openssl s_client -ign_eof ... 

Или еще лучше, если вас интересуют только ответы HTTP, используйте параметр -quite который скрывает большую часть шума TLS, а также устанавливает для вас параметр -ign_eof:

 echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | openssl s_client -quiet ... 

Согласно https://bz.apache.org/bugzilla/show_bug.cgi?id=60695 моя команда была:

 openssl s_client -crlf -connect www.pgxperts.com:443 

где -crlf означает, в соответствии с помощью команды openssl,

-crlf – конвертировать LF из терминала в CRLF

Тогда я мог бы вводить многострочные команды и без «плохого запроса» в качестве ответа после первой командной строки.

  • НЕ закрывайте telnet при подаче имени пользователя и пароля с помощью эха
  • ssh-туннелирование: соединение закрыто иностранным хостом
  • Невозможно запустить службу telnet на машине CentOS
  • Настроить DD-WRT-сеть и iptables через Android APP, возможно ли это?
  • Поддержка сервера терминалов Telnet не работает
  • Как создать скрипт для отправки электронной почты по telnet?
  • Создание туннеля openvpn в сценарии bash
  • Копирование файлов между пользователями Использование Telnet
  • Тестирование подключения удаленного хоста с помощью telnet
  • Как перенаправить stdout и stdin в telnet?
  • Использование telnet для получения заголовка веб-сайта
  • Interesting Posts

    Записать журнал для ложной инструкции условия if, которая возвращает exit 2

    Должны ли использоваться «invoke-rc.d» или «service» для перезапуска служб?

    Как я могу смешивать переменные и подстановочные знаки в рыбе?

    Выполняется ли моя запланированная задача с помощью команды «at», если я вышел из системы?

    Сценарий оболочки: «если файл не используется»

    Правила Udev, соответствующие выходу команды (или что-то подобное)

    Как показать непечатаемые символы в нано

    Как получить значок VPN в Kali 2.0 (gnome) как root?

    Как протоколировать команды в «sudo su -»?

    Fedora 21 – Проблема после пробуждения после закрытия

    Система LFS не загружается или GRUB не может получить доступ / bood / grub при загрузке

    Сплит-установка linux ISO на две части

    Различные формы выполнения сценария оболочки

    Экран автоматического масштабирования KDE после входа в систему с подключенным монитором HiDPI или нет

    Получение числа и имен окон в Xvfb

    Linux и Unix - лучшая ОС в мире.