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
. В заметке
про dnsmasq
2 мы уже обсуждали создание локальных доменных зон.
Создадим под наш тест-драйв временную папку и начнём в генерации сертификата:
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
.