Получение бесплатного HTTPS сертификата Let's Encrypt

Описание проблемы

Для обеспечения безопасной передачи данных в интернете используется протокол HTTPS.

Для настройки HTTPS на своем сайте необходимо получить сертификат HTTPS. Выдачей сертификатов HTTPS занимаются удостоверяющие центры. Для корректной работы браузер, которым пользуется клиент должен "доверять" УЦ, который выпустил сертификат для сайта, в противном случае пользователь будет видеть предупреждение при первом посещении сайта.

LetsEncrypt

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

Проблема ушла с появлением LetsEncrypt[Let's Encrypt]. Это удостоверяющий центр, который выдает сертификаты бесплатно и при этом поддерживается всеми современными браузерами.

Получение сертификата Let's Encrypt

Получение сертификата Let's Encrypt сводится к выполнению следующих шагов.

  1. Скачать клиент Let's Encrypt

    $ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt

  2. Запустить выпуск сертификата для сайта

    ./letsencrypt-auto certonly -a manual -d example.com

    Вместо example.com необходимо вписать свой домен.

    Клиент Let's Encrypt предоставляет множество методов автоматической настройки WEB-серверов, например, nginx или apache, однако, удобнее использовать ручной способ (manual), т.к. он предоставляет большую гибкость при настройке.

    При запуска команды будет запрошен пароль текущего пользователя, если он имеет права на запуск sudo, или пароль root в противном случае. Это нужно для установки возможных обновлений клиента.

    В процессе выпуска сертификата будет задано несколько вопросов, на котрые следует ответить положительно.

  3. Проверка домена

    Сервис Let's encrypt требует подтверждения права владения доменом.

    По умолчанию проверка происходит так. Вебмастеру предлагается разместить по определенному URL (на его ресурсе, разумеется) страницу, которая содержит некоторый код, который сгенерировал Let's Encrypt. Об этом уведомляет сообщение от клиента Let' Encrypt. В общем виде оно выглядит так:

    ```

    Create a file containing just this data:

    jsfdkhtciudftuysdthjyrtgfuy34t5gdguyerhysfgdyrgfsygdfuehrftg4djyrdfrgjghrdgdfbvhdbjhfgd

    And make it available on your web server at this URL:

    http://ansmirnov.ru/.well-known/acme-challenge/845ynv7ytvr7eiygvnurgbuyfbhgkufhgcjzgghytfd


    ```

    (данные изменены)

    Необходимо, чтобы по URL http://ansmirnov.ru/.well-known/acme-challenge/845ynv7ytvr7eiygvnurgbuyfbhgkufhgcjzgghytfd открывалась страница с содержимым jsfdkhtciudftuysdthjyrtgfuy34t5gdguyerhysfgdyrgfsygdfuehrftg4djyrdfrgjghrdgdfbvhdbjhfgd.

    Добиться такого эффекта можно по-разному, в зависимости от используемых WEB-сервера и HTTP но в большинстве случаев достаточно создать в корне веб сервера каталог .well-known/acme-challenge и поместить в него файл с необходимым именем и содержанием.

  4. После успешного получения сертификата его можно найти в каталоге /etc/letsencrypt/live.

  5. Последним этапом является настройка WEB-сервера. Для этого необходимо обратиться к соответствующей документации. Возможно, я размещу несколько заметок по теме настройки HTTPS на распространенных WEB-серверах (nginx, apache).

Следует отметить, что сертификат выдается сроком на 3 месяца.

Выводы

Приведена инструкция по получению бесплатного HTTPS сертификата от удостоверяющего центра Let's Encrypt.