Может ли apache/nginx выбирать из множества сертификатов?
Есть сервис, назовем его service.com. Им, через cross-domain запросы пользуются сайты a.com, b.com, c.com, итд (пользователь напрямую на service.com не заходит), но javascript с a.com обращается к service.com.
С современными аддонами от отслеживаний куки, которые ставит service.com считаются third-party и иногда по умолчанию не принимаются - это проблема. Да, юзер может отключить аддоны для этого или настроить исключение, но это все равно неприятно.
Есть решение - a.com создает запись service.a.com которая указывает на service.com и обращается к ней. Со стороны сервиса теперь можно получить LetsEncrypt сертификат для service.a.com и обслуживать запросы. Теперь это уже first-party cookies, и они устанавливаются.
Теперь к самой технической проблеме: Есть вариант, для 100 сайтов (a.com, b.com, ...) сделать 100 виртхостов, и каждый будет использовать свой сертификат, виртхост для service.a.com будет использовать service.a.com.crt, например. Но это некрасиво.
Вопрос: А можно ли сделать как-то, чтоб вебсервер сам подбирал подходящий сертификат? То есть, сайт без виртхостов (один общий конфиг на service.a.com, service.b.com, ...), и у него прописано что-то вроде SSLCertificateDir /path/ , он оттуда подгребает 100 сертификатов, и при обращении к сайту отдает соответствующий хосту сертификат.
не выдумывайте велосипед, конфиги у вас генерит шаблонизатор, вот пусть этим и занимается.
у меня на серверах лежит по 500-600 сайтов и все они получают сертификаты и вот такой гениальной идеи мне в голову никогда не приходило.
И ниче норм все работает.
LE выпускает сертификаты для домена, ну на край для домена 3 уровня можно выдать * Но тут уже вопросы
но у вас домен 2 уровня меняется так что выпускайте сертификаты как нормальные люди для каждого домена.
Тем более все-равно в certbot у вас будут конфиги под каждый сайт
Вот смысл создавать себе проблему на пустом месте?
Если же сайт у вас открывается по любому домену а по $host на основе ЧПУ делает редирект на другой домен, то собственно и ключи тоже должен подставлять ЧПУ сайта.
не заюывайте что le будет раз скажем в 15 дней проверять доступность домена по урлу и тд и тп, в общем мало выдать сертификат так и данный домен должен проходить повторную выдачу.
подмену и прмменение сертификата
не забывайте что конфиги это не код вашего приложение и ООП и тому подобное тут не является "красиво"
Тут если 300 строк с одинкаовыми переменными это 300 строк с одинкаовыми переменными не мерьте конфиг по качеству кода приложения.
Чем больше знаю, тем лучше понимаю, как мало знаю.
В Nginx можно сделать default сервер (который catch-all), а начиная с версии 1.15.9 можно указывать переменные ($ssl_server_name) в пути к файлу сертификата.