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

Для шифрования данных в этом протоколе используются сертификаты SSL. Сейчас HTTPS набирает большую популярность, такие компании, как Google пытаются заставить все больше сайтов интернета использовать SSL для защиты своих данных и организации более безопасного соединения. С другой стороны появился сервис Lets Encrypt, который позволяет получить SSL сертификат каждому полностью бесплатно. В этой статье мы рассмотрим как выполняется установка ssl сертификата Apache от Lets Encrypt.

Установка SSL сертификата Lets Encrypt в Apache

Я буду предполагать, что Apache у вас уже установлен и настроен для работы по протоколу http. Если это не так посмотрите статью . Перед тем как переходить к самой настройке веб сервера нам нужно получить ssl сертификат, а для этого нужно установить клиент сервиса в систему.

Шаг 1. Установка клиента Lets Encrypt

Мы будем выполнять установку клиента Lets Encrypt из официальных репозиториев. Официальный клиент от Lets Encrypt называется certbot, в репозиториях Ubuntu 16.04 есть упрощенная версия - Letsencrypt. Нам полностью хватит ее функциональности. Для установки выполните команды:

sudo apt update
$ sudo apt install python-letsencrypt-apache

После этого клиент будет готов к использованию.

Шаг 2. Настройка Apache

Если Apache настроен на работу по http, то перед тем как идти дальше, должна быть выполнена настройка ssl apache. Нам нужно активировать модуль ssl и включить использование ssl по умолчанию.

Для активации модуля наберите:

sudo a2enmod ssl

Для использования SSL по умолчанию включаем конфигурационный файл:

sudo a2ensite default-ssl.conf

Осталось перезапустить веб-сервер для применения изменений:

sudo systemctl restart apache2

Шаг 3. Получение SSL сертификата

Установка ssl сертификата с помощью клиента Lets Encrypt выполняется очень просто. Клиент автоматически запросит и установит новый сертификат для принадлежащего вам домена.

Чтобы получить сертификат для одного домена, достаточно передать этот домен в параметрах команды:

sudo letsencrypt --apache -d example.com

Если нужно сделать сертификат действительным для нескольких доменов или субдоменов вы можете передать их в дополнительных параметрах. Первое доменное имя будет основным, поэтому рекомендуется передавать первым домен верхнего уровня, а уже потом субдомены:

sudo letsencrypt --apache -d example.com -d www.example.com

Затем примите лицензионное соглашение Lets Encrypt:

Утилита сама выполнит настройку веб-сервера Apache, вам только нужно будет выбрать надо ли разрешать http трафик или сразу перенаправлять все на https. Безопаснее и более правильно перенаправлять весь входящий трафик на https.

Когда установка SSL сертификата Apache ubuntu будет завершена, вы найдете созданные файлы сертификатов в папке /etc/letsencrypt/live. В этой папке будут четыре файла:

  • cert.pem - ваш сертификат домена;
  • chain.pem - сертификат цепочки Let"s Encrypt;
  • fullchain.pem - cert.pem и chain.pem вместе;
  • privkey.pem - секретный ключ вашего сертификата.

Теперь вы можете зайти на сайт по https. Чтобы проверить как работает SSL и правильно ли выполнена установка ssl сертификата на сайт, вы можете открыть в браузере такую ссылку:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

Шаг 4. Автопродление сертификата

Настройка ssl Apache завершена. Но есть один минус, все сертификаты, полученные от Lets Encrypt действительны только на протяжении 90 дней и рекомендуется продлевать и срок действия каждые 60 дней. Клиент letsecnrypt имеет команду renew, которая позволяет проверить установленные сертификаты и обновить их если до истечения срока осталось меньше 30 дней.

Чтобы запустить процесс обновления для всех настроенных доменов выполните:

sudo letsencrypt renew

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

Самый простой способ автоматизировать этот процесс - добавить вызов утилиты в планировщик corn. Для этого выполните команду:

Затем, в открывшемся текстовом редакторе добавьте строку и сохраните изменения:

30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log

Таким образом, мы создали задачу, которая будет выполнять команду обновления каждый понедельник, в 2:30 утра. Информация про результат выполнения будет сохранятся в файл /var/log/le-renewal.log.

Выводы

В этой статье мы рассмотрели как выполняется установка ssl сертификата apache lets encrypt. Это поможет защитить ваш сайт от MITM атак, подслушивания и модификации трафика, а также благодаря тенденциям поощрения перехода на https может положительно сказаться на росте трафика.

Об авторе

Основатель и администратор сайта сайт, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.

Проект в первую очередь призван обезопасить веб, а также облегчить жизнь рядовым веб-разработчикам (всю эту возню с генераций приватных ключей, CSR, подтверждением прав на домен, настройкой веб-сервера и так далее свести на нет). Более того, SSL сертификаты , выдаваемые Let"s Encrypt, полностью бесплатные . Есть в них правда одно но, они являются базовыми и срок действия ограничен до 3-х месяцев (но это вовсе не проблема, так как продление можно настроить автоматически).

Скажу сразу, что на свой блог я поставил именно сертификат от Let"s Encrypt.

Стоит отметить, что сейчас проект находится на стадии бета-тестирования, поэтому могут возникать ошибки в работе их скриптов.

Весь процесс работы с сервисом происходит с помощью python скрипта letsencrypt , на текущий момент не для всех дистрибутивов linux существуют пакеты letsencrypt, поэтому официальная документация рекомендует ставить его предварительно склонировав git репозиторий из github.

$ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt $ ./letsencrypt-auto --help

letsencrypt-auto это скрипт-обёртка вокруг letsencrypt , автоматизирующий процесс развёртывания. Проще говоря, скрипт скачивает все необходимые зависимости, поднимает отдельное виртуальное окружения для Python, используя virtualenv, устанавливая в него необходимые python-модули при этом не засоряя системный питон. Стоит отметить, что для корректной работы скрипта необходимы права на запись в системные директории (sudo).

Так как скрипт призван максимально упростить работу по установке сертификатов безопасности, он поддерживает систему плагинов. Например, в стандартной поставке имеется плагин для работы с Apache (полноценно функционирующий) и nginx (пока только на экспериментальной стадии).

Установка SSL сертификата для Apache

Мой блог работает на связке LAMP, т.е. Linux, Apache, MySQL и PHP. Разработчики Let"s Encrypt постарались на славу и упростили настройку сертификата для Apache до уровня "проще некуда". Весь процесс сводится к следующим шагам:

$ ./letsencrypt-auto --apache -d mydomain.com

После ввода этой команды появится окно, где необходимо будет заполнить пару деталей, включая электронный адрес владельца. Остальное скрипт сделает за вас:

  • Проверит принадлежность домена
  • Выпустит необходимый сертификат сроком на 90 дней
  • Внесёт все необходимые настройки для веб-сервера Apache

После всех этих манипуляций мне только оставалось настроить 301 редирект (Moved Permanently) с http на https и перезагрузить веб-сервер.

ServerName сайт Redirect permanent / https://сайт/

С настройкой nginx дела обстоят хуже, в первую очередь потому что этот плагин пока не работает в связке с letsencrypt-auto. Если есть необходимость настройки SSL сертификатов для nginx (а она разумеется есть, nginx как ни крути один из самых популярных веб-серверов), то я бы порекомендовал сделать это вручную. О том как, читайте ниже.

Настройка SSL сертификатов для других веб-серверов

В поставке letsencrypt помимо плагина для работы с Apache имеется ряд других, а именно:

  • standalone
  • webroot
  • manual
  • nginx

Standalone

Суть standalone заключается в том, что скрипт попытается поднять собственный веб-сервер на время процедуры получения сертификата (дабы подтвердить принадлежность домена), а для этого необходимо будет отключить уже работающий, дабы освободить порты 80 и 443. Для большинства веб-разработчиков данный вариант неудобен из-за необходимости отключения сайта.

$ ./letsencrypt-auto certonly --standalone -d mydomain.com

Webroot

Данная опция подходит тем, кого не устраивает standalone. При указании ключа --webroot необходимо также будет указать и директорию, где располагаются файлы, которые обрабатывает веб-сервер.

$ ./letsencrypt-auto certonly --webroot -webroot-path /var/www/mydomain/

При работе с данной опцией необходимо настроить веб-сервер на чтение файлов соответствующим образом.

Manual

Из названия можно догадаться, что настройка и установка SSL сертификата будет проводиться вручную:-) Пожалуй, сейчас это наиболее удобный вариант настройки сертификата для nginx ввиду "сыроватости" letsencrypt nginx плагина.

$ ./letsencrypt-auto certonly --manual -d mydomain.com

После ввода этой команды вам необходимо будет самостоятельно провести манипуляции по подтверждению домена, разместив файл с определённым содержимым в нужной директории на сайте. Когда процедура создания сертификата закончится, все необходимые файлы будут лежать по следующему пути /etc/letsencrypt/live/$domain . В подкаталоге live находятся все самые актуальные сертификаты и ключи, тогда как keys и archive содержат все ранее созданные файлы.

Настройка SSL в Nginx

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

  • privkey.pem - наш приватный ключ
  • cert.pem - сертификат сервера
  • chain.pem - корневой (root) и промежуточный (intermediate)
  • fullchain.pem - все необходимые нам сертификаты для настройки веб-сервера.

Как же в данном случае будет выглядеть настройка Nginx?

Server { listen 80; listen 443 ssl; server_name mydomain.com; ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; ...

Ребята из letsencrypt не советуют перемещать файлы, т.к. при продлении сертификата старые будут автоматически заменены новыми по тем же путям, лучше в этом случае создать символически ссылки.

Продление SSL сертификата

Ранее я уже упоминал о том, что бесплатные SSL сертификаты "живут" только 90 дней, поэтому после их истечения необходимо будет запускать процедуру продления, благо это тоже бесплатно:-)

Что же из себя представляет процесс продления?

Как утверждают в Let"s Encrypt, перед истечением, на почту, указанную при создании, приходит соответствующее письмо-уведомление о том, что пора бы продлить сертификат. Чтобы это сделать вручную достаточно запустить команду:

$ ./letsencrypt-auto

И следовать инструкциям на экране. Автоматическое же продление можно настроить используя конфигурационный файл и обычный crontab. Желательно настроить крон таким образом, чтобы продление происходило не чаще 1 раза в месяц.

Если вы работаете из под Windows, то letsencrypt можно развернуть, используя или Docker. Правда в этом случае для правильной настройки веб-сервера необходимо будет вручную переместить все файлы на сервер.

В статье рассмотрим плюсы и минусы бесплатного Let"s Encrypt, для кого подойдет, как получить и установить его на сайт с панелью Plesk 12.5

Let"s Encrypt - бесплатный, автоматизированный проект, с открытым CA (certificate authority - центр сертификации).

ОСНОВНЫЕ ПРЕИМУЩЕСТВА

бесплатно: любой владелец сайта (в частности, доменного имени) может получить и установить доверенный TLS-сертификат Let"s Encrypt (TLS - наследник SSL);
автоматизация: все функции установки, конфигурации и обновления проводятся в автоматическом режиме;
безопасность: все методы шифрования Let’s Encrypt отвечают текущим стандартам;
прозрачность: публичная доступность информации о выпуске и отзыве каждого сертификата для любого желающего;
свободно: будет использован принцип open standard для протоколов взаимодействия с CA (certificate authority).

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

Центр Сертификации выдаёт сертификаты, которые генерируются на АСМЕ сервере по протоколу Boulder, написанные на языке GO (доступный в исходниках под лицензией MPL2).
Данный сервер предоставляет RESTful-протокол, который функционирует через канал с TLS шифрованием.
Клиентская часть протокола АСМЕ, т.е. certbot, написанный на языке Python, также открыт под APACHE лицензией. Certbot устанавливается на клиентском сервере, чтобы создавать запрос сертификата, проверить валидность домена и после этого устанавливает сертификат с последующей настройкой шифрования HTTPS веб-сервера.
Также в функцию certbot входит обновление сертификата после истечения срока действия. Установка сертификата производится одной командой после того как принимается лицензия.
Certbot позволяет устанавливать сертификат с дополнительными опциями -OCSP stapling и HTTP Strict Transport Security

УСТАНАВЛИВАЕМ SSL СЕРТИФИКАТ LET"S ENCRYPT (ИНСТРУКЦИЯ)

Рассмотрим использование сертификата применительно к серверам, используемым на нашем хостинге.
Подавляющее большинство наших серверов используют версию Plesk 12.5 где данный модуль уже включён в дистрибутив Plesk 12.5 и установка его проста и удобна. Достаточно зайти в панель плеск в раздел «Сайты и домены », кликнуть на модуль Let"s Encrypt,

Выбрать нужные опции и после нажатия кнопки «Установить», установка произойдёт менее чем за минуту.

Так как данный сертификат рассчитан на срок не более 90 дней, то в панели плеск создана соответствующая задача cron в разделе Инструменты и настройки - Планировщик задач

Стоит заметить, что существуют некоторые ограничения на генерацию сертификата:

  • дублирующие сертификаты - не более 5 в неделю;
  • количество попыток генерации сертификата не более 5 раз в час.

О НЕДОСТАТКАХ LET"S ENCRYPT

В конце этой статьи хотим отметить, что несмотря на все преимущества данного типа сертификата, существуют недостатки, которые нужно учитывать при выборе SSL:
  1. Бесплатный сертификат Let"s Encrypt кратковременный и рассчитан на срок не более 90 дней, в отличии от платного, который можно выпустить сроком до 3 лет. Вы можете, конечно, перевыпускать сертификат каждые 3 месяца, но обязательно следите за сроками. Перевыпуск сертификата можно осуществить тремя способами: вручную, за счет настройки планировщика задач cron или автоматически.

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

    Планировщик задач cron - это способ настройки автоматического обновления. Способ хорош для тех, кто владеет навыками администрирования Linux и умеет работать с кронами. Нужно еще учитывать, что в работе крона не исключены ошибки, которые могут помешать перевыпуску сертификата. Вывод: следить за обновлением все равно придется.

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

  2. Не все домены можно защитить бесплатным Let"s Encrypt. Данный сертификат рассчитан только на защиту одного домена без проверки компании, так называемые DV SSL (Domain Validation).

    Так, при помощи Let"s Encrypt нельзя создать следующие типы сертификатов:

    - WildCard сертификат для защиты поддоменов определённого домена;
    - Сертификаты OV SSL(organization validation) , предполагающие проверку не только домена, но и компании;
    - Сертификаты EV SSL (extended validation) . Сертификат с максимальной степенью защиты и зелёной адресной строкой браузера;
    - Multi-Domain сертификат типа UCC;


  3. Важный момент - нет никаких финансовых гарантий использования Let"sEncrypt . Если вдруг произойдет взлом бесплатного сертификата, то денежную компенсацию никто вам не предоставит.

ЗАКЛЮЧЕНИЕ

Подводя итоги, можно сказать, что Центр Сертификации Let"s Encrypt достаточно успешный проект, популярность которого растет с каждым годом среди пользователей сети.

И если вам нужен простой сертификат для одного домена, вы обладаете соответствующими навыками администрирования, а также если нет необходимости в SSL с проверкой компании (OV- organization validation) или наличие зеленой адресной строки и указания названия компании в сертификате, то данный сертификат можно использовать.

Тем не менее, мы рекомендуем крупным компаниям, интернет-магазинам, банкам и другим e-commerce проектам устанавливать коммерческие от известных Центров сертификации, таких как, например, GlobalSign, Comodo.
Так вы заручитесь доверием пользователей и покажете, что вы серьезная компания, которая заботится о безопасности данных клиентов.

  • Поделиться:
Илья

Дмитрий, добрый вечер! Подскажите пожалуйста. Как раз несколько дней пытаюсь решить вопрос с Lets encrypt сертификатом. На хостинге hosting.energy при создании сайта dommeb.com.ua подключил бесплатный Lets encrypt из Isp панели. Все было хорошо несколько дней, проходил тесты SSL ssllabs.com/ssltest/analyze.html на А+. Пробовал загрузить с мобильного на Android 2.3.6 с стандартного браузера и Maxton — появлялось только предупреждения о ненадежности сертификата, а дальше можно нажать Продолжить и сайт был доступен.

Неделю назад заметил, что при загрузке с мобильного и тестов на редиректы (поставил в настройках домена на хостинге редиректы с http-https) происходит добавление в url:443 (название SSL порта). И сайт не доступен при загрузке (надпись ошибки).

Написал в хостинг, решили в течении нескольких дней вопрос. Написали «Исправили конфигурации Nginx относительно редиректов, в конфиги закралась ошибка (вероятно, из-за панели управления) и было 2 редиректа.»

:443 уже не дописывался с мобильного и при тесте на редиректы.
Но сайт по прежнему не грузился, как с появлением этих двойных редиректов:443 (ошибка на Android 2.3.6 сайт не доступен при загрузке).

Посмотрел ssl тест, тоже А+ результат, но появилась ошибка в подпункте Handshake Simulation No SNI 2Android 2.3.7 No SNI 2 Server sent fatal alert: handshake_failure

Погуглил по этой ошибке:
Здесь про эту ошибку и решение пишут talk.plesk.com/threads/https-websites-not-loading-in-ie.338346/ Передал всю информацию в тех поддержку хостинга.

Несколько дней переписывался с хостингом, говорят ничего в конфигурации настроек хостинга не меняли, используют стандартный плагин Lets Encrypt сертификата. И они не гарантируют работу SSL от LetsEncryt на устаревших платформах. Предложили выделенный IP за 1.5$ в месяц.
Хотя несколько дней назад все работало и правок не было на обеих сайтах (все данные в браузерах очищал). А сам сайт хостинга (тоже на этом сертификате, нормально и сейчас грузится с с мобильного и даже без предупреждения)

Сайты на виртуальном хостинге, без выделенного IP. Один сайт сделал на Opencart с Lets encrypt сертификатом, все было в порядке. Второй тестовый на WordPress — все было тоже хорошо с android 2.3.6. Собирался переходить на третьем сайте (WordPress) с http на https, и уже первые два нормально не грузятся на Android 2.3.6…
Хотелось бы чтобы все пользователи могли нормально заходить на сайт (в крайнем случае на старых платформах как Android 2.3.6 чтобы было только предупреждение, которое можно пропустить)
Подскажите пожалуйста, может вы знаете в чем может быть причина?

Решил посмотреть платные сертификаты, вроде хороший этот от Comodo namecheap.com/security/ssl-certificates/comodo/positivessl.aspx ,
но у вас в статье прочитал, что на платформе Android сертификат Comodo был недостоверным. Немного запутался с этим

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

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

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

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

Работающий веб-сервер нужен инсталлятору, чтобы подтвердить ваше право владения доменом. Если вы ещё не настраивали его, то инсталлятор может сам запустить такой временный сервер на 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.