Введение
Речь пойдет про типовой почтовый сервер, настроенный самостоятельно на базе популярных бесплатных компонентов — Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 8. В качестве бэкенда для web сервера там используется apache, так что получать сертификаты будем с его помощью.
В ситуации с непубличным почтовым сервером нет принципиальной необходимости использовать подтвержденный сертификат. Вы запросто можете выпустить свой самоподписаный и использовать его. Пользователям достаточно будет подтвердить, что они доверяют этому сертификату и проблем не будет.
Тем не менее, последнее время наблюдается тенденция по выдавливанию самоподписанных сертификатов из обращения. Некоторый софт напрочь отказывается им доверять, не оставляя возможность пользователям это исправить. Вместо того, чтобы бороться с софтом, я предлагаю вам настроить всем известные сертификаты от let’s encrypt. К тому же сделать это относительно просто.
Загрузка через операционную систему Windows
Запускаем. Откроется окно, куда необходимо ввести параметры подключения по протоколу SSH.
Слева вы увидите папки и файлы локальной машины, справа — файлы рабочего сервера, к которому подключились. Следует выбрать (либо создать, если такового нет) место, куда отправятся сертификаты. Используя функцию drag-n-drop, зажав левую клавишу мышки, переносите файлы .CA и .CRT.
Важно: удобнее будет сохранить .key в том же месте, где уже лежат файлы сертификатов. Это необязательно, но тогда вам придется запоминать расположение этого файла и указывать этот путь при конфигурации Apache, а не путь с нашего примера
Чтобы сделать копию .key и отправить в иную директорию, в случае генерации закрытого ключа на сервере, можно воспользоваться командой:
При этом:
cp — отвечает за копирование;/home/root/ — путь к файлу, если вы зашли «под рутом»;private.key — имя файла самого ключа;/etc/ssl/private.key — путь, куда мы хотим скопировать ключ.
Можно воспользоваться командой и удалить ключ в старой директории:
Шаг 4 – Установка сертификата через панель управления
На этом этапе у вас уже должен быть сертификат и закрытый ключ, сохраненные на вашем компьютере. Последним шагом является установка SSL-сертификата в вашей учетной записи хостинга. Это можно сделать через раздел SSL:
- Перейдите в раздел SSL.
- Выберите домен из раскрывающегося списка, для которого вы хотите установить сертификат SSL.
- Вставьте содержимое файла certificate.txt в сертификат: (CRT) и содержимое файла privatekey.txt в поле закрытый ключ: (KEY). После завершения нажмите кнопку «Установить».
- После завершении установки вы увидите сообщение, что все успешно установилось.
Вот и все, вы успешно установили бесплатный SSL от Let’s Encrypt на виртуальный хостинг. Теперь ваше доменное имя будет работать по протоколу HTTPS.
Получаем сертификат от Let’s Encrypt
Итак, я считаю, что вы настроили почтовый сервер по предложенной выше ссылке. Значит, у вас установлен веб сервер Apache, а так же все в порядке с dns записями. Сертификатов мы получим сразу два. Для доменных имен:
- mail.site.ru — имя почтового сервера, этот сертификат будут использовать postfix и apache
- webmail.site.ru — домен для web интерфейса почты, будет использовать веб сервер
Для настройки получения сертификатов let’s encrypt и настройки apache, нам нужно будет установить несколько пакетов. Напоминаю, что речь идет про Centos 8. В других системах настройка будет аналогичной, только имена пакетов могут отличаться.
# dnf install certbot python3-certbot-apache mod_ssl
Пакеты эти живут в репозитории epel, так что если он еще не подключен, подключите.
# dnf install epel-release
Дальше нам нужно добавить 2 виртуальных домена в настройки apache. Для этого создаем 2 конфига в директории /etc/httpd/conf.d/.
1. mail.site.ru.conf
<VirtualHost *:443> ServerName mail.site.ru DocumentRoot /var/www/mail.site.ru/ <Directory /var/www/mail.site.ru/> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/mail.site.ru-error.log CustomLog /var/log/httpd/mail.site.ru-access.log combined </VirtualHost> <VirtualHost *:80> ServerName mail.site.ru DocumentRoot /var/www/mail.site.ru/ <Directory /var/www/mail.site.ru/> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/mail.site.ru-error.log CustomLog /var/log/httpd/mail.site.ru-access.log combined </VirtualHost>
2. webmail.site.ru.conf
<VirtualHost *:443> ServerName webmail.site.ru DocumentRoot /var/www/webmail.site.ru/ <Directory /var/www/webmail.site.ru/> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/webmail.site.ru-error.log CustomLog /var/log/httpd/webmail.site.ru-access.log combined </VirtualHost> <VirtualHost *:80> ServerName webmail.site.ru DocumentRoot /var/www/webmail.site.ru/ <Directory /var/www/webmail.site.ru/> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/webmail.site.ru-error.log CustomLog /var/log/httpd/webmail.site.ru-access.log combined </VirtualHost>
По сути конфиги идентичные, только названия доменов разные. Теперь можно проверить конфигурацию apache и перезапустить его.
# apachectl -t # apachectl reload
Если увидите ошибку:
AH00526: Syntax error on line 85 of /etc/httpd/conf.d/ssl.conf: SSLCertificateFile: file '/etc/pki/tls/certs/localhost.crt' does not exist or is empty
Просто удалите конфиг /etc/httpd/conf.d/ssl.conf. Он нам не нужен.
Если нет ошибок, то можно запускать certbot и получать сертификаты. Делается это очень просто.
# certbot --apache
Если все прошло без ошибок, то вы увидите в директории /etc/letsencrypt/live две папки с сертификатами для каждого из доменов.
Так же certbot автоматически добавит в конфигурации виртуальных хостов apache несколько дополнительных параметров.
<VirtualHost *:443> ServerName webmail.site.ru DocumentRoot /var/www/webmail.site.ru/ <Directory /var/www/webmail.site.ru/> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/webmail.site.ru-error.log CustomLog /var/log/httpd/webmail.site.ru-access.log combined SSLCertificateFile /etc/letsencrypt/live/mail.site.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/mail.site.ru/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> <VirtualHost *:80> ServerName webmail.site.ru DocumentRoot /var/www/webmail.site.ru/ <Directory /var/www/webmail.site.ru/> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/webmail.site.ru-error.log CustomLog /var/log/httpd/webmail.site.ru-access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =mail.site.ru RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} </VirtualHost>
В этот виртуальный хост установите веб почту, если вам она нужна.
Выпуск сертификата через win-acme клиент
Как мы говорили выше мы будем использовать win-acme клиент для выпуска сертификата. Сертификат мы будем выпускать в PFX-формате, чтобы его было удобнее импортировать в хранилище сертификатов Windows. Этот клиент также поддерживает выпуск сертификатов в формате с раздельными файлами для закрытого ключа и сертификата.
Мы будем выпускать wildcard сертификат для следующего имени – *.itproblog.ru
Для выпуска бесплатного сертификата Let’s Encrypt через win-acme клиент необходимо выполнить следующие шаги:
1. Загрузить клиент с сайта разработчика.
2. Распаковать загруженный архив:
3. Запустить cmd.exe от имени администратора, перейти в распакованную в п. 2 директорию и выполнить команду:
Появится приветствие win-acme клиента:
4. Укажем, что мы хотим выпустить сертификат и при этом не использовать настройки по умолчанию, а указать те настройки, которые необходимы нам:
5. Укажем, что мы вручную перечислим необходимые нам имена:
6. Теперь нам необходимо указать имя, для которого мы планируем выпустить сертификат. Если необходимо указать несколько имен, то нужно указать их через запятую.
7. Клиент попросит указать дружественное имя сертификата, т.е. имя, которое будет отображаться при импорте в хранилище сертификатов Windows. Можем указать свое имя, либо оставить имя по умолчанию.
8. Теперь нам необходимо подтвердить право владения доменом. Это можно сделать несколькими способами. Мы укажем, что вручную создадим необходимые DNS записи:
9. Мы будем использовать RSA ключи:
10. Нам будет нужен сертификат в PFX формате – укажем это:
11. Укажем директорию для генерируемого PFX файла и пароль к нему:
12. Мы не планируем куда-то еще записывать наш сертификат:
13. Необходимые изменения в конфигурацию наших приложений мы внесем самостоятельно вручную. Укажем это:
14. Теперь нам необходимо создать запись в нашей DNS зоне для того, чтобы подтвердить право владения доменом. Параметры DNS записи нам генерирует win-acme клиент:
15. Процедура регистрация TXT записи для каждого хостера вашей зоны своя. В нашем случае уже добавленная запись выглядит следующим образом:
16. Теперь вернемся в наш win-acme клиент и нажмем Enter. После удачной проверки записи клиент попросит нас удалить её:
17. После этого win-acme клиент сгенерируют сертификат в форме PFX, о чем напишет нам в консоль:
18. Клиент теперь можно закрыть, а в директории, которую мы указывали для генерации сертификата мы должны увидеть итоговый PDF-файл:
Выпуск бесплатного сертификата Let’s Encrypt через win-acme клиент выполнен.
Let’s Encrypt на 90 дней есть wildcard вида *.5house.win с проверкой по dns записи
удобный генератор запроса на сертификат https://www.sslforfree.com/http://www.netometer.com/video/tutorials/How-to-Install-LetsEncrypt-Certificate-in-Exchange-Server/https://www.frankysweb.de/exchange-2016-zertifikatsassistent-fuer-lets-encrypt/http://www.netometer.com/blog/?p=1777
В этом примере создается запрос на сертификат для центра сертификации со следующими параметрами:
Для запроса используется кодировка Base64.
Данные отображаются на экране, а также записываются в текстовый файл C:\5house\5houseCert-Request.REQ
Параметр Subject имеет значение c=RU,o=5house,cn=5house.win
Параметр Domains (альтернативные имена субъектов) содержит дополнительные значения autodiscover.5house.win, mail.5house.win и www.5house.win
PS New-ExchangeCertificate -GenerateRequest -RequestFile «C:\5house\5houseCert-Request.REQ» -SubjectName «c=RU,o=5house,cn=mail.5house.win» -DomainName autodiscover.5house.win,www.5house.win
Получение списка сертификатов Get-ExchangeCertificate
создаём общую сетевую папку \\msk01-exch01.5house.local\5house
1)web EAC EAC Servers / certificates Серверы / сертификаты(выберем нужный сервер)
2)new Exchange certificate — Create a request for a certificate from a certification authority Новый сертификат Exchange — создать запрос сертификата из центра сертификации
3)Friendly name for this certificate Понятно имя для данного сертификата
4)Request a wildcard certificate Запрос группового сертификата (пример *.5house.win или *.msk.5house.win)
5)Store certificate request on this server Хранить запрос сертификата на этом сервере UNC
6)Specify the domains (host names) that you want to include in the certificate. Multiple values indicate a subject alternative name (SAN) certificate. Укажите домены (имена хостов), которые вы хотите включить в сертификат. Несколько значений, альтернативные имена (SAN) Subject Alternative Names.
7)DOMAIN добавляем в список домены. (mail.5house.win , AutoDiscover.5house.win, 5house.win,www.5house.win)
8)Заполняем поля X.500 Organization name , Department name , City/Locality, State/Province/ Country/Region name (Название организации, название отдела, город / населенный пункт, штат / регион / страна / регион)
9)Save the certificate request to the following file (
Сохраните запрос сертификата в следующем файле) \\msk01-exch01.5house.local\5house\5houseCert-Request.REQ
10)Открываем файл 5houseCert-Request.REQ блокнотом и видим base64 кодировку
11)Вам нужно отправить эту информацию в центр сертификации. Способ отправки зависит от центра сертификации, но, как правило, содержимое файла можно вставить в сообщение электронной почты или форму запроса на сертификат, опубликованную на веб-сайте центра сертификации.
https://docs.microsoft.com/ru-ru/exchange/architecture/client-access/create-ca-certificate-requests?view=exchserver-2019
Настройка клиента Let’s Encrypt
Установите клиент Let’s Encrypt:
emerge -a app-crypt/certbot
Выполните регистрацию Let’s Encrypt ACME (автоматизированная среда управления сертификатами) аккаунта, указав почтовый адрес, на который в будущем будут приходить важные сообщения:
Saving debug log to /var/log/letsencrypt/letsencrypt.log ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: No IMPORTANT NOTES: - Your account credentials have been saved in your Certbot 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 Certbot so making regular backups of this folder is ideal.
После этого в каталоге будет создана инфраструктура для управления сертификатами (хранения, обновления, отзыва, удаления).
Обзор
tree /etc/letsencrypt
/etc/letsencrypt/ ├── accounts │ └── acme-v01.api.letsencrypt.org │ └── directory │ └── 091f17d3f1d16083e1f0e70b463452cc │ ├── meta.json │ ├── private_key.json │ └── regr.json └── renewal-hooks ├── deploy ├── post └── pre 8 directories, 3 files
Получение сертификатов
Поскольку у Let’s Encrypt есть лимиты на количество обращений за сертификатами, лучше всего для начала проверить, что сертификаты для целевого домена удастся получить, для этого выполняем команду ниже с флагом —dry-run. Который пытается получить сертификаты в режиме тестов:
Если все прошло успешно и сертификаты могут быть получены команда выведет следующую информацию:
В случае неудачи certbot выведет информацию об ошибке, а также запишет расширенную информацию в лог.
Одной из причин неудачного выполнения может быть отсутствие или неверная настройка A и AAA записей. Необходимо убедиться, что они настроены верно, а также если указана AAA запись требуется проверить, что ваш сайт доступен по протоколу IPv6. Поскольку если AAA запись указана и ваш сайт не доступен по протоколу IPv6 вы получите ошибку при попытке получения сертификата, независимо от того что основная A запись может быть указана корректно.
При успешном выполнении команды мы можем смело получать сертификаты:
После этого у вас должны появиться сертификаты для указанных доменов.
Если требуется добавить домен или поддомен в сертификат
Если вы забыли указать поддомен или требуется добавить новый домен в сертификат (необходимо учесть, что их не должно быть больше 100), в этом случае мы можем запустить команду еще раз указав дополнительные домены:
Вам будет предложено добавить новый домен в сертификат. Чтобы избежать вопросов можем дописать ключ:
После одной из этих команд новый домен будет добавлен в сертификат.
Шаг 5 – Проверка даты истечения срока действия и автопродление SSL-сертификата
Теперь переходим к самому интересному.
Срок действия SSL-сертификатов 90 дней. Как быть? Или надо помнить об этом, и каждый раз забывать продлить сертификат?
Нет. Все проще. Идем дальше.
Вы можете проверить срок его действия через SSH, используя следующую команду:
Вы можете автоматически продлить SSL сертификат с помощью cron. Например, чтобы автоматически обновить сертификат SSL, вы можете задать задание cron для запуска следующей команды через месяц:
На Hostinger задание cron может быть создано в разделе Расширенные Cron Задачи. Вы можете использовать следующие настройки:
- Минуты – :00 top of the hour (0)
- Час(ы) – 12 a.m. Midnight (0)
- Дни – Every day (*)
- Месяц – Every other month (*/2)
- Будни – Every weekday (*)
Подведение итога
Сертификаты SSL от Let’s Encrypt прекрасно подходят, если вы хотите использовать свои сайты через HTTPS, но не хотите платить за них.
Это руководство предназначено для того, чтобы показать вам обходное решение (после бана StartCom и WoSign), которое вы можете использовать для установки бесплатного SSL от Let’s Encrypt на вашем хостинге.
Надеюсь, данная статья вам пригодится.
Удачи!
P.S. В связи с тем что сертификаты и ключ на хостинге от Hostinger необходимо копировать-вставлять вручную, в автоматическом режиме режиме автообновление не возможно. Хотя сами сертификаты корректно обновляются через клиент ACME.
5: Автоматическое обновление сертификата
Сертификаты Let’s Encrypt действительны в течение 90 дней, но во избежание ошибок их рекомендуется обновлять каждые 60 дней. На момент написания статьи клиент не оборудован функцией автоматического обновления сертификатов. Этот процесс можно выполнить вручную, просто запустив клиент Let’s Encrypt с использованными ранее параметрами.
Надёжный способ обеспечить своевременное обновление сертификата – это демон cron.
Вместо плагина Standalone используйте плагин Webroot; он позволяет проверить домен сервера, не останавливая веб-сервер. Плагин Webroot добавляет скрытый файл в document root веб-сервера, который необходим Let’s Encrypt CA для подтверждения домена.
Использование плагина Webroot
Плагин Webroot помещает специальный файл в каталог ./well-known в главном каталоге веб-сервера. После этого Let’s Encrypt может открыть этот файл, чтобы подтвердить домен. В зависимости от настроек сервера вам может понадобиться явно разрешить доступ к каталогу ./well-known.
Чтобы центр сертификации Let’s Encrypt смог получить доступ к каталогу, нужно изменить настройки Nginx.
В блок server для ssl добавьте следующий код:
Также можно уточнить путь к root-каталогу в директиве root. Этот путь необходим плагину Webroot; по умолчанию это каталог /usr/share/nginx/html.
Сохраните и закройте файл.
Теперь можно использовать плагин Webroot для обновления сертификата. Указать доменные имена можно при помощи опции –d.
После этого нужно перезапустить Nginx, чтобы получить доступ к обновлённому сертификату.
Конфигурационный файл Let’s Encrypt
Чтобы упростить процесс обновления Let’s Encrypt, создайте конфигурационный файл:
Откройте файл для редактирования:
Файл должен выглядеть так (закомментированные строки опущены):
Можно не указывать домен в команде, а просто использовать конфигурационный файл Let’s Encrypt для автоматического внесения домена в команду. Для обновления сертификата можно использовать следующую команду:
Скрипт для обновления сертификата
Чтобы автоматизировать процесс обновления сертификата, используйте скрипт оболочки, который будет отслеживать срок действия сертификата и обновлять его за 30 дней до истечения этого срока. Скрипт будет запускаться раз в неделю. Таким образом, в случае сбоя cron у вас будет в запасе 30 дней, чтобы снова попытаться обновить сертификат.
Загрузите скрипт и сделайте его исполняемым; предварительно можно просмотреть его содержимое.
Скрипт le-renew-webroot использует домен в качестве аргумента. Если сертификат не нуждается в обновлении, скрипт просто сообщит, сколько дней осталось до истечения срока действия сертификата.
Примечание: Скрипт не запустится, если файла /usr/local/etc/le-renew-webroot.ini не существует. Также нужно убедиться, что в начале конфигурационного файла и в начале сертификата (при его создании) был указан один и тот же домен.
Поскольку текущий сертификат был создан только что, у скрипта нет необходимости обновлять его, и он просто сообщит, сколько дней осталось до истечения срока действия сертификата:
После этого нужно отредактировать crontab и добавить в таблицу новую команду, которая будет запускаться раз в неделю.
Добавьте в файл следующую строку:
Сохраните и закройте файл. Теперь cron будет запускать команду le-renew-webroot каждый понедельник в 2:30 ночи, а вывод команды будет помещён в лог /var/log/le-renewal.log.
Примечание: Больше информации о работе cron можно получить в статье «Автоматизация задач с помощью cron».
Что нужно знать перед началом работы
-
Предполагаемое время для завершения: 5 минут.
-
Exchange самозаверяющихся сертификатов хорошо работают для шифрования связи между внутренними Exchange серверами, но не так хорошо для шифрования внешних подключений, так как клиенты, серверы и службы не доверяют автоматически Exchange самозаверяются сертификаты. Чтобы создать запрос сертификата (также известный как запрос на подписание сертификата или CSR) для коммерческого органа сертификации, которому автоматически доверяют все клиенты, серверы и службы, см. в справке Create an Exchange Serverсертификата для органа сертификации .
-
При создании нового самозаверяемого сертификата с помощью комлета New-ExchangeCertificate можно назначить сертификат для Exchange служб во время создания сертификата. Дополнительные сведения о службах Exchange см. в справке Назначение сертификатов Exchange Server службам.
-
Сведения о том, как открыть командную консоль Exchange в локальной организации Exchange, см. в статье Open the Exchange Management Shell.
-
Для выполнения этих процедур необходимы соответствующие разрешения. Сведения о необходимых разрешениях см. в статье запись «Безопасность служб клиентского доступа» в статье Разрешения клиентов и мобильных устройств.
-
Сочетания клавиш для процедур, описанных в этой статье, приведены в статье Сочетания клавиш в Центре администрирования Exchange.
Совет
Возникли проблемы? Попросите помощи на форумах Exchange. Перейти на форумы можно по следующим ссылкам: Exchange Server, Exchange Online или Exchange Online Protection.
2: Получение сертификата
Let’s Encrypt предлагает несколько способов получения сертификата при помощи разных плагинов. На данный момент плагины позволяют только получить сертификат, а настройку сервера для использования этого сертификата нужно выполнить вручную; исключением является плагин для Apache, работа с которым описана здесь.
Примечание: Плагины, которые помогают получить сертификат, но не устанавливают его, называются аутентификаторами.
В данном руководстве для создания SSL-сертификата используется плагин Standalone.
Проверка порта 80
Плагин Standalone позволяет быстро получить сертификат SSL. Он временно запускает отдельный веб-сервер на порт 80, к которому подключается Let’s Encrypt CA и подтверждает сертификат. Следовательно, для работы плагина необходим порт 80, потому нужно временно отключить обычный веб-сервер, если он занимает этот порт.
К примеру, при использовании Nginx нужно ввести:
Чтобы узнать, занят ли порт 80, введите:
Если команда не вернула никакого результата, значит, порт свободен, и можно запускать плагин Standalone.
Запуск Let’s Encrypt
Перейдите в каталог letsencrypt.
Затем используйте плагин Standalone:
Примечание: Программное обеспечение Let’s Encrypt требует привилегий суперпользователя. Программа может запросить пароль.
После запуска letsencrypt запросит некоторые данные.
Примечание: Вопросы, задаваемые при первом запуске программы, отличаются от вопросов, задаваемых при дальнейшем её использовании. В руководстве предполагается, что программа запущена впервые.
Укажите адрес электронной почты, который будет использоваться для отправки извещений и восстановления утерянных ключей.
После этого нужно принять условия соглашения подписчика Let’s Encrypt.
Затем программа запросит доменное имя (или имена). Если вы хотите использовать один сертификат для нескольких доменных имен, укажите их в предложенном поле:
Если запуск прошел успешно, на экране появится сообщение:
Выпишите или запомните путь и срок действия сертификата (в примере они выделены красным).
Файлы сертификата
После получения сертификата на сервере появятся следующие файлы:
- cert.pem: сертификат домена.
- chain.pem: сертификат цепочки Let’s Encrypt.
- fullchain.pem: комбинация cert.pem и chain.pem.
- privkey.pem: закрытый ключ сертификата.
Важно знать место хранения сертификата, так как его нужно будет указать в конфигурации веб-сервера. Файлы хранятся в подкаталоге /etc/letsencrypt/archive, также Let’s Encrypt создаёт символьную ссылку на наиболее актуальный сертификат в каталог /etc/letsencrypt/live/your_domain_name
Чтобы убедиться, что все файлы существуют, нужно выполнить такую команду:
Команда покажет список существующих файлов.