configuração ssl nginx por host virtual

2

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?

    
por Maciej Dobrowolski 03.03.2017 / 12:59

1 resposta

4

Descobrimos que havia pelo menos um host virtual habilitado que estava vinculado a 443 portas e não tinha configurado ssl corretamente ( ssl_certificate_key , ssl_certificate parâmetros estavam ausentes).

Eu não sei porque, mas o nginx não se queixou disso e em vez disso - outros hosts virtuais foram quebrados.

    
por 03.03.2017 / 14:56