3 декабря 2015 года LetsEncrypt вышел в публичный бета-тест и теперь любой желающий может получить на свой домен трастовый TLS (SSL) сертификат бесплатно! Сертификаты, выданные LetsEncrypt, живут 90 дней, но в будущем создатели обещают представить автоматизированный способ их обновления из коробки.
Давайте настроим HTTPS на нашем домене mydomain.com.
Для начала склонируем программу letsencrypt c хитхаба. Для этого у вас должен быть установлен git.
1 2 | git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt |
Теперь нужно выполнить следующую команду:
1 | ./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory auth |
Укажем почту для восстановления ключа:
Согласимся с условиями использования:
И, наконец, введем имя домена или имена, разделяя пробелами или запятыми:
Замечу, что в случае домена с www.* его нужно указывать помимо mydomain.com (mydomain.com www.mydomain.com).
После выполнения всего этого вы получите подобное сообщение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Output: IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to myuser@gmail.com - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/mydomain.com/fullchain.pem. Your cert will expire on 2016-04-10. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le |
В директории /etc/letsencrypt/live/mydomain.com/ будут созданы следующие PEM — файлы:
cert.pem — сертификат сервера,
chain.pem — сертификат цепочки доверия,
fullchain.pem — комбинированный сертификат цепочки и сервера,
privkey.pem — приватный ключ сертификата.
Теперь нужно настроить Nginx.
Существует приложение для создания конфигурации SSL от Mozilla. Оно достаточно удобно и понятно, можно воспользоваться им https://mozilla.github.io/server-side-tls/ssl-config-generator/.
Если необходимо узнать версию установленного nginx выполните:
1 | sudo nginx -v |
Если же домен был сконфигурирован ранее, то в конфигурацию можно добавить блок с переадресацией с http://
1 2 3 4 5 | server { listen 80; server_name mydomain.com; return 301 https://$host$request_uri; } |
В основном блоке
убедится, что верно указаны server_name, слушается нужный порт и верны пути к сертификатам и ключам:
1 2 3 4 5 6 | listen 443 ssl; server_name mydomain.com www.mydomain.com; ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; |
Также для улучшения безопасности стоит добавить forward secrecy. Он позволяет создавать одноразовые сессионные ключи. Для обмена ключами используется механизм Диффи-Хеллмана. Даже если злоумышленник сможет заполучить ключ сервера, то расшифровать предыдущий трафик уже не удастся. Nginx использует по умолчанию 1024 битные ключи. Мы сгенерируем 2048 битный ключ.
openssl dhparam -out /etc/nginx/ssl/dhparams_2048.pem 2048
И добавим его в конфигурацию после строк с ssl_certificate:
1 | ssl_dhparam /etc/nginx/ssl/dhparams_2048.pem; |
Осталось перезапустить nginx:
1 | sudo service nginx restart |
Теперь доступ будет осуществляться по https://mydomain.com а трафик будет шифроваться.
Подробное руководство по letsencrypt можно найти здесь
http://letsencrypt.readthedocs.org/en/latest/intro.html