Не уверен, что было бы хорошо ответить на этот, вероятно, "мертвый и похороненный" вопрос, но здесь мы идем ...
Базовая конфигурация (т.е. безопасность )
- Создайте свой закрытый ключ (> = 2048bit) и свой сертификат. Я предполагаю, что они у вас уже есть, иначе посмотрите на letsencrypt.org . Убедитесь, что ваш сертификат включает в себя полную цепочку сертификатов (обычно это промежуточные / юридические сертификаты). Что касается параметров Диффи-Хеллмана, вы можете сгенерировать их, запустив
openssl dhparam -out /path/to/dhparam.pem 2048. Настройте параметры SSL в соответствии с генератором конфигурации Mozilla SSL ( промежуточные настройки по состоянию на 2016-06-30):
server { listen 443 ssl; listen [::]:443 ssl; server_name localhost; root /var/www/wordpress; ### SSL/TLS SETTINGS ### # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate ssl_certificate /path/to/signed_cert_plus_intermediates; ssl_certificate_key /path/to/private_key; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits ssl_dhparam /path/to/dhparam.pem; # intermediate configuration. tweak to your needs. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ### OCSP Stapling ### # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; # verify chain of trust of OCSP response using Root CA and Intermediate certs ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates; resolver <IP DNS resolver>; include /etc/nginx/default.d/*.conf; location / { try_files $uri $uri/ =404; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Усовершенствованная конфигурация (т.е. заходи на меня, АНБ! (Ну нет, но ...) )
Возьмите базовую конфигурацию выше и настройте ее следующим образом:
- Выберите (по крайней мере) 3072bit при создании сертификата и параметров Диффи-Хеллмана (да, это займет некоторое время, но оно того стоит).
- Используйте только TLS1.2:
ssl_protocols TLSv1.2; - Используйте безопасную кривую:
ssl_ecdh_curve secp384r1; - Используйте «современные» наборы шифров (по состоянию на 2016-06-30):
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; Обеспечить HTTPS для всех:
Перепишите свой serverблок HTTP следующим образом:
server { listen 80; listen [::]:80; server_name mySuperServer; return 301 https://$server_name$request_uri; }
Используйте заголовок HSTS, чтобы навигатор вашего посетителя использовал исключительно HTTPS: add_header Strict-Transport-Security 'max-age=31536000; includeSubdomains; preload';
Ваш сервер также может защитить ваш сайт (в некоторой степени), установив следующие заголовки:
add_header X-Frame-Options DENY; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options nosniff; add_header Content-Security-Policy "default-src 'none';
- Общие рекомендации здесь: никогда не используйте
rootдля изменения ваших файлов. Используйте sudoвместо этого.
бонус
- Если на вашем сервере работает nginx> 1.9.5, вы можете использовать HTTP / 2, добавив
http2в свою listenдирективу. - Ваш сервер получил адрес IPv6 (и поддерживает HTTP / 2)? Хорошо ! Добавьте
listen [::]:443 ssl http2;ниже первую listenдирективу. - Планируете ли вы использовать свой сервер для нескольких доменов? Затем вы должны установить
access_logи error_logдля каждого serverблока. - Копирование / вставка редко вызывает ... Вы можете переместить
### SSL/TLS SETTINGS ###блок в текстовом файле и включить его в свою конфигурацию. То же самое для вашего вызова CGI в PHP. - Вы можете ускорить обмен данными между Nginx и интерпретатора PHP немного, используя сокет UNIX, вместо того, чтобы слушать вас LoopBack интерфейс:
fastcgi_pass unix:/var/run/php5-fpm.sock;.
В результате ваш serverблок должен выглядеть примерно так:
#HTTP server server { listen 80; listen [::]:80; server_name mySuperServer; return 301 https://$server_name$request_uri; } # HTTPS server server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2; server_name mySuperServer; index index.php index.html index.htm; root /path/to/your/files/mySuperServer; access_log /var/log/nginx/mySuperServer/access.log; error_log /var/log/nginx/mySuperServer/error.log; ### SSL/TLS SETTINGS ### ssl on; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/privkey.pem; ssl_dhparam /path/to/your/dh_parameters.pem; include securityrules.inc; include fastcgi.inc; }
Содержание securityrules.inc:
ssl_protocols TLSv1.2; ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; ### HTTP HEADERS ### add_header Strict-Transport-Security 'max-age=31536000; includeSubdomains; preload'; add_header X-Frame-Options DENY; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options nosniff; add_header Content-Security-Policy "default-src 'none';
Содержание fastcgi.inc:
location ~ \.php$ { include fastcgi_params; fastcgi_keep_conn on; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
У вас есть соответствующий сертификат и ключ?