diff --git a/sysadmin/Linux/SSL/make-ssl-cert.md b/sysadmin/Linux/SSL/make-ssl-cert.md new file mode 100644 index 0000000..99a79bd --- /dev/null +++ b/sysadmin/Linux/SSL/make-ssl-cert.md @@ -0,0 +1,78 @@ +--- +title: Выпускаем свой сертификат через свой CA +description: +published: true +date: 2024-04-24T09:45:43.127Z +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) \ No newline at end of file