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

Запустите Apache, несмотря на ошибку в файле сертификата SSL виртуального хоста

У меня Apache 2.4.10 с виртуальным хостингом на основе имен SSL (SNI). Виртуальные пользователи могут использовать свой собственный сертификат и загружать его на сервер.

Все работает нормально, пока не возникнет ошибка с файлом сертификата (т.е. файл отсутствует или имеет неправильное имя).

Проблема в том, что Apache не запускается, если есть проблема с сертификатом.

Есть ли какое-то решение, как запустить Apache с этой ошибкой (т.е. все vhosts запустятся, за исключением одного виртуального хоста с ошибкой)?

Это не работает:

<If "-f '/path/to/file.crt'">
    <VritualHost *:443>
        SSLEngine On
        SSLCertificateFile /path/to/file.crt
    </VirtualHost>
</If>

... и это тоже не работает:

<VirtualHost *:443>
    <If "-f '/path/to/file.crt'">
        SSLEngine On
        SSLCertificateFile /path/to/file.crt
    </If>
</VirtualHost>

Проблема заключается в синтаксической ошибке в конфигурации «SSLEngine не разрешен здесь» или «VirtualHost здесь не разрешен». Итак, моя конфигурация выше не разрешена Apache.

Большое спасибо.

Изменить: небольшая опечатка

Я бы сказал, это работает по замыслу. SSL-сертификаты - это средство безопасности. Почему вы допускаете использование сломанных сертификатов в своей системе, которые могут поставить под угрозу весь сервер?

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

Кроме того, apache поставляет средство проверки конфигурации.

$SERVER/bin/apachectl configtest

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

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

Например, если следующие два вывода MD5 совпадают, сертификат (как минимум) действителен (может быть самоподписанным, но все еще действителен):

openssl x509 –noout –modulus –in <file>.crt | openssl md5
openssl rsa –noout –modulus –in <file>.key | openssl md5