Получение бесплатных SSL сертификатов Let’s Encrypt для Apache путем генерации с certbot на стороннем сервере

Привет всем читателям! Сегодня статья будет посвящена генерации бесплатных SSL сертификатов Let’s Encrypt для Apache, на базе дистрибутив Linux в ручном режиме, на сторонней виртуальной машине, и последующей сборкой цепочки сертификатов в конфиге виртуального хоста. Узнал я об этих чудо сертификатах не так давно, и о них мне рассказал мой друг сисадмин, который занимается Web-серверами. В интернете на момент написания статьи уже достаточно много материала на эту тему, но я напишу ещё одну статью, в большей степени, наверно, для себя. Как это работает я рассказывать не буду, вы всегда сможете информацию найти в гугле, если вас конечно там не забанили. А теперь к делу. Сами по себе сертификаты Let’s Encrypt не развернутся, для этого нам понадобится так называемый инструмент – программное обеспечение EFF’s Certbot. Идем за ним на официальный сайт https://certbot.eff.org/ На момент написания статьи выглядит он как на скриншоте ниже:

В центре страницы у нас есть два поля, в котором нам необходимо выбрать пакет, который служит так сказать веб-сервером, и во втором поле необходимы выбрать ОС. В поддерживаемых операционных системах большой перечень, но эти все поддерживаемы ОС, основаны на базе дистрибутива Linux. Под windows как видим нет. Но в виду того, что я использую для своих веб серверов Debian, то соответственно, на виртуальную машину я установил Debian 9.3.0 «Stretch», самый последний релиз на момент написания статьи. Как видим сертбот уже устанавливается в систему и из репозитория.
Для Debian 8 «jessie» в общем-то все то же самое
Так как мы сертификаты будем генерировать на сторонней машине, и в ручном режиме, мне не нужно устанавливать сертбота в систему. Это ни к чему. Поэтому мы делаем небольшой финт ушами, и выбираем в выпадающем списке Debian 7 «wheezy». И тут инструкция меняется. Как раз то, что нам нужно.

Исходя из инструкции нам нужно его скачать с сервера, и затем установить права. Делал я все из-под root в домашней директории пользователя, т.е. папка root. Вводим команды:

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
Первая команда скачивается файл certbot-auto, а вторая устанавливает права. Заметьте, предварительно никакого софта мы не ставим, сертбот сам установит необходимые зависимости при первом запуске. Небольшое отступление. Вы наверно пока читали, задались вопросом, почему бы не поставить сертбот в систему и пусть он сам перевыпускает сертификаты. Причин не ставить бота есть несколько. Первая, это то, что не совсем ясно, что он делает. Во-вторых, на сервер запрещено ставить такой софт. В-третьих, веб-ресурсы располагаются на субдоменах в пределах одного доменного имени, и нет никакого смысла генерировать и ставить на каждый субдомен свой сертификат. В-четвертых, настраивать на каждом сервере просто в лом. В-пятых, очень удобно разом отозвать сертификаты на всех веб-серверах, путем запуска генерации нового сертификата с заменой вместо старого. В-шестых, в природе существуют Web-серверы на windows (IIS-Internet Information Services), и официального клиента под эту ОС не существует. Сертификаты можно сгенерировать и потом сконвертировать в необходимый формат под windows. Ну а теперь продолжаем. Запускаем сертбот с генерацией в мануальном режиме:
./certbot-auto certonly --authenticator manual
Сертбот, начинает построение зависимостей и также необходимо докачать пакеты. Что он в общем-то и делает, и в конечном итоге установщик спрашивает хотим ли мы их поставить и сколько это займет места. Все стандартно, естественно соглашаемся:
Когда сертбот запускается первый раз на сервере, необходимо ответить на некоторое количество вопросов с заполнение полей. Первое из них это e-mail-адрес, на который будет приходить оповещение об окончании действия сертификатов и других проблемах с ними. Работает отлично, без нареканий. Заполняется по виду login@exemple.org, и выглядит это так:
Ящик введен, и далее следующий вопрос. Нам предлагается прочитать «петицию» об условиях использования. Тут вариантов у нас нет, только соглашаться:

Следующий вопрос про размещение емейла в каком-то каталоге. Тут я не разбирался и просто сказал нет:

Далее описание будет сделано на сертботе, полученного несколькими месяцами ранее и на другом сервере. Скриншоты ниже были уже сделаны, и переделывать на новой ВМ с последним дебиан’ом не было смысла, потому что ничего не меняется. У сертбота есть хорошая особенность: если у вас старая версия, он автоматом сначала обновляется, а ещё бывает обновляет зависимости и пакеты если нужна более новая версия. Далее предлагается ввести домены. Один сертификат можно сделать для нескольких доменов. Как минимум это удобно.

Я генерирую сертификаты для двух субдоменов:

Далее ещё вопрос. Т.к. генерирую на стороннем сервере – соглашаемся:[/justify]

Далее сертбот предлагает в корне первого сайта, на домен которого генерируется сертификат создать папку \.well-known\acme-challenge\ и в нем создать файл с содержимым:

Далее нажимаем энтер, и проделываем то же самое с другим сервером и с другим доменом:

Полный лог консоли:

Перед тем как нажать энтер, проверьте, доступны ли файлы с содержимым. Если один из файлов будет недоступен, придется делать все заново. В нашем случае все завершилось хорошо и без ошибок. Сертификаты складываются в папку /etc/letsencrypt/life/[ваш домен]
Далее подключаемся по SFTP. Я генерирую таким образом сертификаты не в первый раз и у меня несколько папок с доменами:

У нас имеется четыре файла:
privkey.pem – приватный ключ сертификата
cert.pem – сертификат сервера
chain.pem – сертификат использующийся для цепочки
fullchain.pem – соединяет cert.pem и chain.pem. В нашем случае он не нужен.

Осталось только правильно собрать цепочку и запустить наш виртуальный хост. Для начала переходим в директорию /etc/apache2/ и создаем папку ssl. В неё помещаем cert.pem, privkey.pem и chain.pem. Пример виртуального хоста ниже. Не забывайте открывать порт 443 или делать его проброс. Код не привожу, т.к. wordpress съедает директивы. Разберусь с этим позже.
<VirtualHost *:80>
	ServerName exemple.org
        ServerAlias www.exemple.org 	
        ServerAdmin exemple@exemple.org	
	DocumentRoot /var/www/exemple.org/moodle/	
	ErrorLog /var/www/exemple.org/error_www.log
	CustomLog /var/www/exemple.org/access_www.log combined
	
</VirtualHost>


<VirtualHost *:443>
	ServerName exemple.org
        ServerAlias www.exemple.org 	
        ServerAdmin exemple@exemple.org	
	DocumentRoot /var/www/exemple.org/	
	ErrorLog /var/www/exemple.org/error_www.log
	CustomLog /var/www/exemple.org/access_www.log combined

	
	SSLEngine on
   	SSLCertificateFile /etc/apache2/ssl/exemple.org/cert.pem
    	SSLCertificateKeyFile /etc/apache2/ssl/exemple.org/privkey.pem
	SSLCertificateChainFile /etc/apache2/ssl/exemple.org/chain.pem

</VirtualHost>

У меня на этом все. В каком-либо из будущих покажу настройку сертбота для автоматического режима получения сертификатов.

Добавить комментарий