Локальный https. Сертификаты для localhost

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

Установка

Варианты установки описаны в репозитории mkcert (https://github.com/FiloSottile/mkcert)

Вариант установки на Ubuntu

  1. Установка certutil
    sudo apt install libnss3-tools
  2. Сборка из репозитория (минимально — Go 1.13+)
    git clone https://github.com/FiloSottile/mkcert && cd mkcert
    go build -ldflags "-X main.Version=$(git describe --tags)"

Генерация сертификатов

mkcert -install

Ответ

Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊

Добавление сертификатов

mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
Created a new certificate valid for the following names 📜
 - "example.com"
 - "*.example.com"
 - "example.test"
 - "localhost"
 - "127.0.0.1"
 - "::1"

The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅

Сертификаты будут сгенерированы в папке запуска mkcert. В дальнейшем эти файлы будут использованы

Корневой сертификат

Расположение корневого сертификата: /home/user/.local/share/mkcert либо можно найти выполнив команду

mkcert -CAROOT

Включение сертификатов в Apache, Ngxinx

Apache

Включить модуль

a2enmod ssl
<VirtualHost *:443>
  ServerName example.com

  SSLCertificateFile      /path/to/certs/example.com+4.pem
  SSLCertificateKeyFile /path/to/certs/private/example.com+4-key.pem

  ...
</VirtualHost>

Примечание: в Apache сертификаты лучше ставить внутри проверки модуля сертификатов, например в файле default-ssl или внутри проверки модуля IfModule mod_ssl.c>

Включить сертификаты (может не понадобиться)

a2ensite default-ssl.conf

перезагрузить сервер

systemctl restart apache2

Nginx

Сертификаты лучше скопировать в папку сертификатов в nginx, либо указать путь до сертификатов

server {
    listen 80;
    listen 443 ssl;

    ssl on;
    ssl_certificate /path/to/certs/example.com+4.pem;
    ssl_certificate_key /path/to/certs/private/example.com+4-key.pem;

    server_name example.com;
    location / {
        root /var/www/html/example;
        index index.html;
    }
}

перезапустить сервер

systemctl restart nginx

Браузер

Перезагружаем браузер и теперь можно видеть https на ваших локальных доменных именах.

Примечание

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

Источники

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.