Como ativar o SSL no nginx?

1

Eu criei certificados SSL para o meu site em sslforfree.com

Eu tento habilitar o SSL no meu servidor NGINX da seguinte forma, mas infelizmente recebo uma mensagem de erro, como você pode ver na parte inferior:

/etc/nginx/sites-available/default

server {
    listen 80;
    server_name myserver.com;

    listen 443;
    ssl on;
    ssl_certificate /home/tolga/SSLcerts/ca_bundle.crt;
    ssl_certificate_key /home/tolga/SSLcerts/private.key;

Mensagem de erro:

tail -f /var/log/nginx/error.log

2017/10/06 11:29:55 [emerg] 13813#13813: SSL_CTX_use_PrivateKey_file("/home/tolga/SSLcerts/private.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch

O que pode e o problema?

    
por Tolga 06.10.2017 / 10:35

2 respostas

2

O erro na sua configuração é que você tem apenas um parágrafo do servidor. O servidor informa tudo o que uma única conexão precisa saber. Quando você quer SSL, então você precisa colocar isso em um parágrafo de servidor separado. Corrija-me se estiver errado, mas, tanto quanto me lembro (e usando o NginX por 3 anos), um parágrafo de servidor único não pode escutar em duas portas diferentes.

Assim, sua configuração correta ficaria assim se você também quiser redirecionar todos os HTTP para HTTPS:

server  {
        listen  80;
        server_name     myserver.com;
        return          301 https://myserver.com$request_uri;
}

server  {
        listen                  443 ssl;
        server_name             myserver.com.hu;

        ssl_certificate         /home/tolga/SSLcerts/ca_bundle.crt;
        ssl_certificate_key     /home/tolga/SSLcerts/private.key;

        root                    /var/www/html/com.myserver/public;

        error_log               /var/log/nginx/com.myserver/error.log;
        access_log              /var/log/nginx/com.myserver/access.log;

        index                   index.php;

        gzip  on;
        gzip_vary on;
        gzip_min_length 10240;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
        gzip_disable "MSIE [1-6]\.";

        location..............
        location..............
        location..............
        location..............

}

Também alguns conselhos para o futuro:

  • Coloque seus arquivos crt e key em /etc/nginx/ssl/com.myserver.crt e /etc/nginx/ssl/com.myserver.key (simplesmente porque é melhor organizado dessa maneira)

  • Aprimore sua segurança com o seguinte código após ssl_ccertificate e antes da raiz:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_prefer_server_ciphers on;

ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

ssl_dhparam /etc/nginx/ssl/dhparam.pem;

  • Crie seu arquivo dhparam.pem com o seguinte comando:

    openssl dhparam -dsaparam -out /etc/nginx/ssl/dhparam.pem 4096

por 06.10.2017 / 13:22
1

Eu tinha 2 arquivos CRT baixados de sslforfree.com

Na configuração nginx, quando alterei o certificado de ca_bundle.crt para certificate.crt, o problema foi resolvido.

    
por 06.10.2017 / 10:40