Erro SSL do Apache: chave privada não encontrada

8

Estou executando o apache no Ubuntu 14.04 e tentando implementar o SSL. Qualquer ajuda seria muito apreciada.

O default-ssl.conf possui:

SSLCertificateFile      /etc/apache2/ssl/domain.crt 
SSLCertificateKeyFile   /etc/apache2/ssl/domain.csr

Quando eu reinicio o apache, a mensagem de erro em /var/log/apache2/error.log é:

[Sun Feb 01 19:31:06.443226 2015] [ssl:error] [pid 30927] AH02203: Init: Private key not found
[Sun Feb 01 19:31:06.443408 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 01 19:31:06.443424 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 er$
[Sun Feb 01 19:31:06.443435 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 01 19:31:06.443447 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Ty$
[Sun Feb 01 19:31:06.443458 2015] [ssl:error] [pid 30927] SSL Library Error: error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib
[Sun Feb 01 19:31:06.443468 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Feb 01 19:31:06.443479 2015] [ssl:error] [pid 30927] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Ty$
[Sun Feb 01 19:31:06.443487 2015] [ssl:emerg] [pid 30927] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/apache2/error.log for more inf$
mikesynan
fonte
como você resolveu esse problema?
Srinivas

Respostas:

6

AVISO: Nunca publique sua chave privada na Internet. Nem copie para outro computador, estação de trabalho, etc. Ele deve ser mantido o mais privado possível.

SSLCertificateKeyFile requer uma chave privada. Essa chave geralmente é gerada antes do CSR ou ao mesmo tempo. Procure um arquivo que comece com uma linha que contém:BEGIN PRIVATE KEY

O CSR (pedido de assinatura de certificado) é necessário apenas quando você solicita a assinatura do certificado. Depois disso, você pode descartá-lo.

Se você perdeu a Chave Privada, precisará gerar uma nova Chave Privada, gere um novo CSR e peça à CA (autoridade de certificação) para assinar o CSR novamente.

Mircea Vutcovici
fonte
1

Aqui está o problema:

SSLCertificateKeyFile   /etc/apache2/ssl/domain.csr

Você coloca seu arquivo de solicitação de assinatura de certificado (CSR) aqui por engano. Você deve colocar lá o arquivo de chave privada usado para gerar o CSR. Esse arquivo de chave privada não deve ser protegido por senha; caso contrário, você precisará digitar uma senha toda vez que (re) iniciar o Apache.

Para o benefício de gerações vindouras, aqui está um breve resumo de como gerar CSR-s com OpenSSL (um bom tutorial está disponível na documentação do Ubuntu ):

1) Gere a chave do servidor:

openssl genrsa -des3 -out server.key 2048

Isso requer que você especifique uma senha.

2) Criando uma chave privada sem senha, digite a senha usada acima quando solicitado:

openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.SECURE
mv server.key.insecure server.key

3) Gere o CSR com sua chave privada sem senha:

openssl req -new -key server.key -out mydomain.org.csr

onde "mydomain.org" pode ser seu domínio. Você tem que responder algumas perguntas interativamente. Quando terminar, envie o mydomain.org.csrarquivo para sua autoridade de certificação. Você receberá um *.crtarquivo ou um *.pemarquivo. Vamos supor que eles te deram mydomain.org.crt. Instale-o como seu certificado e o arquivo de chave sem senha como sua chave (os locais são válidos para o Ubuntu 14.04, eles podem estar em outro lugar em outros sistemas, consulte os documentos do Apache2):

sudo cp mydomain.org.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private/mydomain.org.key

E finalmente edite a configuração do Apache2 (poderia ser default-ssl.conf):

    SSLEngine on
    SSLCertificateFile      /etc/ssl/certs/mydomain.org.crt
    SSLCertificateKeyFile   /etc/ssl/private/mydomain.org.key

Espero que isto ajude.

Laringe Decidua
fonte
1

Sei que alguém já respondeu a essa pergunta, mas queria que outras pessoas soubessem o que aconteceu comigo quando recebi esse erro.

Na minha causa, por engano, tive SSLCertificateFile em vez de SSLCertificateChainFile para meu pacote configurável. Esse erro continuava aparecendo e estava me dando um loop. Fiquei pensando que minha chave privada estava errada.

user1283449
fonte
0

Eu sei que este post é antigo, mas achei que eu deveria adicionar mais, já que este é o primeiro link em uma pesquisa no Google sobre o erro - "Init: chave privada não encontrada"

Eu já vi isso acontecer antes e acabou sendo uma chave privada ruim. Usei o strace para rastrear a última chave privada que o apache tentou carregar. Depois que eu o removi do diretório ssl e do httpd.conf, o Apache foi reiniciado sem problemas.

Chave SSL inválida: -rw-r ----- 1 raiz 754974732 1,7K 31 de maio de 1987 /var/cpanel/ssl/installed/keys/c129e_4ed23_b7c0d7f821952179fc8006506ab06b72.key

Comando usado para rastrear a chave incorreta: strace -f -v -s 1024 -o strace.log service httpd start

Ambiente: SO: CentSO 6.9 Painel de controle: cPanel 11.64 Apache versão 2.2

tl;dr: Find the bad private key that Apache is trying to load and backup it up and remove it from Apache's configuration file.

Eu espero que isso ajude!

m33k
fonte
Bem-vindo à falha do servidor. Sua postagem pode usar formatação aprimorada. A chave SSL inválida: ... parágrafo talvez seja uma citação? Além disso, seu TL; DR não precisa ser formatado como code. Obrigado por contribuir.
Eu digo Reinstate Monica
0

Eu estava girando minhas rodas nessa por um tempo, mas verifique se você tem um arquivo de chave privada completo. Acontece que eu tinha algumas linhas faltando nas minhas.

O comando para verificar sua chave privada é:

openssl rsa -in /etc/httpd/certs/server.key -check

substitua /etc/httpd/certs/server.key pelo caminho completo para a chave privada do seu servidor e, se estiver tudo bem, você verá:

RSA key ok

Espero que ajude alguém e btw, meu servidor foi o CentOS 7.6 com Apache / 2.4.6

jbrahy
fonte