Коллеги, приветствую! Появилась не совсем тривиальная задача реализовать в nginx

редирект HTTPS —> HTTP. Да, именно так, а не наоборот. Мы разрабатываем embedded устройство, на которое пользователь заходит по IP-адресу (как на какой-нибудь роутер), а не по доменному имени. Из-за тотального внедрения HTTPS во всех браузерах, зачастую они используют именно его по умолчанию, что, естественно, выливается в ERR_CONNECTION_REFUSED, т.к. listen 443 сейчас не прописано в конфиге nginx, только 80. Многих пользователей устройства это сбивает с толку.

Беглый поиск по интернетам дал два варианта решения проблемы, через rewrite и return:

server {
listen 443;
server_name _;
rewrite ^(.*) http://$host$1 permanent;
}

server {
listen 443;
return 301 http://$host$request_uri;
}

но ни один из них не заработал, в Chrome ошибка ERR_SSL_PROTOCOL_ERROR, curl пишет чуть подробнее:

nikita@MBP:~% curl -vv https://192.168.100.103/
* Trying 192.168.100.103:443...
* Connected to 192.168.100.103 (192.168.100.103) port 443 (#0)
* ALPN: offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/cert.pem
* CApath: none
* LibreSSL/3.3.6: error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version
* Closing connection 0
curl: (35) LibreSSL/3.3.6: error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version

Как я понимаю, трабла в том, что для установки SSL-коннекта нужны серт и ключ в конфиге... Но в нашем случае этих сертов нет! В инете предлагается либо сделать самоподписанный серт (что выльется в warning в браузере, не хочется такого), либо заюзать условный Let's Encrypt, что тоже не вариант, т.к. они не делают сертификаты для IP-адресов, да и IP у нас по факту может быть любой...

Одним словом, мне не нужен этот ваш хттпс, а если юзер и заходит по нему, надо его как-то перекинуть на HTTP. Как по вашему правильнее решить эту проблему?

24 ответов

47 просмотров

Так в чем проблема сделать пропатчить так сказать nginx сертботом, и https запрос перенаправлять на http в nginx?)

Выдать юзеру ссылку с хттп://

В общем случае - никак, особенно если у вас embedded устройство с адресом в приватной сети. Вы имеете шанс поймать ситуацию, когда пользователь уже заходил ранее на этот ip по https, ему отдали там HSTS с таймаутом в полгода - и без очистки кэша браузера пользователь на http не попадет никак.

Никита- Автор вопроса

Понятно, печально( И раз у юзера будет включен HSTS, то даже с самоподписанным сертом зайти не удастся?

Никита
Понятно, печально( И раз у юзера будет включен HST...

Удастся, но с руганью на сертификат. Но это краевой случай, на самом деле

Устройство вообще не умеет в https, или вы не хотите?

Никита- Автор вопроса
⁠Сергей
Устройство вообще не умеет в https, или вы не хоти...

Как оно сможет уметь, если я его ещё не настроил) Вот как раз и пытаюсь понять, можно это вообще сделать или нет. А настроить проблема, т.к. мы не знаем точные SAN, для которых генерить сертификат, IP-адрес может быть любой. Мне интересно, как это на тех же роутерах реализовано (я сам хз, потому что почти везде микротики на которые я захожу через SSH), судя по всему, никак...

Никита
Как оно сможет уметь, если я его ещё не настроил) ...

Группа пользователей у устройства определена или нет?

Никита
Как оно сможет уметь, если я его ещё не настроил) ...

Посмотрите, как это сделано на всяких ipmi / oob железках. В 99% случаев там просто фуфлыжный сертификат, да еще и просроченный.

А так ли надо HTTPS в серых сетях? Если прям надо то пусть клиент сам сможет подсунуть свой серт, ключ и CA

Linux/o.id[8] Tech-Worker
А так ли надо HTTPS в серых сетях? Если прям надо ...

Мол по дефолту HTTP, скормишь свои серты и ключ - будет и HTTPS и возможность отрубить http

Никита
Как оно сможет уметь, если я его ещё не настроил) ...

если есть свой доверенный уц, то проблем особых нет

аккуратнее с портянками, есть pastebin.com

Никита- Автор вопроса
kiosaku
если есть свой доверенный уц, то проблем особых не...

УЦ допустим есть, но он наш офисный, снаружи доступа к нему нет. Но даже если и вынести его в инет — устройство в 95 % случаев стоит в закрытой сети, у которой нет доступа в инет и соответственно к нашему УЦ.

Никита- Автор вопроса
Никита
УЦ допустим есть, но он наш офисный, снаружи досту...

а тогда в чём проблема-то, раз "во внутренней сети" ?

Никита- Автор вопроса
kiosaku
а тогда в чём проблема-то, раз "во внутренней сети...

Возможно, возникло недопонимание... УЦ есть в нашей офисной сети, но устройства в продакшене стоят не у нас, а у клиентов по всей россии, и зачастую в закрытых контурах, не имеющих доступа в инет. Поэтому подключиться к нашему УЦ они не смогут.

Никита- Автор вопроса

Но иначе пользователям придётся явно добавлять наш CA root себе в систему?

Никита- Автор вопроса
kiosaku
не "иначе", а определённо

Тогда это не вариант и придётся видимо оставить всё как есть( Я всю эту тему завёл только ради того, чтобы юзерам удобнее было, а на секурити тут пофигу... Добавлять свои серты, это уже гемор. Кстати, а разве нет какой-то технологии, чтобы получать эти кастомные корневые сертификаты УЦ удалённо? Т.е. не закидывать руками в систему и прописывать как доверенный. Вроде же был какой-то протокол, но тут я уже сто проц в теме плаваю, так что просьба тряпками сразу не закидывать)) OSCP чё-та-там, или это не для этого?

Никита
Тогда это не вариант и придётся видимо оставить вс...

Ocsp скорее всего вы слышали, он нужен для проверки сертификата, что он валидный. Он не получает рутовые сертификаты, не тянет их из уц, рутовые серты устанавливает производитель ОС системы, плюс вы зарукожопить можете и поставить шляпу какую-нибудь и доверять ей, ну либо кто-то за вас решит этот вопрос, получив рута(админа) от вашей системы. Без знания дела лучше не трогать. Лучше читать про PKI много и нужно, пока все не будет кристально понятно.

Никита
Тогда это не вариант и придётся видимо оставить вс...

добавляется _один сертификат. уц-шный. в любом случае, у меня есть подозрение, что ты сам не очень понимаешь, что хочешь

Никита- Автор вопроса
kiosaku
добавляется _один сертификат. уц-шный. в любом слу...

Нет, я всё прекрасно понимаю, чего хочу, и это было описано в моём первом сообщении: просто сделать девайс более user friendly и избежать ошибки connection refused. Просто дальше уже обсуждение скатилось к собственным УЦ и корневым сертам, это я скорее для интереса и самообразования продолжил)) А ответ на свой вопрос я получил, что без костылей никак не реализовать то, что я хотел. Я ж поначалу гуглил и ничё внятного не нашёл, везде классика банальная http > https, а наоборот мало кому надо было, поэтому решил обратиться к комьюнити.

Похожие вопросы

Обсуждают сегодня

Всем привет. На руках есть видеопоток с камеры микроскопа, который показывает клетки. (Фото 1). Пытаюсь обвести их квадратами и пронумеровать на картинке. Пока получается...
Semyon
10
I am reaching out on behalf of my brother, who is currently seeking a data science internship opportunity. He is passionate about data science and has been actively honing his...
Shivam Kumar
3
Всём доброго времени суток, хотел бы узнать, очень понравилось направление ML и в частности к компьютерному зрению (диплом по распознаванию болячек на растениях) , хотел бы по...
Il'ya King
12
Всем привет! Ребят подскажите пожалуйста Есть ли различия обработки фото (стоп кадр из видео) и кадра из видео? Сделал поиск контуров и отфильтровал лишнее Но при запуск...
Evgeniy
4
Подскажите, возможно ли без нейросети получить контуры выделяющего объекта, в данным случае авто? Нужно определить не сам авто, а просто объект который выделяется, т.е. темная...
Denis
1
всем привет, есть видео футбольных матчей и необходимо определить какое действие происходит на видео в определённый момент времени. Условно, на 5 секунде игрок сделал пас, на ...
Vadzim _B
1
Hello everyone, ребят, к какому уровню сложности может относиться задачка по отделению облаков от неба для видео? (от 1 до 10,) *в условиях смены времени суток *при неизменно...
Merge
16
Понял) А легковесных моделей для таких задач не встречали? Т.е. что бы не объекты определял, а цветовые пятна, если так можно назвать.
Denis
3
Для подстче машин которые проходят линию использую yolov3 и сортинг алгоритм. Один фрейм обрабатывает 1.6секунд. Как можно ускорить или посоветуйте что можно использовать вмес...
Nurdaulet
3
Добрый вечер, подскажите, есть ли какие-то курсы/книги по openCV для c++, а то много где находил ссылка на: https://robocraft.ru/opencv Но сам курс 2010-го года, и там мало ...
Никита Мельников
2
Карта сайта