Сертификаты Let`s Encrypt

Бесплатные сертификаты для доменов от Let’s Encrypt

Использовать зашифрованный канал при передачи данных между клиентом и сервером с последнее время уже становится правилом хорошего тона. Очень много личной информации пользователи доверяют онлайн-сервисам. Если владельцы сервисов могут обеспечить их сохранность в рамках сервера или дата-центра, то при передачи данных по сети злоумышленники могут легко перехватить их.

Решить эту проблему может установка безопасного соединения между клиентом и сервером. На HTTP-сервере должны находиться сертификат открытого ключа, который будет использоваться для шифрования. Этот сертификат подтверждает факт соответствия ключа и домена или принадлежность ключа персоне или организации, владеющей сайтом.

Сертификаты выпускают специальные центры сертификации (Certification Authorities). Они проверяют данные, которые вы им предоставили и присылают подписанный ими сертификат. По степени тщательности проверки данных в центре сертификации сертификаты принято делить на три группы:

  1. сертификаты для домена;
  2. сертификаты для организации;
  3. сертификаты с расширенной проверкой данных.

Выпуская сертификат для домена, центр сертификации проверяет только то, что лицо, подавшее заявку на выпуск, обладает полномочиями управлять этим доменом. Как правило, в этом случае просят указать определённую DNS-запись в домене или сообщить код, отправленный на служебный почтовый ящик. Это самый примитивный способ проверки, который может быть выполнен в автоматическом режиме.

Let’s Encrypt

Новый центр сертификации Let’s Encrypt запустил сервис по выпуску и обновлению сертификатов для доменов, который требует минимальное количество ручной работы. Администратор сервер запускает скрипт, который связывается с центром сертификации, проходит требуемые проверки и сохраняет полученные сертификаты на диск. Для популярных серверов Apache и Nginx даже будут внесены соответствующие изменения в конфигурации.

Подробнее процесс установки описан в инструкции.

Самое приятное, что этот сервис абсолютно бесплатный.

Проверка правильности конфигурации

Во время настройки сервера я рекомендую сверяться с чеклистом:

Сертификаты Let`s Encrypt

И проверить настройки сервера с помощью онлайн-сервиса.

Плюсы и минусы

Бесплатные TLS-сертификаты прекрасно подходят для «домашних» проектов, блогов и некоммерческих сайтов.

Но из-за того, что сертификат для домена не гарантирует принадлежность сайта конкретной организации или частному лицу, использовать их для корпоративных сайтов или защиты платёжных данных не стоит. Увы, сертификаты, дающие зелёную подсветку адресной строки, можно только купить.

Как получить сертификат Let’s Encrypt в ручном режиме

На данный момент инсталлятор Let’s Encrypt, со слов авторов проекта, может автоматически исправлять конфигурацию только Apache. Поддержка nginx и других HTTP-серверов находится в разработке. Тем не менее, это не помешает вам получить сертификат.

Если у вас уже работает какой-то веб-сервер, то инсталлятор следует запустить с ключом --webroot. Ключ certonly указывает, что мы только хотим получить сертификат. Ключом -w мы сообщаем расположение корневой папки сайта.

./letsencrypt-auto certonly \
> --- webroot -w /var/www/html \
> -d xakinfo.ru -d www.xakinfo.ru
Updating letsencrypt and virtual environment dependecies…

Так же следует перечислить домены, на которых работает сайт, с помощью ключа -d.

Через несколько секунд вы получите сообщение о том, что сертификат получен и его можно использовать.

./letsencrypt-auto certonly \
> --- webroot -w /var/www/html \
> -d xakinfo.ru -d www.xakinfo.ru
Updating letsencrypt and virtual environment dependecies…
Running with virtualenv: /root/.local/share/letsencrypt/bin……encrypt certonly
---webroot -w /var/www/html -d xakinfo.ru --- xakinfo.ru
IMPORTANT NOTES:
--- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/xakinfo.ru/fullchain.pem. Your cert
will expire on 2017-04-12. To obtain a new version of the
certificate in the future, simply run Let`s Encrypt again.
--- 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

Работающий веб-сервер нужен инсталлятору, чтобы подтвердить ваше право владения доменом. Если вы ещё не настраивали его, то инсталлятор может сам запустить такой временный сервер на 80 или 443 порту.

Это делается с помощью ключа --standalone.
В отличие от режима webroot, в режиме standalone можно не указывать домены в командной строке.
Инсталлятор запросит их позже в диалоговом окне.

Все генерированные ключи и выпущенные сертификаты лежат в папке /etc/letsencrypt/live/$domain.

  • privkey.pem — приватный ключ. Он должен всё время храниться в секрете. Это тот файл, который указывается в опции SSLCertificateKeyFile у Apache или в опции ssl_certificate_key у nginx.
  • cert.pem – сертификат для домена. Этот файл указывается в опции SSLCertificateFile у Apache.
  • chain.pem — цепочка из промежуточных и корневого сертификатов центра сертификации. Путь до этого файла указывается в опции SSLCertificateChainFile у Apache.
  • fullchain.pem — Все сертификаты в одном файле, включая сертификат для домена. Данный файл нужно указать в опции ssl_certificate у nginx.

Обновление сертификата Let`s Encrypt

Сертификаты Let’s Encrypt «живут» всего 90 дней. Такой короткий срок авторы проекта выбрали исходя из того, что выпущенные сертификаты легко обновить. Для этого нужно запустить инсталлятор с теми же параметрами, которые были использованы во время получения сертификата. Инсталлятор обнаружит, что на сервере уже есть сертификат для этих доменов и предложит обновить их.
После успешной загрузки обновлённых сертификатов инсталлятор сообщит дату окончания их действия.
Конфигурационные файлы сервера изменять при этом не нужно. На сервере хранятся все версии выпущенных сертификатов в папке /etc/letsencrypt/archive/, а в папке /etc/letsencrypt/live/ создаются симлинки на актуальные версии.

Запуск инсталлятора можно запланировать в crontab.

Настройка сертификатов Let’s Encrypt в Apache

Для начала, нужно загрузить установщик Let’s Encrypt. Если у вас чистая виртуальная машина, то кроме Git ничего не понадобится. Все остальные зависимости будут установлены позже.

apt-get install git

Клонируем репозиторий из Github.
git clone https://github.com/letsencrypt/letsencrypt
Переходим в папку с инсталятором.
cd letsencrypt
Инсталятор запускается командой:
./letsencrypt-auto
У него много параметров, посмотреть которые можно в справке.
./letsencrypt-auto --help all
Нас интересует получение сертификатов и установка их в Apache.
./letsencrypt-auto --apache
Установщик проверяет конфигурацию сервера. Если вы явно не указали доменные имена, то он предложит их ввести вручную.
Если домены были явно указаны, то инсталлятор предложит выбрать для каких из них он должен получить сертификат.
Он так же попросит указать email для обратной связи. Этот адрес электронной почты не будет добавлен в сертификат.
Перед полученим сертификатов требуется принять условия предоставления услуг.
Сертификаты Let`s Encrypt
Установщик может добавить правила для перенаправления пользователей с обычной версии сайта на версию с безопасным подключением.
Сертификаты Let`s Encrypt

Настройка завершена. Инсталлятор предлагает проверить конфигурацию сервера с помощью онлайн сервиса Qualys SSL Lab.

Сайт уже можно попробовать открыть в браузере.

Инсталлятор скопировал существующую конфигурацию сайта, добавил в оригинальный файл редирект на HTTPS-версию, а в копии указал пути до приватного ключа, сертификата домена и промежуточных сертификатов. Так же он подключил файл с дополнительными настройками для mod_ssl.