Apache: SSLCertificateKeyFile: file tidak ada atau kosong

33

Saya mengkonfigurasi SSL untuk Apache 2. Sistem saya adalah Ubuntu Server 10.04 LTS. Saya memiliki pengaturan berikut yang terkait dengan SSL di konfigurasi vhost saya:

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

(Catatan: Saya menggunakan .insecurefile kunci karena file tersebut tidak dilindungi frasa sandi, dan saya ingin melihat dengan jelas bahwa itu adalah file kunci tidak aman)

Jadi, ketika saya me-restart apache saya mendapatkan pesan berikut:

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.

Tetapi file itu ada di sana, dan tidak kosong (sebenarnya itu berisi kunci pribadi):

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/

Saya telah mencoba mengubah kepemilikan, menggunakan dua grup www-data dan ssl-cert. Saya tidak yakin mana yang benar di Ubuntu: secara default Ubuntu menggunakan ssl-cert, tetapi di sisi lain proses apache berjalan dengan data-pengguna www: dimulai oleh root pengguna, tetapi perubahan pada data-www di beberapa titik, dan saya tidak yakin kapan sertifikat dibaca.

Tapi bagaimanapun, mengubah pemilik grup belum memperbaiki situasi. Pertanyaan saya adalah:

  1. Apa lagi yang bisa saya coba agar ini berfungsi?
  2. Bagaimana saya bisa memverifikasi bahwa keyfile saya adalah keyfile yang valid?
  3. Bagaimana saya bisa memverifikasi bahwa file kunci dan sertifikat ( /etc/ssl/certs/portal.selfsigned.crt) bekerja bersama?

Saya pikir Apache memberikan pesan kesalahan yang menyesatkan, dan saya ingin menunjukkan kesalahannya.

dangonfast
sumber
Halo, dapatkah Anda menandai pertanyaan ini sebagai dijawab?
2
Saya harus menunjukkan bahwa saya mendapat pesan kesalahan ini dari kesalahan dasar menjalankan service apache2 restartalih-alih **sudo** service apache2 restart... note to self:sudo make me a sandwich fool
icc97
Saya menemukan artikel berikut ini sangat membantu. Saya tidak dapat mengatur sistem dengan utas ini. digitalocean.com/community/tutorials/…
Léo Léopold Hertz 준영

Jawaban:

37

Saya menemukan kesalahan. Itu karena saya menggunakan skrip untuk mengatur sertifikat, dan salah satu langkah yang saya lakukan adalah apache2ctl configtest. Kesalahan datang dari perintah ini, dan bukan dari apache restart, yang merupakan hal yang menyesatkan saya. Karena saya menjalankan perintah apache2ctl sebagai pengguna normal, itu tidak memiliki akses ke keyfiles, dan dengan demikian pesan kesalahan.

Facit: pastikan semua perintah apache Anda dijalankan dengan sudo, bahkan yang hanya ditujukan untuk verifikasi sintaks ( apache2ctl), karena mereka juga memerlukan akses ke kunci.

dangonfast
sumber
8

Saya juga menerima pesannya

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

sementara /path/to/fileada dan memiliki izin yang tepat, hanya karena SELinux dihidupkan dan file ini tidak dapat diakses untuk pengguna apache.

Ini terlihat seperti ini:

$ 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

Untuk memperbaiki ini, saya menjalankan sudo restorecon -Rv /etc/pki/tls/certs/- itu akan memperbaiki properti SELinux untuk file masalah.

AntonioK
sumber
itu membantu saya untuk sertifikat yang tidak dibuat di server itu tetapi diunggah dari sumber lain
tymik
2
sudo: restorecon: command not found
Francisco Corrales Morales
@FranciscoCorralesMorales restoreconadalah bagian dari policycoreutilspaket. Anda juga mungkin tidak memiliki SELinux sama sekali?
AntonioK
6

Saya sudah melakukan ini dan itu membantu saya di CentOS 5.7

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

Saya menerima pesan serupa:

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

Masalah saya adalah editor teks yang saya gunakan menempatkan "kutipan benar" ascii 148 bukannya kutipan ganda normal ascii 34; menggunakan editor unix-type (mis. TextWrangler) masukkan kutipan yang benar dan perbaiki masalahnya.

dkpruett
sumber
0

Izin salah, tetapi menurut jawaban Anda itu bukan penyebab masalah:

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

/ etc / ssl / private biasanya milik grup ssl-cert pada sistem berbasis debian.

Hanya melihat perm 0710 dan bertanya-tanya untuk apa itu digunakan.


sumber
Anda mungkin benar, setidaknya harus 0750. Saya telah mencoba hal-hal yang berbeda, dan status yang saya posting mungkin bukan yang paling benar. Menjalankan apache2ctl sebagai root sudah pasti memecahkan masalah saya.
dangonfast
1
0710 baik-baik saja, Anda perlu tahu nama file untuk mengaksesnya.
ypnos