Apache: SSLCertificateKeyFile: o arquivo não existe ou está vazio

33

Estou configurando o SSL para Apache 2. Meu sistema é Ubuntu Server 10.04 LTS. Eu tenho as seguintes configurações relacionadas ao SSL na minha configuração de vhost:

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

(Observação: estou usando .insecureo arquivo de chave porque o arquivo não é protegido por senha e gosto de ver claramente que é um arquivo de chave inseguro)

Então, quando eu reinicio o apache, recebo a seguinte mensagem:

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.

Mas o arquivo está lá e não está vazio (na verdade, ele contém uma chave 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/

Eu tentei mudar a propriedade, usando dois grupos www-data e ssl-cert. Não sei ao certo qual é o Ubuntu: por padrão, o Ubuntu usa ssl-cert, mas, por outro lado, os processos apache são executados com o usuário www-data: é iniciado pela raiz do usuário, mas muda para www-data em alguns casos. ponto, e não tenho certeza de quando os certificados são lidos.

Mas, enfim, mudar o proprietário do grupo não melhorou a situação. Minhas perguntas são:

  1. O que mais eu poderia tentar fazer com que isso funcionasse?
  2. Como posso verificar se meu arquivo de chave é um arquivo de chave válido?
  3. Como posso verificar se o arquivo de chave e o certificado ( /etc/ssl/certs/portal.selfsigned.crt) funcionam juntos?

Eu acho que o Apache está dando uma mensagem de erro enganosa, e eu gostaria de identificar o erro.

dangonfast
fonte
Olá, você pode marcar esta pergunta como respondida?
2
Devo salientar que recebi esta mensagem de erro do erro básico de execução em service apache2 restartvez de **sudo** service apache2 restart... note to self:sudo make me a sandwich fool
icc97 10/10/2014
Acho o seguinte artigo muito útil. Não consegui configurar o sistema por este segmento. digitalocean.com/community/tutorials/…
Léo Léopold Hertz #

Respostas:

37

Encontrei o erro. Foi porque eu estou usando um script para configurar os certificados e uma das etapas que estou executando é apache2ctl configtest. O erro veio deste comando, e não da reinicialização do apache, que foi o que estava me enganando. Como eu estava executando o comando apache2ctl como usuário normal, ele não tinha acesso aos arquivos de chave e, portanto, à mensagem de erro.

Facit: verifique se todos os seus comandos do apache são executados com o sudo, mesmo aqueles destinados apenas à verificação de sintaxe ( apache2ctl), pois eles também precisam acessar as chaves.

dangonfast
fonte
8

Eu também recebo a mensagem

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

enquanto /path/to/fileexistir e possuir permissões corretas, apenas por causa do SELinux ativado e este arquivo não estar acessível para o usuário apache.

Se parece com isso:

$ 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 corrigir isso, eu corro sudo restorecon -Rv /etc/pki/tls/certs/- ele irá reparar a propriedade SELinux para o arquivo do problema.

AntonioK
fonte
isso me ajudou durante certs não gerados no servidor, mas carregados de outra fonte
tymik
2
sudo: restorecon: command not found
Francisco Corrales Morales
@FranciscoCorralesMorales restoreconfaz parte do policycoreutilspacote. Além disso, você talvez não tenha o SELinux?
AntonioK
6

Eu fiz isso e isso me ajudou no CentOS 5.7

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

Recebi uma mensagem semelhante:

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

Meu problema foi que o editor de texto que eu estava usando colocou ascii "aspas corretas" 148 em vez de aspas normais ascii 34; usando um editor do tipo unix (por exemplo, TextWrangler) colocou a citação correta e resolveu o problema.

dkpruett
fonte
0

As permissões estão erradas, mas, de acordo com a sua resposta, não foi a causa do problema:

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

/ etc / ssl / private geralmente pertence ao grupo ssl-cert em sistemas baseados em debian.

Acabei de perceber as permissões 0710 e me pergunto para que pode ser usada.


fonte
Você provavelmente está certo, deve ser pelo menos 0750. Tenho tentado coisas diferentes, e o status que publiquei provavelmente não é o mais correto. Executar o apache2ctl como root certamente resolveu meus problemas.
dangonfast
1
0710 está bom, você precisa saber o nome do arquivo para acessá-lo.
ypnos 7/09/2015