mkcert: создание локальных сертификатов для разработки в Linux

Если вы когда-либо пытались настроить HTTPS локально для разработки, то, скорее всего, столкнулись с трудностями. Создание самоподписанного сертификата, настройка доверия браузера к нему и работа с предупреждениями могут стать настоящей головной болью. Именно здесь на помощь приходит mkcert
mkcert — это простой инструмент, который позволяет разработчикам и системным администраторам создавать локально доверенные SSL-сертификаты для разработки и тестирования. Это избавляет от надоедливых предупреждений в браузере. Да, он бесплатный, с открытым исходным кодом и отлично работает в Linux.
В этой статье мы расскажем вам, что такое mkcert, как он работает, как его установить и как эффективно использовать в среде Linux.
Зачем нам нужен локальный HTTPS?
Прежде чем мы перейдём к mkcert
, давайте вкратце рассмотрим, зачем вам вообще нужен HTTPS в вашей среде разработки.
- Современным веб-приложениям нужен HTTPS — для многих API, сервис-воркеров, файлов cookie и функций браузера требуется безопасное соединение. Без HTTPS ваше приложение может вести себя по-разному в режиме разработки и в рабочей среде.
- Соответствие производственным средам — если в вашей производственной среде используется HTTPS (как и должно быть), разумно тестировать все в одинаковых условиях во время разработки.
- Совместимость с браузерами и тестирование — Chrome, Firefox и другие современные браузеры применяют более строгие политики безопасности в отношении небезопасных источников (HTTP).
Но вот в чём загвоздка: браузеры не любят самоподписанные сертификаты и выдают пугающие предупреждения, если сертификат не подписан доверенным центром сертификации (ЦС).
Что такое mkcert?
— это инструмент командной строки, который создаёт локальные сертификаты для разработки.
Он делает это с помощью:
- Создание собственного центра сертификации (ЦС) в вашей системе
- Как настроить ОС и браузеры на доверие к этому локальному ЦС
- Создание TLS-сертификатов, подписанных этим центром сертификации, чтобы браузеры им доверяли
Проще говоря, mkcert
действует как ваш личный центр сертификации (ЦС), и ваш браузер считает сертификаты, которые он генерирует, действительными. Никаких предупреждений, никаких взломов браузера — только чистый, надёжный HTTPS для локальной разработки.
Установка mkcert в Linux
Перед установкой mkcert
необходимо убедиться, что доступны необходимые системные библиотеки, которые помогают mkcert
интегрироваться с хранилищем сертификатов вашей системы, особенно для поддержки Firefox (который использует базу данных NSS).
sudo apt install libnss3-tools -y #на базе Debian sudo dnf install nss-tools -y #на базе RHEL sudo zypper install mozilla-nss-tools #на базе OpenSUSE sudo pacman -S nss #на базе Arch
Далее рассмотрим два основных способа установки mkcert
: с помощью менеджера пакетов вашего дистрибутива Linux или путем загрузки бинарного файла вручную. Выберите способ, который подходит для вашей системы.
Вариант А: установите mkcert через менеджер пакетов
sudo apt install mkcert #на базе Debian sudo dnf install mkcert #на базе RHEL sudo zypper install mkcert #на базе OpenSUSE sudo pacman -S mkcert #на базе Arch
Вариант Б: установка вручную (для других дистрибутивов)
Если mkcert
недоступен в репозиториях вашего дистрибутива или вы предпочитаете последнюю версию, вы можете загрузить и установить бинарный файл вручную.
Сначала скачайте последнюю версию mkcert (https://github.com/FiloSottile/mkcert/releases) с GitHub:
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
Затем переместите его в каталог PATH
в вашей системе и сделайте исполняемым:
sudo mv mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert sudo chmod +x /usr/local/bin/mkcert
Наконец, проверьте установку, посмотрев версию:
mkcert --version
Если вы видите номер версии, значит, mkcert
уже готов к использованию на вашем компьютере с Linux.
Доверие к локальному центру сертификации
После установки mkcert
следующим шагом будет создание локального центра сертификации (ЦС) и добавление его в список доверенных. Это разовая настройка, которая гарантирует, что любой сертификат, созданный с помощью mkcert
, будет автоматически доверен вашей системой и браузером.
Для начала просто введите в терминале следующую команду:
mkcert -install
Приведенная выше команда создает новый локальный центр сертификации и сохраняет его в вашем домашнем каталоге по адресу ~/.local/share/mkcert
, а затем добавляет этот центр сертификации в хранилище доверенных сертификатов вашей системы Linux, чтобы операционная система распознавала все подписанные им сертификаты как действительные.
Если у вас установлен пакет libnss3-tools
(а он должен быть установлен, если вы используете Firefox), mkcert
также добавит центр сертификации во внутреннюю базу данных сертификатов Firefox, а это значит, что Firefox будет без проблем доверять вашим сертификатам для разработки.
После выполнения команды вы увидите примерно такой результат:
Created a new local CA at "/home/you/.local/share/mkcert" The local CA is now installed in the system trust store!
Теперь ваша система настроена на доверие к любым TLS/SSL сертификатам, созданным с помощью mkcert
, что устраняет обычные предупреждения браузера, которые появляются при использовании самоподписанных сертификатов, и закладывает основу для безопасного и надёжного HTTPS во время локальной разработки.
Создание локальных сертификатов с помощью mkcert
А теперь самое интересное: создание локального SSL-сертификата с помощью mkcert
. Допустим, вы разрабатываете веб-приложение и хотите, чтобы оно работало по протоколу HTTPS на myapp.local
.
Вы можете сгенерировать сертификат для этого домена, просто выполнив следующую команду:
mkcert myapp.local
После выполнения mkcert
в вашем текущем каталоге будут созданы два файла: myapp.local.pem
— сертификат, и myapp.local-key.pem
— закрытый ключ.
Эти файлы можно использовать напрямую с локальными веб-серверами, такими как Nginx, Apache, или даже с облегчёнными серверами для разработки, такими как http.server
на Python, если они настроены на поддержку SSL.
Если вы работаете с более сложными средами разработки, которые включают в себя несколько доменов, поддоменов или даже доступ к локальному хосту, mkcert
позволяет создать сертификат, охватывающий их все, с помощью одной команды.
Например:
mkcert myapp.local "*.myapp.local" localhost 127.0.0.1 ::1
Приведенная выше команда генерирует сертификат, действительный для myapp.local
, любого поддомена, например api.myapp.local
, а также для localhost
и его IP-эквивалентов 127.0.0.1
для IPv4 и ::1
для IPv6.
Использование mkcert с локальным сервером Nginx
Давайте рассмотрим практический пример использования mkcert
для обслуживания локального веб-приложения по протоколу HTTPS с помощью Nginx. Представьте, что у вас есть локальный сервер разработки, работающий по адресу http://localhost:3000
, и вы хотите получить к нему безопасный доступ по адресу https://myapp.local
.
Сначала вам нужно привязать домен myapp.local
к вашему локальному компьютеру. Откройте файл /etc/hosts
в любимом текстовом редакторе.
sudo nano /etc/hosts
и добавьте следующую строку, которая указывает вашей системе на необходимость преобразования myapp.local
в локальный интерфейс обратной связи.
127.0.0.1 myapp.local
Затем сгенерируйте сертификат для разработки этого домена с помощью mkcert
, в результате чего в вашем текущем каталоге будут созданы два файла: myapp.local.pem
(сертификат) и myapp.local-key.pem
(закрытый ключ).
mkcert myapp.local
Теперь настройте Nginx на использование этих сертификатов. Откройте конфигурацию Nginx (обычно она находится в /etc/nginx/sites-available/
или /etc/nginx/conf.d/
) и создайте или обновите блок сервера следующим образом:
server { listen 443 ssl; server_name myapp.local; ssl_certificate /path/to/myapp.local.pem; ssl_certificate_key /path/to/myapp.local-key.pem; location / { proxy_pass http://localhost:3000; } }
Обязательно замените /path/to/
на фактический путь к файлам сертификата и ключа, созданным с помощью mkcert
.
После настройки конфигурации перезагрузите или перезапустите Nginx, чтобы изменения вступили в силу:
sudo systemctl restart nginx
Теперь откройте браузер и перейдите по адресу https://myapp.local
. Вы увидите, что ваше приложение работает в безопасном режиме по протоколу HTTPS без предупреждений о сертификате, как в реальной рабочей среде.
Примечание по безопасности
Примечание по безопасности: mkcert
предназначен исключительно для разработки и тестирования. Сертификаты, созданные с помощью mkcert
, ни в коем случае нельзя использовать в производственных средах, так как этот инструмент создаёт локальный центр сертификации (ЦС), который не распознаётся глобальными системами или браузерами.
Кроме того, закрытый ключ этого центра сертификации хранится в виде обычного текста на вашем локальном компьютере, что представляет угрозу безопасности в случае его неправомерного использования. Для любого производственного развертывания всегда используйте надежный центр сертификации, например Let’s Encrypt, чтобы обеспечить надлежащую проверку и соответствие требованиям безопасности.
Как удалить mkcert и локальный центр сертификации
Если вам когда-нибудь понадобится очистить систему или полностью удалить mkcert
, это несложно. Сначала вы можете удалить локально установленный центр сертификации (ЦС), выполнив команду:
mkcert -удалить
Эта команда удаляет корневой центр сертификации, созданный с помощью mkcert, из хранилища доверенных сертификатов вашей системы, а также из базы данных NSS Firefox (если применимо). Это гарантирует, что любые сертификаты, подписанные mkcert
, больше не будут считаться доверенными в ваших браузерах или локальных инструментах.
Если вы установили mkcert
вручную (например, загрузив бинарный файл напрямую), вам также следует удалить исполняемый файл из вашей системы.
sudo rm /usr/local/bin/mkcert
Это приведёт к удалению двоичного файла mkcert
с вашего локального компьютера. После выполнения обеих команд mkcert
и его CA будут полностью удалены из вашей системы, не оставив после себя никаких конфигураций доверия.
Заключение
Настройка HTTPS для локальной разработки не должна быть сложной. С помощью mkcert
разработчики и системные администраторы получают быстрый и надежный способ создания сертификатов, которым можно доверять локально, без предупреждений браузера и без необходимости возиться с OpenSSL или сложными цепочками сертификатов.
Редактор: AndreyEx