Подстановочный знак * .localhost SSL с Nginx и Chrome

Я попытался настроить подстановочный знак *. 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: 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;
    }
}
4
задан 25 October 2016 в 13:41
2 ответа

В конечном итоге ответ, похоже, таков: вы просто не можете создать сертификат для *. Localhost , который будет принимать Chrome.

Мое решение заключалось в том, чтобы вместо этого использовать *. Dev.localhost , что сработало.

4
ответ дан 3 December 2019 в 03:28

На самом деле это вполне возможно. То, чего нет, особенно хорошо задокументировано.

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

0
ответ дан 3 December 2019 в 03:28

Теги

Похожие вопросы