• База знаний
  • /
  • Блог
  • /
+380 (44) 364 05 71

Перевод сайта на протокол HTTPS является правильным шагом с точки зрения повышения безопасности, доверия посетителей и продвижения сайта. При помощи SSL сертификата весь HTTP трафик между посетителем сайта и сервером шифруется. В этой статье Вы узнаете о том как правильно настроить на VPS и выделенном сервере nginx https с высоким уровнем защиты A+.

Тестовый стенд на котором мы будем устанавливать SSL сертификат имеет следующие характеристики: OC Debian 9.9 , nginx 1.15.12 , PHP 7.0.33

Будем считать что у Вас есть следующие файлы:

  • intermediateCA.crt (промежуточный сертификат) или ca-bundle.crt (цепочка сертификатов)

  • файл сертификата с расширением .crt

  • приватный ключ сертификата с расширением .key

1. Объединяем файл сертификата с промежуточным сертификатом или цепочкой сертификатов.

2. Загружаем файл сертификата и приватный ключ на наш сервер. Делаем это следующим образом:

scp routers.pp.ua.crt routers.pp.ua.key root@routers.pp.ua:/etc/ssl

Где:

scp - команда копирования файлов

root - имя вашего пользователя для подключения к серверу через ssh

routers.pp.ua - имя домена вашего сайта

/etc/ssl - директория на удаленном сервере, в которую в хотите сохранить загружаемые файлы.

Перенос сертификатов с компьютера под управлением Windows:

  • Установите программу WinSCP. Скачать ее можно здесь.

  • Запустите WinSCP. В открывшемся окне введите данные, которые вы используете для подключени я к вашему серверу по SSH.

  • Перетащите файлы .CRT и .KEY в эту директорию из левой части окна.

Все подготовительные работы мы выполнили, можно приступать к конфигурированию NGINX.

3. Сформируем ключ прямой секретности (dhparam.pem) по алгоритму Диффи-Хеллмана.

dhparam.pem нам нужен для того чтоб заработал Forward Secrecy (прямая секретность). При закрытии сеанса связи, обе стороны уничтожают ключи сеанса. Поэтому даже, если ключ сеанса будет скомпрометирован, злоумышленник получит доступ только к данным зашифрованным этим временным ключом. В этом и заключается суть повышенного режима безопасности сайта, известного как «прямая секретность»

Сгенерировать ключ можно так:

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

число 4096 — это длинна ключа

4. Формируем конфиг NGINX с HTTPS

server {
	listen 80;
	server_name routers.pp.ua;
	return 301 https://$host:443$request_uri;
}

server {
	listen 443 http2;
	server_name routers.pp.ua;
	ssl on;
	ssl_certificate "/etc/ssl/routers.pp.ua.crt";
	ssl_certificate_key "/etc/ssl/routers.pp.ua.key";
	ssl_ciphers 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:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam "/etc/ssl/dhparam.pem";
	ssl_session_timeout 1h;
	ssl_session_cache shared:SSL:10m;
	add_header Strict-Transport-Security "max-age=31536000;";
	root /var/www/routers.pp.ua;
	index index.php index.html index.htm;
	access_log /var/log/nginx/routers.pp.ua.access.log combined;
	error_log /var/log/nginx/routers.pp.ua.error.log error;
	location / {
		try_files $uri $uri/ /index.php?$args;
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}
	
	location @php {
		fastcgi_index index.php;
		fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_intercept_errors off;
		try_files $uri =404;
		include fastcgi_params;
	}

	# . files
	location ~ /\. {
		deny all;
	}

	# assets, media
	location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|
		webm|mpe?g|avi|ogv|flv|wmv)$ {
		expires 15d;
		access_log off;
	}
}

Давайте подробнее разберём файл конфигурации:

В первой секции server мы делаем автоматическую переадресацию с http на https.

Вторая секция server нам более интерестна.

Директива ssl on — включение поддежки для данного виртуального хоста SSL;

Обратите внимание на listen 443 http2; Мы сразу включаем работу по протоколу HTTPS/2. Это позволяет нам увеличить скорость загрузки сайта.

ssl_certificate и ssl_certificate_key - указываем пути к файлу сертификата и файлу ключей;

ssl_dhparam - подключение ключа прямой секретности;

ssl_protocols и ssl_ciphers - какие будем использовать версии TLS и список шифров (в данном примере включена поддержка устаревшие версии TLS и шифров для работы устаревшего ПО;

ssl_prefer_server_ciphers - устанавливаем более высокий приоритет серверных шифров перед клиентскими;

add_header Strict-Transport-Security - max-age=31536000; указывает браузерам использовать механизм HSTS (принудительного использования браузером протокола HTTPS)

Проверяем нашу конфирурацию на сайте https://www.ssllabs.com/ssltest/ Если всё правильно настроено, будет получена оценка A+.

Настройка SSL с наивысшей защитой A+

 

Оценка “А+”, настройка SSL для NGINX выполнена!

Дата: 07.05.2019
Автор: Виталий
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA