Установка 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 - необходимо обязательно использовать домен.