Рейтинг:0

Нужно ли включать ссылку на файл CA в мой блок конфигурации Apache vhost?

флаг dj

Я обновляю свой веб-сервер Apache и задаюсь вопросом, нужно ли мне вообще объявлять файл CA в конфигурации vhost?

Моя настройка виртуального хоста

SSLEngine включен
SSLCertificateFile /home/user/ssl/${SITE}-cert.pem
SSLCertificateKeyFile /home/user/ssl/${SITE}-key.pem
SSLCertificateChainFile /home/user/ssl/${SITE}-ca.pem
#SSLCACertificateFile /home/user/ssl/${SITE}-ca.pem

По умолчанию Apache поставляется только с SSLCertificateFile и SSLCertificateKeyFile активный. То же самое с пакетом Debian. Я понимаю и то, и другое.

По умолчанию оба SSLCertificateChainFile и SSLCACertificateFile отключены в исходном коде Apache и пакете Debian. Я думал, что понял это, но теперь не уверен.

Все мои сайты отлично работают с обоими Калифорния директивы отключены.

Но я что-то упускаю? Отключение их обоих приводит к тому, что мой сервер предоставляет ЦС за кулисами, например, из системного /etc/ssl/certs?

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

Разве эти две директивы CA не служат той же цели, что и Файл CA-bundle cURL, взятый из Mozilla? Могу я просто указать SSLCACertificateFile к этому на моем сервере и на этом закончим?

Насколько я понимаю, клиент заботится о проверке сертификата веб-сайта, используя собственный авторизованный ЦС. Я ошибся?

Документы, кажется, не предлагают никакого понимания:

SSLCertificateChainFile и SSLCACertificateFile

Рейтинг:2
флаг cn

Прежде всего, отправка промежуточной цепочки к корневому сертификату с ответом вашего сервера не всегда точно НУЖНЫЙ, но рекомендуется практика.

Многие клиенты в настоящее время хранят всевозможные промежуточные сертификаты в своих хранилищах доверенных сертификатов или получают их из хранилища доверенных сертификатов ОС. Однако, если вы собираетесь обслуживать ОБЩУЮ публику, вы не можете делать никаких предположений по этому поводу, и вам СЛЕДУЕТ отправить промежуточную цепочку с вашим ответом.

Если вы не отправите промежуточную цепочку, у вас останутся спорадические сообщения о том, что люди не могут подключиться к вашему сервису. И это может зависеть от их браузера, версии браузера и базовой ОС.

По иронии судьбы, выбор конкретной промежуточной цепочки и отправка ее с ответом может иногда прервать проверку SSL для некоторых клиентов, которые сами проверили бы ее из какой-либо сохраненной цепочки. Как и в случае с некоторыми старыми клиентами openssl на серверах и выдаваемых letsencrypt сертификатов, но можно предположить, что в таком случае поддержка тех серверов со временем разберется.

На самом деле вам не нужна директива ChainFile в Apache как таковая, потому что вы также можете конкатенировать файлы сертификатов pem от конечного сертификата к корню и использовать их только с директивой SSLCertificateFile.

Что вам не нужно делать, так это отправлять корневой сертификат. Потому что, если бы клиент действительно использовал это, это лишило бы практического использования проверки SSL.

SSLCACertificateFile необходим тогда и только тогда, когда вам нужно проверять сертификаты от клиентов, которые подключаются к вам, И вы не хотите использовать для этого базовое хранилище доверенных сертификатов. Таким образом, это на самом деле совершенно другое использование, чем SSLCertificateChainfile

Кроме того, если вы сомневаетесь, используйте отличные инструменты проверки Qualys SSL Labs: https://www.ssllabs.com/ssltest/

флаг in
Вопрос не в корневом сертификате, а в ЦС, используемом для сертификации клиентов. Это МОЖЕТ быть корневым ЦС сайта, но не обязательно.
Gerrit avatar
флаг cn
В ОП говорится о размещении «веб-сайтов», поэтому в данном случае имеет значение только «SSLCertificateChainfile».
Jeff avatar
флаг dj
*Если вы не отправите промежуточную цепочку, у вас останутся спорадические сообщения о том, что люди не могут подключиться к вашему сервису.* Это то, чего я хочу избежать. Если указание `SSLCACertificateFile` или `SSLCertificateChainFile` поможет предотвратить это, я добавлю соответствующую директиву. Если это не имеет значения, я не буду.
Gerrit avatar
флаг cn
Вы ДОЛЖНЫ отправить промежуточную цепочку. Не имеет значения, объединяете ли вы его с конечным сертификатом и отправляете в `SSLCertificateFile`, или вы сохраняете конечный сертификат и цепочку отдельно и отправляете цепочку в `SSLCertificateChainFile`. Как я объяснил, время от времени люди, работающие на старых серверах, фактически блокируют их, но с этим ничего не поделаешь.
Jeff avatar
флаг dj
Я нашел эти документы [LetsEncrypt](https://eff-certbot.readthedocs.io/en/stable/using.html#where-are-my-certificates), которые все проясняют. Еще раз спасибо.
Gerrit avatar
флаг cn
Да, на самом деле это LetsEncrypt, где промежуточная цепочка по умолчанию оптимизирована для максимальной совместимости с максимально возможным количеством клиентов, но в процессе нарушается совместимость с некоторым старым серверным программным обеспечением, если люди его не поддерживают. Это произошло после того, как срок действия старого рута истек.
A.B avatar
флаг cl
A.B
В целом я согласен с тем, что написал Геррит. Но чтобы придираться к конкретной конфигурации apache, та же конфигурация по умолчанию обычно говорит, что SSLCertificateChainfile может быть указан на один и тот же сертификат SSLCertificateFile, если он содержит конкатенацию сервера + промежуточных звеньев. На самом деле неопределение в таком случае работает так же (и логичнее). Эта функция (позволяющая *не* использовать SSLCertificateChainfile) доступна начиная с apache httpd 2.4.8: https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatechainfile
Рейтинг:1
флаг se

Файл ЦС необходим, если сертификаты должны быть проверены в отношении этого ЦС. В контексте SSL-сервера, такого как Apache, это необходимо для проверки сертификатов клиентов и проверки ответов OCSP в контексте сшивания OCSP. Если ничего из этого не требуется, то и файл CA указывать не нужно. Если что-либо из этого необходимо, но проверка должна выполняться с помощью системного ЦС по умолчанию, то файл ЦС также не требуется.

Jeff avatar
флаг dj
В контексте простого веб-сервера, обслуживающего https, обычно необходимо определение директив CA? Я понятия не имею, выполняю ли я сшивание OCSP, и не уверен, проверяю ли я сертификаты клиентов, когда обслуживаю свои https-страницы.
флаг in
Если вы не знаете, используете ли вы эти функции, очень высоки шансы, что вы этого не сделаете.
Jeff avatar
флаг dj
Думаю, теперь я понимаю. Большинство клиентов проверяют сервер с помощью своего ЦС, но большинство серверов, обслуживающих https, не проверяют клиента. Таким образом, мне не нужно указывать директиву `CA`, пока я не начну проверять своих клиентов. Звучит правильно?
Steffen Ullrich avatar
флаг se
@Jeff: Да, обычно клиентские сертификаты не используются. А сшивание OCSP (если оно вообще включено) можно проверить в системном ЦС.

Ответить или комментировать

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