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

33

Я настраиваю 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 вводит в заблуждение сообщение об ошибке, и я хотел бы точно определить ошибку.

dangonfast
источник
Здравствуйте, не могли бы вы пометить этот вопрос как ответ?
2
Я должен указать, что я получил это сообщение об ошибке из-за основной ошибки запуска service apache2 restartвместо **sudo** service apache2 restart... примечание к себе:sudo make me a sandwich fool
icc97
Я считаю следующую статью очень полезной. Я не мог настроить систему по этой теме. digitalocean.com/community/tutorials/…
Лео Леопольд Херц 준영

Ответы:

37

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

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

dangonfast
источник
8

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

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 для файла проблемы.

AntonioK
источник
это помогло мне для сертификатов, которые не были сгенерированы на этом сервере, но загружены из другого источника
tymik
2
sudo: restorecon: command not found
Франциско Корралес Моралес
@FranciscoCorralesMorales restoreconявляется частью policycoreutilsпакета. Кроме того, возможно, у вас вообще нет SELinux?
АнтониоК
6

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

server:~ # chcon -t cert_t /etc/pki/tls/private/my.key 
server:~ # ls -laZ /etc/pki/tls/private/
Radamanf
источник
1

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

SSLCertificateChainFile: file '/opt/bitnami/apache2/conf/DigiCertCA.crt\xe2\x80\x9d' does not exist or is empty

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

dkpruett
источник
0

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

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

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

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


источник
Вы, вероятно, правы, это должно быть как минимум 0750. Я пробовал разные вещи, и статус, который я разместил, вероятно, не самый правильный. Запуск apache2ctl от имени root наверняка решил мои проблемы.
dangonfast
1
0710 просто отлично, вам нужно знать имя файла, чтобы получить к нему доступ.
ypnos