В последнее время новостные ленты наполнены пёстрыми заголовками об огромном количестве взломов и похищении личных данных пользователей. Я задумался о том, что бы немного обезопасить свои ресурсы и использовать сертификаты. Как раз давно хотел протестировать программное обеспечение от компании Letsencrypt.org
Как оказалось — совсем не сложно.
Перым делом нужно установить так называемый ACME клиент. Я выбрал certbot
yum install epel-release yum install certbot
Проверял на поддомене.
Генерация сертификата не на много сложнее:
certbot certonly --webroot -w /srv/redmine/ -d projects.tradenark.com.ua IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/projects.tradenark.com.ua/fullchain.pem. Your cert will expire on 2017-01-25. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
тут /srv/redmine/ — каталог где располагаются файлы сайта
projects.tradenark.com.ua — собственно (под)домен
Эти сертификаты действительны 90 дней и по истечению этого срока нужно будет всего то выполнить команду снова. Об этом говорится в результате выполнения команды. Так же скрипт говорит куда он сложил файлики.
Для дополнительной безопасности сформируем ключ по алгоритму шифрования Диффи-Хеллмана:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Это может занять довольно длительное время. В конце
Но это только пол дела. Теперь нужно добавить сертификаты в веб-сервер.
# ls /etc/letsencrypt/live/projects.tradenark.com.ua/ cert.pem chain.pem fullchain.pem privkey.pem
Нас будут интересовать 2 файла: fullchain.pem и privkey.pem
Займёмся настройкой NGinx
Сперва редирект с обычных ссылок на https:
server { server_name projects.tradenark.com.ua; listen 80; return 301 https://projects.tradenark.com.ua$request_uri; }
Далее включим поддержку SSL и укажем дополнительные параметры:
server { listen 443 ssl; server_name projects.tradenark.com.ua; ssl_certificate /etc/letsencrypt/live/projects.tradenark.com.ua/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/projects.tradenark.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; location ~ /.well-known { allow all; } root /srv/redmine/; ... }
Проверка и применение изменений NGinx
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # nginx -s reload
Теперь можно проверить наш сертификат
Сперва редирект:
# curl -I http://projects.tradenark.com.ua/ HTTP/1.1 301 Moved Permanently Server: nginx/1.10.2 Date: Fri, 28 Oct 2016 00:25:15 GMT Content-Type: text/html Content-Length: 185 Connection: keep-alive Location: https://projects.tradenark.com.ua/
Видим что редирект работает
Теперь сертификат и уровень защиты на SSLLABS.com
У нас пять с плюсом 🙂
Теперь таким же образом придётся «засертификатить» все остальные ресурсы.