SSL недействителен для www.domain.com

Мой SSL-сертификат недействителен для www.domain.com, но работает для domain.com.

Как сделать его безопасным для www? У меня есть бесплатный SSL, который предоставляется при самостоятельной установке Discourse.

Не получится.

Let’s Encrypt тоже бесплатный, так что :man_shrugging:

Да, я знаю, что это бесплатно, но какой метод шифрования для www?

Поскольку я настроил перенаправление на domain.com, но при переходе через www появляется сообщение «Этот сайт небезопасен».

Потому что оно создано только для Apex, или вы обращаетесь к нему неправильно в том месте, где пытаетесь его завершить.

Discourse создаёт SSL-сертификат при установке. Он выдаётся через Let’s Encrypt. Поэтому, возможно, вам стоит обратиться в ту компанию, которая сейчас предоставляет вам этот сертификат.

Я не до конца понимаю, зачем вообще это нужно.

Потому что при посещении www.mysite.com появляется сообщение вроде «Этот сайт небезопасен, вы хотите продолжить?», после чего происходит перенаправление на SSL-версию (https). Я уточню в Let’s Encrypt, есть ли какие-либо решения.

Вам также нужно создать сертификат для www.

Если вы делаете это вручную, используйте команду вроде certbot certonly --nginx -d domain.com -d www.domain.com. По сути, для каждого поддомена требуется отдельный сертификат.

Не знаю, как обстоят дела сейчас, но wildcard-сертификат (один и тот же для корневого домена и всех поддоменов) не работал особенно хорошо при создании через Lets Encrypt.

Но ещё раз: вам не о чем беспокоиться, так как Discourse делает это за вас — если только ваши настройки DNS не ошибочны или по какой-то другой причине ваш форум недоступен.

Извините, я не совсем понимаю. DNS, кажется, работает нормально, это просто перенаправление URL.

www → https://domain.com
в этой части говорится:

www.domain.com не поддерживает защищённое соединение
Вы видите это предупреждение, потому что этот сайт не поддерживает HTTPS

Но при использовании domain.com всё в порядке.

Мне стоит попробовать certbot certonly --nginx -d domain.com -d www.domain.com?

Я не знаю, что вам стоит попробовать, я даже не знаю, что вы пытаетесь сделать, как и где.

Все, что я пытаюсь сказать:

  • вам нужны разные сертификаты для apex и www, иначе ваши сайты на веб-сервере настроены неправильно
  • вам не нужно ничего делать, потому что Discourse автоматически создает SSL-сертификат при настройке форума

По этой теме есть обсуждение:

Спасибо.

after_ssl:
   # скажите letsencrypt, какие дополнительные сертификаты нужно получить
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d site.com -d www.mysite.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d site.com -d www.mysite.com --fullchainpath"

Так что это должно направить www на mysite.com? Или наоборот?

Нет. Он выдает вам два сертификата: один для apex, другой для www.

Если ваше имя хоста — site.com, то всё верно. И, похоже, это так.

Обычно рекомендуется, чтобы ваш сайт находился по адресу www.site.com, а домен верхнего уровня перенаправлял на www. Я бы изменил имя хоста на www.site.com и поступил наоборот.

Мне кажется, что выдаётся один сертификат, действительный для обоих.

Здравствуйте, я поднимаю эту тему, так как думал, что исправил проблему вчера, но теперь при доступе к www.mysite.com всё ещё происходит перенаправление без SSL.

У корневой доменной зоны есть SSL, но у www — нет.

Хотя я применил это в моём файле app.yml в разделе hooks:

after_ssl:
   # сообщить letsencrypt, какие дополнительные сертификаты нужно получить
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d mysite.com -d www.mysite.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d mysite.com -d www.mysite.com --fullchainpath"

Вы следуете инструкциям по адресу Set up Let’s Encrypt with multiple domains / redirects?

Если вы вставите www.mysite.com в шаблон в первом сообщении, это сгенерирует следующее:

after_ssl:
   # укажите letsencrypt, какие дополнительные сертификаты нужно получить
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d www.mysite.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d www.mysite.com  --fullchainpath"
        global: true

Значит, вы делаете это неправильно.

А, значит, это не введено вручную.

  after_ssl:
   # сообщите letsencrypt, какие дополнительные сертификаты нужно получить
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d =domain2= --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d =domain2=  --fullchainpath"
        global: true  

Так что мне нужно сделать это, заменить domain2 на mysite.com, а затем пересобрать приложение?

Если вы введёте имя вашего домена в поле, оно автоматически заполнит =domain2= вашим доменом, чтобы вы могли скопировать/вставить этот блок.

Да.

Привет, только что попробовал это, к сожалению, результат тот же. Вот что я сделал, но с моим доменом.

Без пробелов, правильное форматирование.

  after_ssl:
   # сообщить letsencrypt, какие дополнительные сертификаты нужно получить
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d =mysite.com= --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d =mysite.com=  --fullchainpath"
        global: true  

Поскольку вы не решили эту проблему, я снял галочку с отметки «решено».

Если вы выполнили множество пересборок с другим блоком stanza, возможно, вы достигли лимита запросов.

Есть вероятность, что шаблон снова изменился, и это больше не работает, но я сомневаюсь в этом.

Решения проблемы с ограничением частоты запросов: подождать неделю или добавить третий поддомен.

Вы можете зайти внутрь контейнера и выполнить команду для запроса URL, чтобы увидеть, в чём ошибка, но я не помню, как она называется. Возможно, вы сможете увидеть ошибку, если посмотрите на

 docker logs app

А, я нашёл!

Не удалось выдать сертификат для \"=mysite.com=\": Доменное имя содержит недопустимый символ

Значит, нужно убрать =, потому что они были нужны для переменной?

Вы использовали форму на другой странице, как я предлагал, и ввели имя вашего хоста в пустое поле?