Intro
Все хотят чего то бесплатно.
Но для бесплатно нужно немного поработать своими силами.
Сейчас все больше и больше сайтов переходят на сертификаты CA Let’s Encrypt.
Рассмотрим детали заказа и установки сертификата.
С чем я работаю.
1 2 3 | CentOS Linux release 7.3.1611 (Core) Linux it-svc.com.ua 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux |
Step 1
Нужно установить небольшую утилиту под названием certbot. для ее установки нужно подключить репозиторий epel
Установка производиться командой:
1 | yum install -y epel-release |
После успешной установки репозитория можно приступить к установке утилиты certbot
1 | yum install certbot |
Stem 2
Я полагаю что nginx у вас установлен и настроен на прослушивание 80 порта. В конфигурацию Nginx нужно внести следующую локацию
После проверить синтаксис на ошибки
1 | nginx -t |
и перезапустить сервис
1 | systemctl restart nginx |
или
1 | systemctl reload nginx |
Step 3
Запрос на создание сертификата
1 | certbot certonly -a webroot --webroot-path=/usr/share/nginx/it-svc.com.ua/www -d example.com -d www.example.com |
who is?
webroot-path=/usr/share/nginx/it-svc.com.ua/www — директория расположения корневого каталога сайта
-d it-svc.com.ua -d www.it-svc.com.ua — домен для которого мы хотим получить сертификат www и без www.
Директория хранения сертификатов и конфигурации /etc/letsencrypt/
Можете проверить существование сертификатов выполнив команду
1 | ls -l /etc/letsencrypt/live/it-svc.com.ua |
Если же их там нет, то сертификаты не созданы.
Повысим безопасность сформировав Diffie-Hellman Group (протокол Диффи — Хеллмана)
1 | openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 |
Step 4
Подключим все в конфигурацию nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | server { listen 443 ssl; server_name it-svc.com.ua; ssl_certificate /etc/letsencrypt/live/it-svc.com.ua/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/it-svc.com.ua/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256: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-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256: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'; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age=15768000; |
Сохраните и проверьте синтаксис nginx
1 | nginx -t |
Step 5
Время жизни сертификата 3 месяца. И что бы не перевыпускать его вручную нужно создать задание crontab
1 2 3 | crontab -e 30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log 35 2 * * 1 /usr/bin/systemctl reload nginx |