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

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

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

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

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

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

Syntax error on line 39 of /etc/apache2/sites-enabled/500-portal-https:
SSLCertificateKeyFile: file '/etc/ssl/private/server.insecure.key' does not exist or is empty
Error in syntax. Not restarting.

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

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-данными: он запускается пользователем root, но иногда изменяется на www-data. точка, и я не уверен, когда читаются сертификаты.

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

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

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

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

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

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

SSLCertificateKeyFile: file '/path/to/file' does not exist or is empty

пока /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: file '/opt/bitnami/apache2/conf/DigiCertCA.crt\xe2\x80\x9d' does not exist or is empty

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

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

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

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

Просто заметил завивку 0710 и задаюсь вопросом, для чего ее можно использовать.

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

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

sudo apache2ctl configtest