Назад | Перейти на главную страницу

Перенаправить все поддомены на основной домен с HTTPS без подстановочного сертификата (nginx)

У меня есть доменное имя с основным сайтом и несколькими хостами. Я хочу, чтобы все сайты (основной и vhosts) были доступны только через HTTPS (с использованием HSTS), и я хочу, чтобы несуществующие поддомены были перенаправлены на основной сайт.

Подводя итог тому, что я хочу:

Я очень близок к этому, но предпоследнее перенаправление не работает. Я использую сертификат от Давайте зашифровать, который на данный момент не предлагает сертификаты с подстановочными знаками, поэтому сертификат действителен только для основного домена и vhosts (которые я явно указал при создании сертификата). Поскольку сертификат недействителен, браузеры блокируют соединение.

Как лучше всего (если есть) обойти эту проблему?

Вот моя (упрощенная) конфигурация nginx, если это поможет:

server {
    listen 80;
    server_name _;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 spdy;
    server_name _;
    # SSL settings snipped for brevity. SPDY and HSTS are enabled.
    return 301 https://example.com$request_uri;
}

server {
    listen 443 spdy;
    server_name example.com;
    root /var/www/example.com;
    index index.html index.htm;
}

server {
    listen 443 spdy;
    server_name vhost.example.com;
    root /var/www/vhost.example.com;
    index index.html index.htm;
}

На практике проблему невозможно обойти без сертификата с подстановочными знаками. Если вы не можете предоставить сертификат, соответствующий запрошенному имени, вы получите ошибку подключения - это фундаментальная часть протокола.

Я предполагаю, что теоретически вы могли бы написать что-то такое, что, когда он получил заголовок SNI для имени, которого нет в сертификате, выполнил быструю выдачу сертификата от Let's Encrypt и отправил обратно этот новый сертификат в рукопожатии TLS, но. .. ну, это не совсем практичный решение, не так ли?