Показывать я буду все на примере nginx.
Для начала нужно получить trusted сертификат, для этого воспользуемся Let's Encrypt, клонируем Let's Encrypt client
git clone https://github.com/letsencrypt ... crypt
Хочу сразу предупредить, если у вас чистый сервер, установлено только то что нужно вам и вы не хотите ставить python и еще кучу зависимостей для letsencrypt, запускайте в LXC или в чем-то другом.
Теперь собственно установим letsencrypt:
cd letsencrypt
./letsencrypt-auto
Ждём пока он все что нужно установит, когда завершит приступим к генерации сертификата, letsencrypt умеет генерировать готовые конфиги для apache и nginx но я больше доверяю себе, будем генерировать только сертификат, делается это так:
./letsencrypt-auto certonly --webroot -w /path/to/webroot/dir -d domain.name
/path/to/webroot/dir - это путь к корневой директории вашего сайта(там будет создана директория и файлы в ней для проверки того что домен действительно ваш).
domain.name - ваш домен
в итоге чтоб сгенерировать себе сертификат я делаю так:
/letsencrypt-auto certonly --webroot -w /var/www/the-swank.pp.ua/public -d the-swank.pp.ua
После генерации можно перейти по пути /etc/letsencrypt/live/domain.name и увидеть 4 файла(cert.pem, privkey.pem, chain.pem, fullchain.pem)
Теперь приступил к настройке nginx.
Создадим конфиг нашего сайта, где его создавать обьяснять не стану ибо в разных дистрибутивах немного по разному, я думаю вы знаете где у вас конфиги.
Для начала делаем переадресацию с http на https
server {
listen 80;
server_name domain.name;
return 301 https://$host$request_uri;
}
Теперь server блок для https:
server {
listen 443 ssl;
server_name domain.name;
root /var/www/domain.name/public;
index index.html;
ssl_stapling_verify on;
ssl_stapling on;
# Установка длительности TLS сессии в 3 минуты
ssl_session_timeout 3m;
ssl_session_cache shared:SSL:3m;
ssl_session_tickets off;
# Использовать только TLS
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-SHA384HE-RSA-AES128-GCM-SHA256HE-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-SHAHE-RSA-AES128-SHA256HE-RSA-AES128-SHAHE-RSA-AES256-SHA256HE-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-SHAES-CBC3-SHA:!DSS';
# Отдавать предпочтение шифрам, заданным на сервере
ssl_prefer_server_ciphers on;
# Файл доверенных сертификатов CA
ssl_trusted_certificate /etc/letsencrypt/live/domain.name/chain.pem;
# Указание закрытого ключа
ssl_certificate_key /etc/letsencrypt/live/domain.name/privkey.pem;
# Задание файла, содержащего сертификаты
ssl_certificate /etc/letsencrypt/live/domain.name/fullchain.pem;
# Файл с параметрами Диффи-Хеллмана
ssl_dhparam /etc/letsencrypt/live/domain.name/dhparam.pem;
# Передача Strict-Transport-Secutiry заголовка
add_header Strict-Transport-Security max-age=15768000;
}
Теперь с помощу openssl нужно сгенерировать файл с параметрами Диффи-Хеллмана
openssl dhparam -out /etc/letsencrypt/live/domain.name/dhparam.pem 2048
Тут прийдется подождать, генерируется оно довольно долго
После этого можно сделать service nginx restart и попробовать зайти на свой сайт и/или проверить его на https://www.ssllabs.com
Вот что вышло у меня:
https://www.ssllabs.com/ssltes ... pp.ua
Сертификат действует 90 дней, обновлять его желательно каждые 60 дней, можете поставить на cron