--- title: Выпускаем свой сертификат через свой CA description: published: true date: 2024-04-24T09:45:47.898Z tags: ssl editor: markdown dateCreated: 2024-04-24T09:45:43.127Z --- Сейчас без HTTPS не хотят работать многие сервисы. А даже если и работают, то браузеры не дадут спокойно пользоваться. Поэтому приходится получать и настраивать сертификаты, даже если большой нужды в этом нет. Особенно если ты работаешь с ним один в локальной сети, либо вообще поднимаешь временно. Я обычно получаю сертификаты let's encrypt и копирую на нужный сервер, если к нему не проброшен доступ из интернета. Решил подготовить пошаговую инструкцию, чтобы быстро выпустить свой сертификат через свой CA, добавив его к себе в доверенные, чтобы браузеры не ругались. Во многих ситуациях это будет удобнее, чем постоянно обновлять доверенные сертификаты через интернет. Свой можно выпустить вечным. Покажу на примере настройки сертификата в Nginx. Будем выпускать сертификат для доменного имени zabbix.internal и IP адреса 172.30.245.222. Будет работать и так, и эдак. Выпускаем ключ и сертификат для своего CA: ``` # mkdir ~/tls && cd ~/tls # openssl ecparam -out myCA.key -name prime256v1 -genkey # openssl req -x509 -new -nodes -key myCA.key -sha256 -days 9999 -out myCA.crt ``` Вам зададут серию вопросов. Отвечать можно всё, что угодно. В данном случае это не важно. Выпускаем ключ и сертификат для сервера: ``` # openssl genrsa -out zabbix.internal.key 2048 # openssl req -new -key zabbix.internal.key -out zabbix.internal.csr ``` Тут тоже зададут похожие вопросы. Отвечать можно всё, что угодно. Готовим конфигурационный файл: ``` # mcedit zabbix.internal.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] IP.1 = 172.30.245.222 DNS.1 = zabbix.internal ``` Генерируем сертификат на его основе: ``` # openssl x509 -req -in zabbix.internal.csr -CA myCA.crt -CAkey myCA.key \ -CAcreateserial -out zabbix.internal.crt -days 9999 -sha256 -extfile zabbix.internal.ext ``` Копируем сертификат и ключ в директорию веб сервера: ``` # mkdir /etc/nginx/certs # cp zabbix.internal.crt /etc/nginx/certs/. # cp zabbix.internal.key /etc/nginx/certs/. ``` Создаём файл dhparam, который понадобится для конфигурации Nginx: ``` # openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 ``` Добавляем в конфиг Nginx в целевом виртуальном хосте: ``` listen     443 http2 ssl; server_name   zabbix.internal 172.30.245.222; ssl_certificate /etc/nginx/certs/zabbix.internal.crt; ssl_certificate_key /etc/nginx/certs/zabbix.internal.key; ssl_dhparam /etc/ssl/certs/dhparam.pem; ``` Перезапускаем Nginx: ``` # nginx -t # nginx -s reload ``` Передаём на свой компьютер файл myCA.crt и добавляем его в хранилище корневых доверенных центров сертификации. Настройка будет зависеть от операционной системы. Если нужно тут же, локально на сервере с Debian 12 настроить доверие этому CA, то делаем так: ``` # cp myCA.crt /usr/local/share/ca-certificates/. # update-ca-certificates ``` Теперь можно браузером заходить по доменному имени или IP адресу, будет работать самоподписанный сертификат на 9999 дней без каких-либо предупреждений. Получилась готовая инструкция для копипаста, которую можно сохранить и пользоваться. ![ssl-zabbix.jpg](/ssl-zabbix.jpg)