Apache: SSLCertificateKeyFile: el archivo no existe o está vacío

33

Estoy configurando SSL para Apache 2. Mi sistema es Ubuntu Server 10.04 LTS. Tengo las siguientes configuraciones relacionadas con SSL en mi configuración de vhost:

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

(Nota al margen: estoy usando .insecureel archivo de clave porque el archivo no está protegido con frase de contraseña, y me gusta ver claramente que es un archivo de clave inseguro)

Entonces, cuando reinicio apache me sale el siguiente mensaje:

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.

Pero el archivo está allí y no está vacío (en realidad contiene una clave privada):

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/

He intentado cambiar la propiedad, utilizando dos grupos www-data y ssl-cert. No estoy seguro de cuál es el correcto en Ubuntu: de forma predeterminada, Ubuntu usa ssl-cert, pero por otro lado, los procesos de apache se ejecutan con el usuario www-data: lo inicia el usuario root, pero en algunos casos cambia a www-data punto, y no estoy seguro de cuándo se leen los certificados.

Pero de todos modos, cambiar el propietario del grupo no ha mejorado la situación. Mis preguntas son:

  1. ¿Qué más podría intentar hacer que esto funcione?
  2. ¿Cómo puedo verificar que mi archivo de claves es un archivo de claves válido?
  3. ¿Cómo puedo verificar que el archivo de claves y el certificado ( /etc/ssl/certs/portal.selfsigned.crt) funcionen juntos?

Creo que Apache está dando un mensaje de error engañoso, y me gustaría señalar el error.

dangonfast
fuente
Hola, ¿podrías marcar esta pregunta como respondida?
2
Debo señalar que recibí este mensaje de error del error básico de ejecución en service apache2 restartlugar de **sudo** service apache2 restart... nota para sudo make me a sandwich fool
El siguiente artículo me parece muy útil. No pude configurar el sistema con este hilo. digitalocean.com/community/tutorials/…
Léo Léopold Hertz 준영

Respuestas:

37

Encontré el error. Fue porque estoy usando un script para configurar los certificados, y uno de los pasos que estoy realizando es apache2ctl configtest. El error provenía de este comando, y no del reinicio de Apache, que era lo que me estaba engañando. Como estaba ejecutando el comando apache2ctl como usuario normal, no tenía acceso a los archivos de claves y, por lo tanto, al mensaje de error.

Facit: asegúrese de que todos sus comandos de apache se ejecuten con sudo, incluso los que solo están destinados a la verificación de sintaxis ( apache2ctl), ya que también necesitan acceso a las claves.

dangonfast
fuente
8

También recibo el mensaje

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

mientras /path/to/fileexistan y tengan los permisos correctos, solo porque SELinux está activado y este archivo no era accesible para el usuario de apache.

Se parece a esto:

$ 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

Para solucionar esto, ejecuto sudo restorecon -Rv /etc/pki/tls/certs/: reparará la propiedad SELinux para el archivo del problema.

AntonioK
fuente
me ayudó durante los CERT no generados en ese servidor, pero cargados desde otra fuente
tymik
2
sudo: restorecon: command not found
Francisco Corrales Morales
@FranciscoCorralesMorales restorecones parte del policycoreutilspaquete. ¿También quizás no tengas SELinux?
AntonioK
6

He hecho esto y me ayudó en CentOS 5.7

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

Recibí un mensaje similar:

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

Mi problema era que el editor de texto que estaba usando colocaba una "comilla correcta" ascii 148 en lugar de una comilla doble normal ascii 34; utilizando un editor de tipo unix (por ejemplo, TextWrangler), ponga la cita correcta y solucionó el problema.

dkpruett
fuente
0

Los permisos son incorrectos, pero según su respuesta no fue la causa del problema:

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

/ etc / ssl / private generalmente pertenece al grupo ssl-cert en sistemas basados ​​en debian.

Acabo de notar las permanentes 0710 y me pregunto para qué se puede usar.


fuente
Probablemente tenga razón, debería ser al menos 0750. He estado probando cosas diferentes, y el estado que publiqué probablemente no sea el más correcto. Ejecutar apache2ctl como root ha resuelto mis problemas.
dangonfast
1
0710 está bien, necesita saber el nombre del archivo para acceder a él.
ypnos