У нас довольно непростая история с доступами во внешнюю сеть на работе. Если еще в рамках ежедневной работы что-то можно погуглить, но если нужно посветить виртуалкой в инет для простоты работы, то тут начинаются разнообразные этапы согласований, которые могут отнять время и желание вообще что-либо делать.
Очередная такая ситуация возникла, когда мы запустили виртуальную машину, чтобы развернуть на ней копию прода для тестов. У нас очень много чего завязано на SSL-сертификатах, но в нашей ситуации получать домен и светить айпишником в инет не было реализуемым вариантом. Я до этого с подобным не сталкивался, потому начал думать, как решить, чем сейчас и поделюсь.
Если кратко, то мы выпустили самописный сертификат на айпи адрес в локальной сети. По сути, работает точно так же, как сертификат от Let’s Encrypt. Отличие лишь в том, что нужно вручную устанавливать этот сертификат в операционную систему. Вот процедура:
1) Создаем чистую папку для работы, чтобы не запутаться в файлах.
mkdir -p /root/certs cd /root/certs
2) Создаем «Главный ключ» и «Главный сертификат». Этим сертификатом мы будем подписывать все остальные.
openssl genrsa -aes256 -out rootCA.key 4096 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt
Итог: Появятся rootCA.key (секретный, никому не давать) и rootCA.crt (публичный, его будем ставить на устройства, которые будут ходить на наш сервер).
3) Создается файл настройки с расширением .conf примерно такого содержания:
_[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = req_distinguished_name req_extensions = req_ext x509_extensions = v3_req
[req_distinguished_name] C = RU ST = Moscow L = Moscow O = CompanyGroup CN = 101.148.223.60
[req_ext] subjectAltName = @alt_names
[v3_req] subjectAltName = @alt_names
[alt_names] # List all DNS names and IPs here DNS.1 =_ app.mycompany.ru_ IP.1 = 101.148.223.60 IP.2 = 190.118.127.12 IP.3 = 127.0.0.1_
В [alt_names] мы прописываем адреса, по которым будем ходить на сервер, для которого выпускается сертификат. Нас интересует IP.1 - адрес сервера в локальной сети.4) Генерим ключ сервера и запрос на подпись: _ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt -config cert_config.cnf_
Появятся файлы server.key (секретный ключ) и server.csr (запрос).
5) Подписываем запрос нашим корневым сертификатом:
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile server.conf -extensions req_ext
Появится server.crt.
6) На этом этапе я добавил созданные сертификаты server.crt и server.key в nginx и перезапустил службу.
По сути с сертификатами всё. Теперь просто берем rootCA.crt и устанавливаем его на устройства, с которых планируется работа с сервером. Я устанавливал на Android и на Windows 11.
· 19.03
Это когда нет девопса в конторе и стендов?
ответить
коммент удалён
· 19.03
Все верно))
ответить
ответ удалён
· 19.03
🥲
ответить
ответ удалён