LINUX.ORG.RU

Сертификат Х509 для веб морды эмбеда с заранее неизвестным IP

 , ,


0

3

Есть свой УЦ. У пользователей сертификат уже установлен в барузерах, для другой фигни.

На веб морду надо HTTPS да такой, чтоб не ругался браузер что он его знать не знает. Сложность в том что у веб морд в проде будут самые разыне айпи и, соответственно, заранее сертификат туда не сгенерить.

Как эта проблема решается по уму? Отказ от шифрования? На каждой железке генерить самоподписанный и просить пользователя ему доверять? На каждую железяку складывать приватный ключ от УЦ и генерить на месте когда уже узнаешь айпи?

★★★★★

nginx + proxy_pass?

server {

        listen 1.1.1.1:443 ssl;
        server_name www.web-morda.com;
	include snippets/ssl.conf; <--- там директивы на сертификат

	location / {
	proxy_pass		http://127.0.0.1:8080/;
        
	proxy_set_header	Host              $host;
        proxy_set_header	X-Real-IP         $remote_addr;
        proxy_set_header	X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header	X-Forwarded-Proto https;
        proxy_set_header	X-Forwarded-Port  443;
	}

Otets_Sergiy
()

перечислить все ip в сертификате :(
в настройках веб-морды прописать абзац про создание сертификата для выставленного ип

pfg ★★★★★
()
Ответ на: комментарий от pihter

Nginx слушает порты 80 и 443. Пользователь вводит запрос в браузер:

http://www.web-morda-9999.com

Nginx получает этот запрос на порт 443 и проксирует запрос куда нужно. Если запрос приходит на порт 80 то редирект на порт 443.

Например:


server {

        listen 80;
        server_name web-morda-9999.com www.web-morda-9999.com;
        location / {
                return 301 https://www.web-morda-9999.com$request_uri;
        }

server {

        listen 1.1.1.1:443 ssl;
        server_name www.web-morda-9999.com;
	include snippets/ssl.conf; <--- там директивы на сертификат

	location / {
	proxy_pass		http://domain-static.local:8080/;
        
	proxy_set_header	Host              $host;
        proxy_set_header	X-Real-IP         $remote_addr;
        proxy_set_header	X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header	X-Forwarded-Proto https;
        proxy_set_header	X-Forwarded-Port  443;
	}
}

Что делает Nginx? Он слушает доменное имя на порте и проксирует его в:

proxy_pass http://domain-static.local:8080/;

Cоответственно, доменное имя "http://domain-static.local" - указано в /etc/hosts или в dns сервере и имеет ip адрес.

И даже если айпи сменится, это не нарушит работу, ибо nginx проксирует на доменное имя а не айпи.

Веб морда на адресе "http://domain-static.local:8080/" может работать как на nginx так и на apache.

Сертификат будет использоваться в nginx на один домен. Если нужна еще одна веб морда, то делай ее локейшеном, например так:

location /web-morda-1234556 {
	proxy_pass		http://domain-static:8181/;
        
	proxy_set_header	Host              $host;
        proxy_set_header	X-Real-IP         $remote_addr;
        proxy_set_header	X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header	X-Forwarded-Proto https;
        proxy_set_header	X-Forwarded-Port  443;
	}

В итоге получится так. Один домент с овер9999 локейшенов. И на каждом локейшене своя веб морда. На все веб морды один сертификат. И nginx проксирует не по айпишникам а по доменным именам, которые задаются в системе. И если айпишник сменится, то ничего страшного.

Как то так.

Otets_Sergiy
()

Если речь про обычные https-сертификаты то на айпи-адреса они не работают (браузер не считает валидными). Сертификат выдаётся на доменное имя - поэтому сгенери их для нужных доменных имён, ну а как связать домены с нужными айпи это уже другая тема.

firkax ★★★★★
()
Ответ на: комментарий от Otets_Sergiy

Не. Ты не понял: мы железяку делаем и продаем. Заказчик хочет чтоб веб морда была по хттпс, но айпишника я еще не знаю когда прошивку собираю. Я ж ему не скажу что к нашей железяке надо рядом еще комп ставить с проксей, чтоб хттпс работал

pihter ★★★★★
() автор топика
Ответ на: комментарий от firkax

Если речь про обычные https-сертификаты то на айпи-адреса они не работают (браузер не считает валидными)

Точно? Мне именно оно и надо. А вот тут https://openwrt.org/docs/guide-user/services/webserver/http.mini-httpd пишут что можно айпишник и будет работать, хотя, у меня пока не получилось заставить зис щит воркать, но я еще совсем не сдался )

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

чтоб веб морда была по хттпс, но айпишника я еще не знаю

Ну а как оно будет работать без ip? ))))))

Я ж ему не скажу что к нашей железяке надо рядом еще комп ставить с проксей

Значит настройка системы после получения ip адреса. Включить ее в стоимость продукта или отдельно.

Заказчик хочет

Ишь какой! По щучьему велению, по моему хотению =).

Otets_Sergiy
()
Ответ на: комментарий от pihter

хех, тут ситуация не проработанная в https задумках. тож с подобным ковырялись.
один из вариантов: в железяки вложить сертификат на доменое имя «*.pribor.local» на и веб-интерфейс прописать чтобы отвечал по https на любой имя «*.pribor.local» c прикладыванием сертификата.
ну а заказчику прописать самостоятельной настройки резолва *.pribor.local в настроенные ip железяк. я ж правильно понимаю, что внутри одной сетки железяк может быть несколько ??

pfg ★★★★★
()
Ответ на: комментарий от Otets_Sergiy

объясняю в таком ключе, в локальную сеть предприятия (а может и глобальную) подключено немалое количество железяк (приборов АСУТП или чего подобного), каждый с веб-интерфейсом.
предоставляемый ip для отдельной железяки заранее неизвестен.

pfg ★★★★★
()
Ответ на: комментарий от pfg

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

да. *.pribor.local – я думал так, но меня с таким пошлют: у них в полях все на айпишниках, ради такой фигни они все переделывать не станут

pihter ★★★★★
() автор топика
Ответ на: комментарий от pfg

отдельные? это где? я в CN пытаюсь прописать

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

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

Веб-сайты подтверждают свою подлинность с помощью сертификатов. Firefox не доверяет этому сайту, потому что он использует сертификат, недействительный для (тут айпи-адрес).
 
Код ошибки: SSL_ERROR_BAD_CERT_DOMAIN

Других браузеров нету - не проверял в них.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от pihter

тогда в РЭ прописывать абзац про формирование сертификата для https :)

скоро барвзеры вообще от http откажутся - сволочи.
недавно была проблема что браузер с https не хотел переходить на http://127.0.0.1:12345 ибо несекурно, но потом кажись ентим дебилам пробили брешь в извилине - заработало.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pihter

таки работают – даже сертификаты продают на айпишники

Ну не знаю, попробую ещё проверить в чём дело. В любом случае сертификат на домен для твоего случая проще - он не будет привязан к айпи-адресам.

firkax ★★★★★
()
Ответ на: комментарий от firkax

В любом случае сертификат на домен для твоего случая проще

это попытка искать монетку там где светло, а не там где потерял: ад, так проще, но мне надо не это

pihter ★★★★★
() автор топика
Ответ на: комментарий от pfg

скоро барвзеры вообще от http откажутся - сволочи.

Не откажутся.

firkax ★★★★★
()
Ответ на: комментарий от firkax

%тс% же пишет, что работа с доменами невозможна/нежелательна.
к примеру привык обслуживающий персонал заходить на железяку по http://10.50.30.24, а тут имена…

pfg ★★★★★
()
Ответ на: комментарий от firkax

Слушай: ну я потыкал глазками стандарт https://datatracker.ietf.org/doc/html/rfc6125#section-2 и сходу ничего про айпишники там не нашел: может потому что их там и нет, однако мне точно известно, что в проде у нас такое работает и я прямо сейчас вижу в соседней вкладке в фаефоксе что все работает. (может потому что айпишник в цифрах – это частный случай FDQN в некотором роде)

вобщем – очень, очень тревожно )

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

в CN ip не впихнешь, CN вообще не создавался под доменные имена, но кто на такие тонкости обращает внимания.
а вот в subjectAltName есть поля для IP и DNSname и все нужное.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 3)
Ответ на: комментарий от pihter

мы железяку делаем и продаем. Заказчик хочет чтоб веб морда была по хттпс

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

imb ★★
()
Ответ на: комментарий от pihter

А, тьфу, извини за дезинформацию. Всё работает, в том числе при вписывании в Common Name. Это в моём софте был баг с сертификатами, что они на айпи-адреса неверно выдавались (точнее, я думал браузер его в SNI пришлёт а он там только домены пишет). Но всё равно я где-то читал что-то отрицательное про сертификаты на айпи.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от pfg

Оказывается в CN как раз можно. А вот если писать в SAN DNSname то

Firefox не доверяет этому сайту, потому что он использует сертификат, недействительный для 0.0.0.0. Сертификат действителен только для 0.0.0.0.
ну это неудивительно раз там спец. поле для ip есть

firkax ★★★★★
()

Конечный пользователь должен иметь возможность сам установить свой сертификат. Почему он должен доверять твоему УЦ.

На каждую железяку складывать приватный ключ от УЦ и генерить на месте когда уже узнаешь айпи?

Верный путь к поимению всех ваших железяк оптом :)

Harald ★★★★★
()

чипайди.local – нормальная практика, если пользователь совсем тупенький – приложи стикер с баркодом в коробку с прибором. гораздо интереснее, как заставить браузер доверять сертификату со сроком действия 10+ лет

anonymous
()
Ответ на: комментарий от imb

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

да, есть, но это про другой случай

pihter ★★★★★
() автор топика
Ответ на: комментарий от firkax

Но всё равно я где-то читал что-то отрицательное про сертификаты на айпи.

такой фигней наших продажников не напугаешь: они тертые – нужна конкретика

pihter ★★★★★
() автор топика
Ответ на: комментарий от Harald

Конечный пользователь должен иметь возможность сам установить свой сертификат.

такая возможность есть для охочих до заморочки, а остальные просто хотят чтоб адресная строка не краснела и не было пугающих и непонятных диалогов от браузера

Верный путь к поимению всех ваших железяк оптом :)

ну как поимению? Там неуловимый Джо на страже: кому нафиг надо поделывать сертификат чтоб без красной строки прикинуться веб-инерфесом какой-то оконечной железяки, где кроме айпишника можно еще пару параметров вывода настроить? Оно у нас годами крутилось на самоподписном сертификате и никому дела не было, ибо конечный пользователь в этот веб интерфейс не лазит, а инженеры в полях и не такое стерпят. Короче, мир ужасен )

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

кому нафиг надо поделывать сертификат чтоб без красной строки прикинуться веб-инерфесом какой-то оконечной железяки

солда^Wхакерам НАТО, кому же ещё )

а ведь зелёная строка будет не только при заходе на эту железку, а любой другой сайт

Harald ★★★★★
()
Ответ на: комментарий от anonymous

чипайди.local – нормальная практика

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

гораздо интереснее, как заставить браузер доверять сертификату со сроком действия 10+ лет

ну он и щас не шибко-то доверяет сертификату, подписанному собственным приватным ключом, ниче страшного )

зы, а какие там ограничения на срок у браузеров?

pihter ★★★★★
() автор топика

Если железка может связываться с центром по интернету, можно подписывать сертификат после установки у юзверей, железка отсылает CSR в центр, центр присылает подписанный сертификат. Пару ключей для сертификата железки можно генерировать заранее и хранить в центре соответствие железка — публичный ключ.

Harald ★★★★★
()
Ответ на: комментарий от Harald

хакерам НАТО, кому же ещё )

железка продается в основном в этих их америках – так что в добырй путь! )

а ведь зелёная строка будет не только при заходе на эту железку, а любой другой сайт

что? почему? из-за установленного моего корневого? яннп!

pihter ★★★★★
() автор топика
Ответ на: комментарий от Harald

тут нет желания создавать доменную структуру, а ты про удаленный доступ к серверам разработчиков :) опять же никто не писал что локалка где железяки работают вообще открыта голой жопой в тырнетик :)

pfg ★★★★★
()
Ответ на: комментарий от pihter

железка продается в основном в этих их америках – так что в добырй путь! )

ну значит, спецы из NSA расковыряют железку, выяснят, что она дырявая, публично заявят, что злые русские хакеры поставляют бэкдорное железо, на твою контору накладывают санкции, контора разоряется, тебя увольняют, идёшь бомжевать под мост и помираешь от голода и холода :)

что? почему? из-за установленного моего корневого? яннп!

Если у пользователей установлен корневой сертификат твоего удостоверяющего центра, то с сертификатом, подписанным от имени твоего УЦ они будут видеть зелёным любой поддельный сайт, хоть гугл с мордокникой или банк-клиент

Harald ★★★★★
()
Ответ на: комментарий от Harald

Да. Мы сегодня с коллегами уже дообсуждались до такого. Мы. конечно, предложим, но заранее знаю что они отклонят ибо джаст бизнес – а не вот это вот ваше сделать как надо )

pihter ★★★★★
() автор топика
Ответ на: комментарий от pfg

и ты там можешь написать хоть миллион лет, но современные браузеры будут ругаться, если срок действия превышает 398 дней

anonymous
()
Ответ на: комментарий от pfg

ограничение на срок использования вписаны в твоем сертификате :)

вот и я так думаю, а анон говорит что сильно долгим браузер доверять не будет, я про такое не слыхал, но запросто может быть правдой

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Не, вообще можно читерский вариант, заранее нагенерировать сертификатов на все возможные адреса из диапазона локальных сетей :)

192.168.0.0/16, 10.0.0.0/8 и т.д.

но это всё плохое и я тебе его не советовал )

Harald ★★★★★
()
Ответ на: комментарий от anonymous

хотя 398 дней плюс один год, вроде. короче хрен тебе, а не 5 лет, не то что 10

anonymous
()
Ответ на: комментарий от pfg

тут нет желания создавать доменную структуру, а ты про удаленный доступ к серверам разработчиков :) опять же никто не писал что локалка где железяки работают вообще открыта голой жопой в тырнетик :)

ну там все так устроено что локальный сервер (и, да, порой, без выхода в интернет) всегда доступен, но замучивать туда (на этот сервер) изменения – это себе дороже

pihter ★★★★★
() автор топика
Ответ на: комментарий от Harald

интересно а диапазон адресов в сертификат впихнуть можно ??
я так понял что нет. wildcart писан только применительно к доменным именам.

pfg ★★★★★
()
Ответ на: комментарий от pfg

нет, но SAN-ов с IP-адресом может быть много

Harald ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.