Как Apache выбирает, какой сертификат использовать?

Как Apache выбирает, какой сертификат использовать?

В настоящее время Apache размещает несколько поддоменов с сертификатами хоста, сгенерированными с помощью certbot и http-запроса.

Теперь я хочу настроить виртуальный ssl-хост по умолчанию для перенаправления несуществующих поддоменов на основной. Для этого я сгенерирую wildcard-сертификат с DNS-вызовом.

Поскольку в настоящее время я не могу автоматизировать обновление с помощью DNS-запроса, я хочу использовать wildcard-сертификат только для хоста SSL по умолчанию в Apache.

У меня такой вопрос: когда происходит первое согласование между Apache и браузером, будет ли Apache сначала искать сертификат в конфигурации, соответствующей запрошенному хосту, или Apache будет каждый раз предоставлять подстановочный сертификат, настроенный на хосте SSL по умолчанию?

решение1

TheДокументация Apacheсодержит подробный раздел о том, какой VirtualHost выбирается для запроса. Цитата из раздела «Как сервер выбирает правильный виртуальный хост на основе имени»:

Важно понимать, что первым шагом в разрешении виртуального хоста на основе имени является разрешение на основе IP. Разрешение виртуального хоста на основе имени выбирает только наиболее подходящий виртуальный хост на основе имени после сужения кандидатов до наилучшего соответствия на основе IP. Использование подстановочного знака (*) для IP-адреса во всех директивах VirtualHost делает это сопоставление на основе IP нерелевантным.

При поступлении запроса сервер найдет наиболее подходящий (наиболее конкретный) аргумент <VirtualHost> на основе IP-адреса и порта, используемых в запросе.Если имеется более одного виртуального хоста, содержащего эту наиболее соответствующую комбинацию адреса и порта, Apache дополнительно сравнит директивы ServerName и ServerAlias ​​с именем сервера, указанным в запросе.

Если вы опустите директиву ServerName из любого виртуального хоста на основе имени, сервер по умолчанию будет использовать полное доменное имя (FQDN), полученное из системного имени хоста. Это неявно заданное имя сервера может привести к нелогичному сопоставлению виртуального хоста и не рекомендуется.

Вам следует создать выделенный Default VirtualHost. Каждый запрос к хосту, не указанному явно в другом блоке VirtualHost, будет направлен туда, поэтому вы можете выбрать, какой сертификат вы хотите использовать там.

решение2

Apache позволяет указать директиву SSLCertificateFile на уровне виртуального хоста. См.SSLCertificateFile, который говорит "Контекст: конфигурация сервера, виртуальный хост". Поэтому какой бы виртуальный хост он ни использовал для ответа на запрос — виртуальный хост по умолчанию или другой — он будет использовать сертификат, который вы настроите с помощью SSLCertificateFile на этом виртуальном хосте.

Надеюсь, я ответил на ваш вопрос?

Связанный контент