Apache: SSLCertificateKeyFile: plik nie istnieje lub jest pusty

33

Konfiguruję protokół SSL Apache 2. Mój system to Ubuntu Server 10.04 LTS. Mam następujące ustawienia związane z SSL w mojej konfiguracji vhost:

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

(Uwaga dodatkowa: używam .insecurepliku klucza, ponieważ plik nie jest chroniony hasłem i chcę wyraźnie zobaczyć, że jest to plik klucza niebezpieczny)

Po ponownym uruchomieniu Apache pojawia się następujący komunikat:

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.

Ale plik istnieje i nie jest pusty (w rzeczywistości zawiera klucz prywatny):

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/

Próbowałem zmienić właściciela, używając dwóch grup www-data i ssl-cert. Nie jestem pewien, który z nich jest właściwy w Ubuntu: domyślnie Ubuntu używa ssl-cert, ale z drugiej strony procesy apache działają z danymi użytkownika www: uruchamiane są przez użytkownika root, ale w niektórych przypadkach zmiany na dane www punkt i nie jestem pewien, kiedy czytane są certyfikaty.

W każdym razie zmiana właściciela grupy nie poprawiła sytuacji. Moje pytania to:

  1. Co jeszcze mogę spróbować, aby to działało?
  2. Jak mogę sprawdzić, czy mój plik klucza jest prawidłowy?
  3. Jak mogę sprawdzić, czy plik klucza i certyfikat ( /etc/ssl/certs/portal.selfsigned.crt) działają razem?

Myślę, że Apache podaje mylący komunikat o błędzie i chciałbym wskazać błąd.

Dangonfast
źródło
Witaj, czy możesz oznaczyć to pytanie jako udzielone?
2
Powinienem zaznaczyć, że otrzymałem ten komunikat o błędzie z powodu podstawowego błędu uruchamiania service apache2 restartzamiast **sudo** service apache2 restart... Uwaga do siebie:sudo make me a sandwich fool
icc97
Uważam, że następujący artykuł jest bardzo pomocny. Nie mogłem skonfigurować systemu za pomocą tego wątku. digitalocean.com/community/tutorials/...
Léo Léopold Hertz

Odpowiedzi:

37

Znalazłem błąd. Stało się tak, ponieważ używam skryptu do konfigurowania certyfikatów, a jednym z kroków, które wykonuję, jest apache2ctl configtest. Błąd pochodził z tego polecenia, a nie od ponownego uruchomienia apache, co mnie wprowadzało w błąd. Ponieważ uruchomiłem polecenie apache2ctl jako zwykły użytkownik, nie miał on dostępu do plików kluczy, a zatem do komunikatu o błędzie.

Facit: upewnij się, że wszystkie twoje polecenia apache są uruchamiane z sudo, nawet te, które są przeznaczone tylko do weryfikacji składni ( apache2ctl), ponieważ one także potrzebują dostępu do kluczy.

Dangonfast
źródło
8

Dostaję też wiadomość

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

podczas gdy /path/to/fileistnieją i mają odpowiednie uprawnienia, tylko z powodu włączenia SELinux i ten plik był niedostępny dla użytkownika apache.

To wygląda tak:

$ 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

Aby to naprawić, uruchamiam sudo restorecon -Rv /etc/pki/tls/certs/- spowoduje to naprawienie właściwości SELinux dla pliku problemu.

AntonioK
źródło
pomogło mi to dla certyfikatów, które nie zostały wygenerowane na tym serwerze, ale zostały przesłane z innego źródła
tymik
2
sudo: restorecon: command not found
Francisco Corrales Morales,
@FranciscoCorralesMorales restoreconjest częścią policycoreutilspakietu. Może w ogóle nie masz SELinux?
AntonioK
6

Zrobiłem to i pomogło mi to w CentOS 5.7

server:~ # chcon -t cert_t /etc/pki/tls/private/my.key 
server:~ # ls -laZ /etc/pki/tls/private/
Radamanf
źródło
1

Otrzymałem podobną wiadomość:

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

Mój problem polegał na tym, że edytor tekstu, z którego korzystałem, umieścił ascii 148 „prawidłowy cytat” zamiast zwykłego podwójnego cytatu ascii 34; za pomocą edytora uniksowego (np. TextWrangler) wstaw prawidłowy cytat i naprawiłem problem.

dkpruett
źródło
0

Uprawnienia są nieprawidłowe, ale zgodnie z odpowiedzią nie była to przyczyna problemu:

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

/ etc / ssl / private zwykle należy do grupy ssl-cert w systemach opartych na Debianie.

Właśnie zauważyłem perms 0710 i zastanawiam się, do czego można go użyć.


źródło
Prawdopodobnie masz rację, powinno to być co najmniej 0750. Próbowałem różnych rzeczy, a status, który opublikowałem, prawdopodobnie nie jest najbardziej poprawny. Uruchamianie apache2ctl jako root z pewnością rozwiązało moje problemy.
dangonfast,
1
0710 jest w porządku, musisz znać nazwę pliku, aby uzyskać do niego dostęp.
ypnos