Установка https на localhost

Для того чтобы работал https на произвольном домене, который ссылается на 127.0.0.1 (или любой другой локальный ip-адрес), необходимо создать само-подписанный сертификат.

Сначала создаем файлы Certificate authority (CA). Вместо Example-Root-CA можно подставить свое название.

openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=US/CN=Example-Root-CA"
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt

Допустим мы хотим использовать домен project.local, для этого создаем файл domains.ext со следующим содержимым:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = project.local

Затем генерируем файлы для домена. US, YourState, YourCity, Example-Certificates можно заменить на свои данные.

openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=US/ST=YourState/L=YourCity/O=Example-Certificates/CN=localhost.local"
openssl x509 -req -sha256 -days 1024 -in localhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt

Затем добавляем сертификат в настройки веб-сервера. В nginx это будет выглядеть примерно так:

listen               443 ssl;
server_name          project.local;
ssl_certificate      /path/to/localhost.crt;
ssl_certificate_key  /path/to/localhost.key;

Теперь необходимо добавить наш CA в список доверенных. - В Windows 10 для Chrome, IE11 и Edge это можно сделать, нажав правой клавишей на файл RootCA.crt и выбрав "Установить". Сертификат необходимо добавить в "Trusted Root Certification Authorities". - В Firefox это можно сделать, включив на странице about:config опцию security.enterprise_roots.enabled. Либо перейдя на about:preferences#privacy импортировать RootCA.pem.

Нерешенные проблемы: нет возможности обращаться к произвольному локальному IP (например, 127.0.0.9) по https - необходимо обязательно использовать домен.