A inicialização do Nginx falha no ssl nesse arquivo ou diretório

14

Aqui está o erro que estou recebendo:

Falha ao recarregar a configuração do nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / to / cert.pem") falhou (SSL: erro: 02001002: biblioteca do sistema: fopen: nenhum erro de arquivo ou diretório: 20074002: rotinas BIO: FILE_CTRL: system erro de lib: 140DC002: rotinas SSL: SSL_CTX_use_certificate_chain_file: lib do sistema) nginx: arquivo de configuração /etc/nginx/nginx.conf falhou

Tenho 100% de certeza de que o arquivo está nesse local, mas o Nginx parece pensar que não está lá. Mesclei o domain.crte intermediate.crtmanualmente nessa ordem. Eu estive coçando minha cabeça sobre isso o dia todo. Espero que alguém tenha visto esse erro e tenha uma solução. (E uma nota lateral não é um erro ao colar que o local do arquivo é mostrado apenas uma vez e não novamente depois de 'nenhum arquivo ou diretório').

tgoza
fonte
3
path/to/cert.pemcertamente não é um local válido.
Michael Hampton
Você está certo ao assumir que esse não é o caminho real. No entanto, eu poderia facilmente fazer disso uma parte válida do local. De qualquer forma, não posso fornecer detalhes específicos por causa da empresa para a qual isso está sendo feito. Eu tenho que deixar de fora o nome de usuário.
tgoza 9/09/13

Respostas:

15

Você tem certeza de que o usuário Nginx tem acesso ao diretório?

Verifique também as permissões do .pemarquivo, se o Nginx não puder acessá-lo, ele poderá aparecer como 'no such file or directory'.

Se as permissões estiverem corretas, você poderá verificar o caminho real novamente. Como você colou (que eu sei que você removeu o diretório) não há um começo /que possa ser o problema.

EDITAR

Tente mover sua configuração de SSL para a seguinte estrutura (bem como altere nginx.confpara refletir):

sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl

O Nginx pode estar falhando no seu computador .pemporque as permissões são muito abertas (é necessário fonte para verificar se o Nginx faz isso), mas a configuração acima deve funcionar bem.

Jim W.
fonte
Eu verifiquei o caminho duas vezes e ele contém o /no início, então mudei a pergunta para refletir isso. O arquivo está localizado em /home/user/subdirse todas as permissões de arquivo e diretório são de propriedade de user.www-data (nome de usuário. nome do grupo) e conjunto 775. E acho que o nginx tem acesso a qualquer coisa de propriedade da www-data, embora eu possa estar enganado.
tgoza 9/09/13
Sempre os erros simples que levam uma eternidade para descobrir :) Fico feliz que você tenha resolvido.
Jim W.
como era exatamente? Eu tenho o meu, $root/keys/então minha linha de certificados parece ssl_certificate keys/cert.pem... eles precisam estar na raiz da web?
estrela brilhante
Usar caminhos absolutos fez o truque.
estrela brilhante
Eu estava usando um docker-container e estava atingindo esse problema toda vez que recriava o container. acrescentando chmod -R 600 /etc/nginx/sslna minha entrypoint resolver a questão graças
Dimitri Kopriwa
3

Deixarei minha resposta para o meu problema, caso alguém se depare com esse tópico.

Eu tenho o nginx executado no contêiner do docker e tenho o mesmo erro ao tentar acessar o arquivo de chave privada. Depois de coçar a cabeça por várias horas, chego à conclusão de que o nginx do docker não possui o volume de montagem que contém meus dados.

A única opção para adicionar volume de montagem é remover e recriar o contêiner com a -vopção: https://docs.docker.com/engine/tutorials/dockervolumes/

docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx

Às vezes, coisas triviais são difíceis de ver. Espero que esta ajuda.

Bizi
fonte
2

Um cenário possível:

às vezes pode acontecer que, ao configurar arquivos SSL (chave privada e certificado) para o Virtualhost que está sendo configurado, tenha sido esquecido de especificar o caminho absoluto em que esses arquivos residem.

Por exemplo, se você seguir este documento oficial do Nginx: http://nginx.org/en/docs/http/configuring_https_servers.html

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     tdmssl.crt;
    ssl_certificate_key tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

Suponha que você armazene os arquivos SSL dentro de " /etc/nginx/conf.d ":

root@ilg40:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
root@ilg40:/etc/nginx/conf.d# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 24 17:39 ./
drwxr-xr-x 5 root root 4096 Jan 24 21:15 ../
-rw-r--r-- 1 root root 1359 Jan 24 17:39 tdmssl.crt
-rw-r--r-- 1 root root 1675 Jan 24 17:39 tdmssl.key

O que acontece?

Por padrão, quando não especificado o caminho absoluto para um arquivo comum usado pelo Nginx, o Nginx pesquisará os arquivos em "/ etc / nginx"

Em /var/log/nginx/error.log

2017/01/24 21:05:10 [emerg] 13113#0: 
BIO_new_file("/etc/nginx/tdmssl.crt") 
failed(SSL:error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/tdmssl.crt','r') 
error:2006D080:BIO routines:BIO_new_file:no such file)

O que deve ser feito?

Para especificar o caminho absoluto dos arquivos adicionais que são usados ​​pela sua configuração do Virtualhost.

Como isso:

root@ilg40:/etc/nginx/conf.d# cd
root@ilg40:~# cat /etc/nginx/sites-available/tdm 
server {

    listen          443 ssl;
    server_name         tjsdatamanager.redtjs.com;
    ssl_certificate     /etc/nginx/conf.d/tdmssl.crt;
    ssl_certificate_key /etc/nginx/conf.d/tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        include proxy_params;
        proxy_pass http://unix:/etc/tdm/flask/wsgi.sock;
    }

}
ivanleoncz
fonte
-1

Eu tive o mesmo problema. Eu tive que alterar os arquivos / etc / nginx / sites-enabled / default & default.save que foram adicionados automaticamente ao nome do meu site sem o .com após o mesmo durante o processo de instalação, QUAL O PROBLEMA EM MINHA INSTÂNCIA . Para mantê-lo breve, essas duas linhas precisavam ser alteradas no meu / etc / nginx / sites-enabled / default. Observe que este arquivo é exibido com um ícone de atalho no meu sistema de arquivos, mas consegui clicar com o botão direito do mouse no arquivo e editá-lo com a opção "Editar / Editor interno".

HTTPS - solicitações de proxy para o Node.js local ap # HTTPS - solicitações de proxy para o aplicativo Node.js. local: servidor {listen 443; server_name switchmagic.com;

    ssl on;
    # Use certificate and key provided by Let's Encrypt:
    ssl_certificate /etc/letsencrypt/live/switchmagic.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/switchmagic.com/privkey.pem;

Quando examinei os arquivos e adicionei o .com, que é a convenção de nomenclatura que costumava adicionar ao arquivo, às referências switchmagic nos diretórios dos arquivos que estavam lançando os erros, tudo estava bem! Eu encontrei muitos desenvolvedores fazendo a mesma pergunta, então eu queria lançar minha solução para ajudar, pois as respostas encontradas eram principalmente sobre permissões de root, mas permissões de root não eram o problema no meu caso. Rock on Devs.

user3777549
fonte