Я попытался настроить подстановочный знак *.localhost
для HTTP и HTTPS с запросами проксирования Nginx на localhost:3000
. DNSmasq используется для разрешения *.localhost
к 127.0.0.1
.
Для HTTP все работает нормально, но при HTTPS-соединениях в Google Chrome появляется следующая ошибка:
There are issues with the site's certificate chain (net::ERR_CERT_COMMON_NAME_INVALID).
Сертификат представляет собой самозаверяющий сертификат, который я добавил в Chrome через настройки и был создан с помощью следующей команды:
openssl req -x509 -sha256 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -days 3650 -nodes
В Subject
как следует:
Subject: C=AU, ST=Western Australia, L=Perth, O=Zephon, CN=*.localhost
Моя конфигурация Nginx выглядит следующим образом:
server {
listen 80;
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/localhost.crt;
ssl_certificate_key /etc/nginx/ssl/localhost.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}
Итак, в конечном итоге ответ, похоже, заключается в том, что вы просто не можете создать сертификат для *.localhost
что Chrome примет.
Мое решение заключалось в том, чтобы перейти на использование *.dev.localhost
вместо этого, что сработало.
На самом деле это вполне возможно. То, чего нет, особенно хорошо задокументировано.
https://letsencrypt.org/docs/certificates-for-localhost/#making-and-trusting-your-own-certificates показывает, как сгенерировать собственный сертификат localhost
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
Затем вы можете решить, какие дополнительные возможности необходимы для подписания подстановочного сертификата. Я считаю, что это так же просто, как предоставить *.
префикс (синтаксис подстановочного знака glob) источник
Установка самозаверяющего сертификата задокументирована в другом месте на stackoverlow относительно Linux
Windows IDK, Mac IDC