Estou mudando a configuração de um único host para vários hosts virtuais no servidor nginx. Até minhas alterações, o ssl estava funcionando corretamente, mas depois de adicionar vários hosts virtuais, cada um com nome de domínio único e - consequentemente - certificado diferente, o ssl não quer trabalhar.
Minha configuração original era:
# fragment of nginx.conf file
http {
# ...
ssl_certificate_key /path/to/privkey.pem;
ssl_certificate /path/to/fullchain.pem;
ssl_dhparam /path/to/dhparam;
# ...
}
Portanto, este é um único certificado para o servidor nginx.
Depois de adicionar vários hosts virtuais, quero que eles apresentem seus próprios certificados corretos para seus domínios. Então eu removi todos os parâmetros relacionados ao ssl do arquivo principal nginx.conf
e os adicionei a arquivos de hosts virtuais como esse:
# fragment of sites-enabled/my.server.com file
server {
listen 443 ssl;
root "/var/www/my.server.com/";
server_name my.server.com www.my.server.com;
location / {
try_files $uri $uri/ /index.html;
}
ssl_certificate_key /path/to/my/server/com/privkey.pem;
ssl_certificate /path/to/my/server/com/fullchain.pem;
ssl_dhparam /path/to/my/server/com/dhparam;
}
Depois de recarregar o nginx, não consigo me conectar a esses hosts virtuais:
# curl https://my.server.com
curl: (35) gnutls_handshake() failed: The TLS connection was non-properly terminated.
# openssl s_client -connect my.server.com:443
CONNECTED(00000003) 140524682454680:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
--- no peer certificate available
--- No client certificate CA names sent
--- SSL handshake has read 0 bytes and written 305 bytes
--- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1488541876
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Para mim, realmente parece que um nginx não pode encontrar / ler o arquivo de certificado, mas não é o caso, pois os caminhos são exatamente iguais aos da configuração sem hosts virtuais.
Depois de ver /var/logs/nginx/error.log
, também encontrei a linha:
*39 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking
Tenho certeza de que é algo realmente pequeno e estúpido o que estou perdendo. Alguém pode ver o que estou fazendo errado?