mkcert
При разработке в локальном окружении многие пренебрегают имитацией https и запускают свои сервисы по http.
Задача состоит в следующем:
- Сервить траффик на локальной машине по
httpsс валидным сертификатом; - Сделать так, чтобы это легко воспроизводилось не только у вас, но и у всех членов вашей команды.
Наиболее простым и, возможно, самым известным решением является mkcert 1.
На macOS при установке через brew он потянет за собой go, что не очень приятно. Обо всём этом я уже писал в
заметке про asdf. Способ установки выберите самостоятельно, я же принял решение воспользоваться go install:
go install filippo.io/mkcert@latest
После установки выполните следующую команду:
mkcert -install
Будет сгенерирован корневой сертификат и создан локальный CA:
mkcert -install
Created a new local CA 💥
Sudo password:
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in Java's trust store! ☕️
Теперь внимание! Посмотрите на вот эти файлики:
ls "$(mkcert -CAROOT)"
Ими делиться ни с кем нельзя! Просто оставьте их там, где они есть и забудьте о них.
Давайте перейдём к созданию https-сервера. Пусть сервер будет работать на хосте demo.dmz. В заметке
про dnsmasq2 мы уже обсуждали создание локальных доменных зон.
Создадим под наш тест-драйв временную папку и начнём в генерации сертификата:
cd $(mktemp -d)
mkcert demo.dmz
Перейдём к созданию простейшего сервера на go, файла main.go нам будет достаточно, поэтому не стоит заморачиваться
на создание модуля:
package main
import (
"log"
"net/http"
)
func main() {
sslCertCrtPath, sslCertKeyPath := "demo.dmz.pem", "demo.dmz-key.pem"
log.Fatalln(
http.ListenAndServeTLS(
":443",
sslCertCrtPath,
sslCertKeyPath,
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("Hello, HTTPS!"))
}),
),
)
}
Запускаем:
go run main.go
И проверяем, как на это реагирует браузер:

Итог
- Локальный
httpsнастроен; - Установка и настройка
mkcertвыполняется элементарно — её легко воспроизвести на машинах других разработчиков; - Для собственной же безопасности не публикуйте ничего, что сгенерировал
mkcert.