Aqui está o erro que estou recebendo:
Recarregando 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 arquivo ou diretório erro:20074002:BIO rotinas:FILE_CTRL:sistema erro lib:140DC002:Rotinas SSL:SSL_CTX_use_certificate_chain_file:system lib) nginx: arquivo de configuração /etc/nginx/nginx.conf teste 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.crt
e intermediate.crt
manualmente nessa ordem. Fiquei coçando a cabeça por causa disso o dia todo. Espero que alguém tenha visto esse erro e tenha uma solução (e uma observação: não é um erro ao colar que o local do arquivo é mostrado apenas uma vez e não novamente após 'nenhum arquivo ou diretório').
Responder1
Tem certeza de que o usuário Nginx tem acesso ao diretório?
Verifique também as permissões do .pem
arquivo, se o Nginx não conseguir acessá-lo, ele pode 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á começo /
que possa ser o problema.
EDITAR
Tente mover sua configuração SSL para a seguinte estrutura (além de alterar nginx.conf
para 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 .pem
porque as permissões são muito abertas (precisa da fonte para verificar se o Nginx faz isso), mas a configuração acima deve funcionar bem.
Responder2
Deixarei minha resposta para o meu problema, caso alguém se depare com esse tópico.
Eu tenho o nginx executado dentro do 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, percebi que o nginx do meu 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 -v
opçã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 isso ajude.
Responder3
Um cenário possível:
às vezes pode acontecer que, ao configurar os arquivos SSL (chave privada e certificado) para o Virtualhost que está sendo configurado, tenha sido esquecido de especificar o caminho absoluto onde residem esses arquivos.
Por exemplo, se você seguir este documento oficial do Nginx:http://nginx.org/en/docs/http/configurando_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 for especificado o caminho absoluto para um arquivo comum usado pelo Nginx, o Nginx procurará os arquivos em "/etc/nginx"
De /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 configuração do Virtualhost.
Assim:
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;
}
}
Responder4
Eu encontrei o mesmo problema.
[sintoma]
Não pode começar com "systemctl restart nginx".
Mas o comando abaixo pode iniciar o nginx.
"/usr/sbin/nginx"
[causa]
Usei o arquivo de certificado diretamente baixado do provedor.
[resolvido]
Copiei o texto do certificado e colei no arquivo que criei (pelo vim).