Apache: SSLCertificateKeyFile: файл не существует или пустой

Вопрос или проблема

Я настраиваю SSL для Apache 2. Моя система – Ubuntu Server 10.04 LTS. У меня есть следующие настройки, связанные с SSL, в конфигурации виртуального хоста:

SSLEngine On
SSLCertificateKeyFile /etc/ssl/private/server.insecure.key
SSLCertificateFile    /etc/ssl/certs/portal.selfsigned.crt

(Примечание: я использую .insecure для файла ключа, потому что файл не защищен паролем, и мне нравится четко видеть, что это небезопасный файл ключа)

Итак, когда я перезапускаю apache, я получаю следующее сообщение:

Ошибка синтаксиса на строке 39 файла /etc/apache2/sites-enabled/500-portal-https:
SSLCertificateKeyFile: файл '/etc/ssl/private/server.insecure.key' не существует или пуст
Ошибка в синтаксисе. Перезапуск не выполнен.

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

sudo ls -l /etc/ssl/private/server.insecure.key
-rw-r----- 1 root www-data 887 2012-08-07 15:14 /etc/ssl/private/server.insecure.key
sudo ls -ld /etc/ssl/private/
drwx--x--- 2 root www-data 4096 2012-08-07 13:02 /etc/ssl/private/

Я пытался изменить владельца, используя две группы www-data и ssl-cert. Я не уверен, какая из них правильная в Ubuntu: по умолчанию Ubuntu использует ssl-cert, но с другой стороны процессы apache работают под пользователем www-data: он запускается от имени пользователя root, но переходит на www-data в какой-то момент, и я не уверен, когда читаются сертификаты.

Но в любом случае, изменение группы владельца не улучшило ситуацию. Мои вопросы:

  1. Что еще я мог бы попробовать, чтобы это заработало?
  2. Как я могу проверить, что мой файл ключа действителен?
  3. Как я могу проверить, что файл ключа и сертификат (/etc/ssl/certs/portal.selfsigned.crt) работают вместе?

Я думаю, что Apache выдает вводящее в заблуждение сообщение об ошибке, и я хотел бы уточнить ошибку.

Я нашел ошибку. Это произошло потому, что я использую скрипт для настройки сертификатов, и одним из шагов, которые я выполняю, является apache2ctl configtest. Ошибка пришла от этой команды, а не от перезапуска apache, что вводило меня в заблуждение. Поскольку я запускал команду apache2ctl от обычного пользователя, у него не было доступа к файлам ключей, и, следовательно, соответствующее сообщение об ошибке.

Итак, убедитесь, что все ваши команды apache выполняются с помощью sudo, даже те, которые предназначены только для проверки синтаксиса (apache2ctl), поскольку они также нуждаются в доступе к ключам.

Я также получаю сообщение

SSLCertificateKeyFile: файл '/path/to/file' не существует или пуст

в то время как /path/to/file существует и имеет права, просто потому что SELinux включен, и этот файл был недоступен для пользователя apache.

Это выглядит так:

$ sudo ls -laZ /etc/pki/tls/certs/
drwxr-xr-x. root root system_u:object_r:cert_t:s0      .
drwxr-xr-x. root root system_u:object_r:cert_t:s0      ..
-rw-------. root root unconfined_u:object_r:cert_t:s0  this-one-works.crt
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 this-one-is-unaccessable.crt

Чтобы исправить это, я выполняю sudo restorecon -Rv /etc/pki/tls/certs/ – это восстановит свойства SELinux для проблемного файла.

Я сделал это, и это помогло мне на CentOS 5.7

server:~ # chcon -t cert_t /etc/pki/tls/private/my.key 
server:~ # ls -laZ /etc/pki/tls/private/

Я получил подобное сообщение:

SSLCertificateChainFile: файл '/opt/bitnami/apache2/conf/DigiCertCA.crt\xe2\x80\x9d' не существует или пуст

Моя проблема заключалась в том, что текстовый редактор, который я использовал, поставил “правую кавычку” ascii 148 вместо нормальной двойной кавычки ascii 34; использование редактора типа unix (например, TextWrangler) вставило правильную кавычку и исправило проблему.

Нет разрешения для обычных пользователей в директории /etc/ssl/private.

Пожалуйста, попробуйте

sudo apache2ctl configtest

Разрешения неверные, но согласно вашему ответу, это не было причиной проблемы :

drwx--x--- 2 root www-data 4096 2012-08-07 13:02 /etc/ssl/private/

/etc/ssl/private обычно принадлежит группе ssl-cert на системах, основанных на debian.

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

Я тоже, я получил это сообщение об ошибке, когда проверял синтаксис httpd :

SSLCertificateFile: файл ‘C:/wamp64/bin/apache/apache2.4.46/conf/key/certificate.crt\xe2\x80\x9c’ не существует или пуст

Моя проблема заключалась в “двойной кавычке”, которую я вставил. Поэтому я удалил ее и напечатал, затем все заработало нормально.

Похоже, что это может произойти, если ваш файл ключа содержит лишние данные перед строкой -----BEGIN PRIVATE KEY-----.

Я пытался перезапустить apache с помощью apachectl restart и получил эту ошибку – использование sudo исправило это.

Ответ или решение

Ошибка Apache: SSLCertificateKeyFile: файл не существует или пуст

При настройке SSL для Apache 2 на Ubuntu Server 10.04 LTS может возникнуть следующая ошибка:

SSLCertificateKeyFile: file '/etc/ssl/private/server.insecure.key' does not exist or is empty

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

Причины возникновения ошибки

  1. Проблемы с правами доступа: Папка /etc/ssl/private имеет строгие права доступа (drwx--x---). Это означает, что только пользователь root может просматривать содержимое, а группа www-data, под которой работает Apache, не имеет прав на чтение файлов. Необходимо убедиться, что ключи доступны веб-серверу.

  2. Доступ в конфигурации Apache: Все команды, связанные с проверкой конфигурации Apache, такие как apache2ctl configtest, требуют прав пользователя root для доступа к закрытым файлам характеристик безопасности, включая ключи SSL.

  3. SELinux (если используется): В некоторых системах, таких как CentOS, SELinux может блокировать доступ Apache к файлам, несмотря на правильные права. Проверка контекста безопасности и его корректировка с помощью restorecon может быть необходимой.

  4. Ошибки в конфигурации файла: Ошибка может происходить также из-за проблем, связанных с неправильными символами или пробелами в конфигурационных файлах. Например, неправильно скопированные и вставленные кавычки могут привести к ошибкам.

Как исправить ошибку

  1. Проверьте права доступа: Убедитесь, что Apache (пользователь www-data) имеет доступ к файлам ключа и сертификата. Вы можете изменить права следующим образом:

    sudo chmod 640 /etc/ssl/private/server.insecure.key
    sudo chown root:www-data /etc/ssl/private/server.insecure.key

    Это позволит группе www-data иметь доступ к файлу ключа.

  2. Проверка конфигурации Apache: Используйте команду с sudo для проверки конфигурации:

    sudo apache2ctl configtest

    Это гарантирует, что команда будет выполнена с правами суперпользователя, что позволит Apache получить доступ ко всем необходимым файлам.

  3. Проверка файлов на корректность: Можно использовать OpenSSL для проверки корректности файла ключа:

    openssl rsa -check -in /etc/ssl/private/server.insecure.key
    openssl x509 -in /etc/ssl/certs/portal.selfsigned.crt -text -noout

    Это даст уверенность в том, что оба файла действительны и правильно сформированы.

  4. Совпадение сертификата и ключа: Убедитесь, что сертификат и ключ соответствуют друг другу, выполнив команду:

    openssl x509 -noout -modulus -in /etc/ssl/certs/portal.selfsigned.crt | openssl sha1
    openssl rsa -noout -modulus -in /etc/ssl/private/server.insecure.key | openssl sha1

    Если хеши совпадают, сертификат и ключ связаны правильно.

Заключение

Настройка SSL может быть сложной задачей, но понимание структур и правильной конфигурации значительно упрощает процесс. Обязательно проверяйте права доступа к файловой системе, используйте привилегии суперпользователя при выполнении команд, а также убедитесь в корректности самих файлов. Если же вы столкнулись с проблемами SELinux, следуйте рекомендациям по корректировке контекста безопасности.

В случае возникновения продолжительных проблем рекомендуется просмотреть журналы Apache для получения дополнительной информации:

sudo tail -f /var/log/apache2/error.log

Это поможет вам решить возможные затруднения, которые могут возникнуть в будущем.

Оцените материал
Добавить комментарий

Капча загружается...