Как mkcert решает проблему HTTPS в локальной разработке за две команды

Локальная разработка с HTTPS превращается в кошмар из предупреждений браузеров, ручного импорта сертификатов и отключения строгих настроек безопасности. mkcert автоматически настраивает доверенный локальный центр сертификации, убирает зелёные замочки с предупреждениями и позволяет использовать геол…

Как mkcert решает проблему HTTPS в локальной разработке за две команды

Зелёный замочек на localhost за две минуты: как mkcert чинит HTTPS в локальной разработке

Запускаете https://localhost:8000, а Chrome показывает предупреждение: «Ваше соединение не защищено». Кликаете «Дополнительно» и идёте дальше — но это ломает автоматические тесты, заставляет отключать строгий режим HTTPS в инструментах и заставляет каждого члена команды вручную импортировать сертификаты на своей машине. В итоге HTTPS в разработке превращается в набор костылей: то забыли импортнуть, то срок годности сертификата истёк, то браузер упрямится. А между тем современные браузеры блокируют важные функции — геолокацию, камеру, Service Workers, Push-уведомления — если соединение идёт по HTTP. Получается, что локальная разработка с HTTPS — не роскошь, а требование.

mkcert чинит это одним движением: создаёт локальный центр сертификации (CA), который браузеры и системы начинают воспринимать как доверенный, и выпускает сертификаты для любых доменов — localhost, *.test, app.local — одной командой. Никаких танцев с OpenSSL, никаких ежегодных обновлений. Только зелёный замочек, работающая геолокация в PWA и отсутствие предупреждений при каждом запуске сервера.


Почему браузеры не доверяют localhost (и почему это мешает)

Современные браузеры требуют HTTPS для доступа к чувствительным функциям: геолокации, камере, микрофону, Service Workers, Push-уведомлениям, да даже загрузке файлов в PWA. Если запустить локальный сервер на http://localhost:3000, браузер покажет предупреждение «Ваше соединение не защищено». Кликните «Дополнительно» → «Продолжить», но Chrome всё равно будет блокировать navigator.geolocation. Приходится переключать флаги (chrome://flags/#unsafely-treat-insecure-origin-as-secure), терять консистентность между машинами и членами команды, хранить настройки в .bashrc и README.md. В результате HTTPS в разработке превращается в набор хрупких хаков, которые легко забыть или пропустить.


Как mkcert вписывается в существующую модель доверия

mkcert не обходит систему безопасности — он использует её по назначению. Инструмент создаёт локальный центр сертификации, корневой сертификат которого добавляется в системное хранилище. Браузеры и ОС начинают доверять любым сертификатам, подписанным этим локальным CA, так же, как они доверяют сертификатам от Let’s Encrypt или DigiCert.

Вот ключевое отличие от самоподписанных сертификатов: браузеры продолжают помечать самоподписанные сертификаты как недоверенные, даже если вы вручную импортировали их в хранилище. mkcert же решает проблему централизованно — один раз установили доверие к локальному CA, и все сгенерированные им сертификаты работают без предупреждений.


Установка за три команды — и доверие настроено на всех платформах

Windows (Scoop)

Если у вас Windows, проще всего установить mkcert через Scoop:

Set-ExecutionPolicy RemoteSigned -scope CurrentUser
irm get.scoop.sh | iex
scoop bucket add extras
scoop install mkcert
mkcert -install

Команда mkcert -install создаёт локальный CA и добавляет его корневой сертификат в системное хранилище Windows. После этого Chrome, Edge и другие браузеры перестают ругаться на локальные сертификаты.

macOS (Homebrew)

На macOS всё ещё проще:

brew install mkcert
mkcert -install

Корневой сертификат добавляется в системное хранилище macOS, и Safari тоже начинает доверять локальным сертификатам.

Linux (Debian/Ubuntu)

На Linux используйте пакет libnss3-tools и скачайте бинарник:

sudo apt install libnss3-tools
curl -s https://api.github.com/repos/FiloSottile/mkcert/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
chmod +x mkcert-v*-linux-amd64
sudo mv mkcert-v*-linux-amd64 /usr/local/bin/mkcert
mkcert -install

После установки корневой сертификат CA добавляется в NSS-базу Firefox и системное хранилище Linux.

WSL: чтобы сертификаты были доверены и в Windows, и в WSL

Если вы используете WSL, порядок действий важен:

  1. В Windows установите mkcert и запустите mkcert -install. Это создаст локальный CA и добавит его корневой сертификат в системное хранилище Windows.
  2. В WSL узнайте путь к корневому сертификату Windows:
    mkcert -CAROOT
    
    Обычно это C:\Users\user\AppData\Local\mkcert.
  3. В WSL экспортируйте этот путь в ~/.bashrc или ~/.zshrc:
    echo "export CAROOT=/mnt/c/Users/user/AppData/Local/mkcert" >> ~/.bashrc
    source ~/.bashrc
    
  4. Теперь в WSL можно генерировать сертификаты, и они будут доверены в Windows.

Генерация сертификатов: одна строка вместо OpenSSL

После установки доверия остаётся только выпустить сертификат. mkcert делает это одной командой:

mkcert localhost 127.0.0.1 ::1

В результате получаем два файла:

  • localhost+2.pem — сертификат.
  • localhost+2-key.pem — приватный ключ.

Срок действия сертификата — до августа 2027 года. Этого хватает, чтобы не вспоминать про обновление каждый год.


Wildcard и поддомены: не нужно генерировать сертификаты для каждого сайта

Wildcard-сертификаты (*.example.com) экономят время при тестировании поддоменов:

mkcert example.com "*.example.com" app.local

Сгенерированный сертификат будет валиден для:

  • example.com
  • *.example.com (например, api.example.com, dashboard.example.com)
  • app.local

Но помните: wildcard-сертификаты работают только на одном уровне поддоменов. Например, сертификат для *.example.com не покроет a.b.example.com.


Явное указание путей: для Docker, CI/CD и автоматизации

Если вы используете Docker или CI/CD, укажите пути к файлам явно:

mkcert -cert-file=/etc/nginx/ssl/fullchain.crt -key-file=/etc/nginx/ssl/key.pem example.com

Это полезно, когда у вас есть скрипт, который автоматически генерирует сертификаты и передаёт их в Nginx, Apache или другой сервер.


Где mkcert ломается (и что с этим делать)

Firefox на Windows: ручной импорт

mkcert не добавляет корневой сертификат CA в Firefox на Windows. Придётся импортировать его вручную:

  1. Откройте Firefox.
  2. Перейдите в НастройкиСертификатыПросмотреть сертификаты.
  3. Перейдите на вкладку Центры сертификации.
  4. Нажмите Импортировать и выберите rootCA.pem из директории mkcert.
  5. Установите флажок Доверять этому центру сертификации для идентификации веб-сайтов.
  6. Перезапустите браузер.

Это единственный ручной шаг, который нужно сделать для Firefox.

Мобильные устройства: AirDrop и ручная установка

Для iOS и Android корневой сертификат (rootCA.pem) нужно установить вручную:

  1. Сгенерируйте сертификат на компьютере.
  2. Передайте rootCA.pem на устройство (через AirDrop, email, HTTP-сервер).
  3. На устройстве откройте файл и установите сертификат.
  4. Включите доверие к нему в настройках безопасности.

Это неудобно, поэтому mkcert — инструмент для локальной разработки, а не для продакшен-сред.

Node.js: чтобы HTTPS работал не только в браузере

Node.js не использует системное хранилище сертификатов. Поэтому нужно явно указать путь к корневому сертификату:

export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
node server.js

Без этого браузеры будут доверять сертификатам, а Node.js — нет.


Что mkcert точно не заменит

mkcert создан для локальной разработки. Не используйте его в продакшене:

  • Не делитесь приватным ключом локального CA (rootCA-key.pem). Утечка этого ключа позволит любому выпустить доверенные сертификаты для любых доменов на вашей машине.
  • Используйте Let’s Encrypt для продакшен-сред. Он бесплатный, автоматический и работает для публичных доменов.
  • Для внутренних сетей и корпоративных доменов используйте корпоративные CA (например, Active Directory Certificate Services).

Если попробовать применить mkcert в продакшене, вы получите:

  • Отсутствие автоматического продления сертификатов.
  • Проблемы с доверием для пользователей, не установивших ваш локальный CA.
  • Риск утечки приватного ключа CA.

Итог: mkcert как необходимое зло (которое перестаёт быть злом)

mkcert — не идеальный инструмент. Он требует ручного импорта для Firefox на Windows, не работает на мобильных устройствах без дополнительных шагов, и его нельзя использовать в продакшене. Но он решает реальную проблему: локальная разработка с HTTPS должна быть простой, а не набором костылей.

mkcert делает эту задачу тривиальной: одна команда на установку доверия, одна команда на генерацию сертификата, и зелёный замочек работает без предупреждений. Он не изобретает новые протоколы и не обходит систему безопасности — он использует существующую модель доверия так, как она и должна работать.

Установите mkcert, сгенерируйте сертификат — и забудьте про зелёные замочки, которые не хотят работать.

Read more

Как заражённый пакет elementary-data украл миллионы секретов через GitHub Actions

Как заражённый пакет elementary-data украл миллионы секретов через GitHub Actions

В апреле 2026 года злоумышленники воспользовались уязвимостью в CI/CD и автоматизированной публикацией, чтобы внедрить вредоносный код в пакет elementary-data. За три дня заражённая версия была скачана более миллиона раз, собрав SSH-ключи, токены облачных сервисов, конфигурации Kubernetes и криптов…

Starship: как промт превращается из украшения в инструмент DevOps

Starship: как промт превращается из украшения в инструмент DevOps

Starship позиционируется как минималистичный и быстрый промт, но на практике его сила — в модулях, которые предотвращают ошибки в Kubernetes, AWS и Git. Почему разработчики остаются за ним, несмотря на сложности настройки и задержки в больших репозиториях?

ИИ в Ubuntu 26.04: как Canonical балансирует между инновациями и традициями

ИИ в Ubuntu 26.04: как Canonical балансирует между инновациями и традициями

Canonical интегрирует ИИ в Ubuntu не как революцию, а как инструмент для автоматизации рутины и улучшения доступности. Но даже локальные модели и изолированные snaps вызывают вопросы: не станет ли система медленнее, а пользователи — менее контролирующими? Обзор анонсов 2026 года и реальных рисков д…

far2l против mc: что изменилось в консольных файловых менеджерах

far2l против mc: что изменилось в консольных файловых менеджерах

far2l перестал быть просто портом Far Manager для Linux и стал полноценной консольной средой с исправленным терминалом, плагинами для архивов и бинарников, а также встроенным запросом прав. Midnight Commander остаётся стабильным, но не закрывает давние пробелы в удобстве. Для кого из них пришло вре…