Apache: SSLCertificateKeyFile: файл не існує або порожній


33

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

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 дає помилкове повідомлення про помилку, і я хотів би точно визначити помилку.


Привіт, ви могли б позначити це питання як відповідь?

2
Я мушу зазначити, що я отримав це повідомлення про помилку від основної помилки запуску service apache2 restartзамість **sudo** service apache2 restart... Примітка до себе:sudo make me a sandwich fool
icc97

Наступна стаття я вважаю дуже корисною. Я не зміг налаштувати систему за допомогою цього потоку. digitalocean.com/community/tutorials/…
Лео Леопольд Герц 준영

Відповіді:


37

Я виявив помилку. Це було тому, що я використовую сценарій для установки сертифікатів, і один із кроків, які я виконую, - це apache2ctl configtest. Помилка виходила з цієї команди, а не від перезапуску apache, що саме мене вводило в оману. Оскільки я працював командою apache2ctl як звичайний користувач, вона не мала доступу до файлів ключів, і, отже, повідомлення про помилку.

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


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


це допомогло мені в серті, не генерованому на цьому сервері, але завантаженому з іншого джерела
tymik

2
sudo: restorecon: command not found
Франсіско Корралес Моралес

@FranciscoCorralesMorales restoreconє частиною policycoreutilsпакету. Також у вас, можливо, взагалі немає SELinux?
AntonioK

6

Я це зробив, і це допомогло мені на CentOS 5.7

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

1

Я отримав подібне повідомлення:

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

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.