Bezpieczny SSL na Apache i Nginx

SSL Server Test  netfs.pl  Powered by Qualys SSL Labs

Bezpieczeństwo SSL na Apache i Nginx 

 

Jak zabezpieczyć się przed atakami Poodle, Logjam i przy okazji uzyskać wynik A+ w teście SSLLABS ( https://www.ssllabs.com/ssltest/analyze.html ) ?

 

Wystarczy zastosować się do kilku poniższych kroków:

1. Mieć aktualny system z pakietem OpenSSL wspierającym TLS w wersji 1.2 ( Dla Debian od wersji 7.x, ale zalecamy aktualną stabilną czyli 8.x ).

2. Stosować zawsze certyfikaty CA które dostajemy od wystawcy, dla Apache dodajemy je pod zmienną: 'SSLCACertificateFile’, a dla Nginx dodajemy poniżej do pliku z certyfikatem domeny.

3. Wygenerować plik dhparams.pem – najlepiej tym w którym trzymamy klucze SSL.

openssl dhparam -out dhparams.pem 2048

4. Dostosować poniższą konfiguracje:

Konfiguracja dla serwera Apache:

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA
SSLCompression Off
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

Dla Apache w wersji 2.4.8+ i OpenSSL 1.0.2+ możemy zmienić zmienną „SSLCipherSuite” na:

SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

I dodać:

SSLOpenSSLConfCmd DHParameters "scieżka do wygenerowanego pliku dhparams.pem"

 

Konfiguracja dla serwera Nginx:

ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS';
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 127.0.0.1 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_dhparam "scieżka do wygenerowanego pliku dhparams.pem";
add_header Strict-Transport-Security max-age=63072000;

Zostaje na koniec zrestartować usługę ; – )