В повседневной практике использования почтового сервера iRedMail возникает необходимость замены SSL сертификатов (как при первичной установке, так и ежегодная смена). В топике описан процесс смены SSL сертификатов для iRedMail от StartSSL и предложен скрипт, позволяющий автоматизировать все необходимые действия.
Если вы заинтересовались, то добро пожаловать под кат.
На Хабре уже было несколько постов, описывающих данных почтовый сервер: тут и тут.
Если говорить кратко, то это бесплатный open-source почтовый сервер с веб-интерфейсом на базе связки Postfix+Dovecot+SpamAssassin+ClamAV+Roundcube. iRedMail прост в установке и работает «из коробки».
Так же на Хабре уже описывался процесс получения бесплатного сертификата от StartSSL. Хотелось бы отметить, что недавно StartSSL сменил оформление. На мой взгляд оно стало более приятным и простым.
Но более важным для меня стало то, что ещё год назад StartSSL не позволял подтвреждать домен 3-го уровня без владения доменом 2-го уровня, однако теперь эта возможность появилась. Т.е. ранее система не давала возможность отправить письмо с кодом подтверждения на электронную почту вида postmaster@subdomain.domain.com, любой домен 3-го уровня требовал подтверждения от postmaster@domain.com.
А теперь перейдем к сути.
Для примера в качестве имени домена будем использовать example.com. Исходные данные:
Кладём эти файлы в один каталог и выполняем распаковку сертификатов.
Сконвертируем сертификаты издателя и домена из архива в PEM формат и склеим их вместе.
Копируем полученные сертификаты в каталог etc/ssl/certs/ под стандартными именами для iRedMail. После копирования сменим владельца ключа для Postgresql.
Избавляемся от пароля в RSA-ключе.
Копируем полученный RSA ключ в каталог /etc/ssl/private под стандартными именами для iRedMail. После копирования сменим владельца для ключа Postgresql.
Перезапускаем сервисы:
Проверяем работоспособность сервера.
Для автоматизации всего вышеописанного объединим всё в единый скрипт. В качестве переменной используем $domain.
Буду рад, если данный скрипт окажется кому-нибудь полезным. Спасибо за прочтение.
Если вы заинтересовались, то добро пожаловать под кат.
Немного об iRedMail
На Хабре уже было несколько постов, описывающих данных почтовый сервер: тут и тут.
Если говорить кратко, то это бесплатный open-source почтовый сервер с веб-интерфейсом на базе связки Postfix+Dovecot+SpamAssassin+ClamAV+Roundcube. iRedMail прост в установке и работает «из коробки».
Немного о StartSSL
Так же на Хабре уже описывался процесс получения бесплатного сертификата от StartSSL. Хотелось бы отметить, что недавно StartSSL сменил оформление. На мой взгляд оно стало более приятным и простым.
Но более важным для меня стало то, что ещё год назад StartSSL не позволял подтвреждать домен 3-го уровня без владения доменом 2-го уровня, однако теперь эта возможность появилась. Т.е. ранее система не давала возможность отправить письмо с кодом подтверждения на электронную почту вида postmaster@subdomain.domain.com, любой домен 3-го уровня требовал подтверждения от postmaster@domain.com.
А теперь перейдем к сути.
Установка SSL сертификата от StartSSL
Для примера в качестве имени домена будем использовать example.com. Исходные данные:
- example.com.key (Запароленный RSA-ключ)
- example.com.txt (Файл, содержащий пароль к RSA-ключу)
- example.com.zip (Архив с сертификатами, скачанный со StartSSL)
Кладём эти файлы в один каталог и выполняем распаковку сертификатов.
chmod 755 ./example.com.zip
unzip -o ./example.com -d ./example.com
chmod -R 777 ./example.com
unzip -o ./example.com/ApacheServer -d ./example.com/ApacheServer
chmod -R 755 ./example.com/ApacheServer/*
Сконвертируем сертификаты издателя и домена из архива в PEM формат и склеим их вместе.
openssl x509 -in ./example.com/ApacheServer/1_root_bundle.crt -outform PEM -out ./example.com/ApacheServer/1_root_bundle.pem -text
openssl x509 -in ./example.com/ApacheServer/2_example.com.crt -outform PEM -out ./example.com/ApacheServer/2_example.com.pem -text
cat ./example.com/ApacheServer/2_example.com.pem ./example.com/ApacheServer/1_root_bundle.pem > ./iRedMail_CA.pem
chmod 755 ./iRedMail_CA.pem
Копируем полученные сертификаты в каталог etc/ssl/certs/ под стандартными именами для iRedMail. После копирования сменим владельца ключа для Postgresql.
\cp ./iRedMail_CA.pem /etc/ssl/certs/iRedMail_CA.pem
chmod 644 /etc/ssl/certs/iRedMail_CA.pem
\cp ./iRedMail_CA.pem /etc/ssl/certs/iRedMail_CA_PostgreSQL.pem
chmod 600 /etc/ssl/certs/iRedMail_CA_PostgreSQL.pem
chown postgres:postgres /etc/ssl/certs/iRedMail_CA_PostgreSQL.pem
Избавляемся от пароля в RSA-ключе.
openssl rsa -in ./example.com.key -outform PEM -out ./example.com.key.unprotected -passin pass:$(cat ./example.com.txt)
Копируем полученный RSA ключ в каталог /etc/ssl/private под стандартными именами для iRedMail. После копирования сменим владельца для ключа Postgresql.
\cp ./example.com.key.unprotected /etc/ssl/private/iRedMail.key
chmod 644 /etc/ssl/private/iRedMail.key
\cp ./example.com.key.unprotected /etc/ssl/private/iRedMail_PostgreSQL.key
chmod 600 /etc/ssl/private/iRedMail_PostgreSQL.key
chown postgres:postgres /etc/ssl/private/iRedMail_PostgreSQL.key
Перезапускаем сервисы:
service postgresql restart
service postfix restart
service dovecot restart
service apache2 restart
Проверяем работоспособность сервера.
Для автоматизации всего вышеописанного объединим всё в единый скрипт. В качестве переменной используем $domain.
#!/bin/bash
domain=example.com
chmod 755 ./$domain.zip
unzip -o ./${domain} -d ./${domain}
chmod -R 777 ./${domain}
unzip -o ./${domain}/ApacheServer -d ./${domain}/ApacheServer
chmod -R 755 ./${domain}/ApacheServer/*
openssl x509 -in ./${domain}/ApacheServer/1_root_bundle.crt -outform PEM -out ./${domain}/ApacheServer/1_root_bundle.pem -text
openssl x509 -in ./${domain}/ApacheServer/2_${domain}.crt -outform PEM -out ./${domain}/ApacheServer/2_${domain}.pem -text
cat ./${domain}/ApacheServer/2_${domain}.pem ./${domain}/ApacheServer/1_root_bundle.pem > /tmp/ssl/iRedMail_CA.pem
chmod 755 /tmp/ssl/iRedMail_CA.pem
\cp /tmp/ssl/iRedMail_CA.pem /etc/ssl/certs/iRedMail_CA.pem
chmod 644 /etc/ssl/certs/iRedMail_CA.pem
\cp /tmp/ssl/iRedMail_CA.pem /etc/ssl/certs/iRedMail_CA_PostgreSQL.pem
chmod 600 /etc/ssl/certs/iRedMail_CA_PostgreSQL.pem
chown postgres:postgres /etc/ssl/certs/iRedMail_CA_PostgreSQL.pem
openssl rsa -in ./${domain}.key -outform PEM -out ./${domain}.key.unprotected -passin pass:$(cat ./${domain}.txt)
\cp ./${domain}.key.unprotected /etc/ssl/private/iRedMail.key
chmod 644 /etc/ssl/private/iRedMail.key
\cp ./${domain}.key.unprotected /etc/ssl/private/iRedMail_PostgreSQL.key
chmod 600 /etc/ssl/private/iRedMail_PostgreSQL.key
chown postgres:postgres /etc/ssl/private/iRedMail_PostgreSQL.key
service postgresql restart
service postfix restart
service dovecot restart
service apache2 restart
Буду рад, если данный скрипт окажется кому-нибудь полезным. Спасибо за прочтение.
Комментарии (9)
voidMan
01.02.2016 13:41+2Также для let's encrypt есть руководства и собранные скрипты для автообновления сертификата и прочие плюшки. Например тут https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04
P.S. В ответ на nikolayvaganov
kvaps
02.02.2016 01:12+1Тоже постепенно перевожу все свои проекты на Let's Encrypt. Для себя создал удобный docker-образ на основе официального.
Если кому пригодится, буду только рад.
hub.docker.com/r/kvaps/letsencrypt-webroot
Например в моем образе Kolab (тоже почтовый сервер) полностью автоматизированно. Благодаря Let's Encrypt теперь об этом не надо даже думать ^^
nikolayvaganov
Долгое время сидел на startssl, есть один недостаток, когда профукал время продления сертификата, то очень долго ( может у меня так ) идет новый сертификат ( мне кажется, там полуавтоматический выпуск ). Сейчас c сертификатами от let's encrypt проблем нет. Большой плюс let's encrypt — моментальный выпуск, сразу вместе с сертификатом идет цепочка и не нужно лишних телодвижений, особенно для nginx.
DuH_Khv
Касательно полуавтоматической обработки при перевыпуске сертификата StartSSL ничего не могу сказать, однако один из новых сертификатов у меня тоже выпустился с небольшой задержкой. По поводу лишних телодвижений с nginx — StartSSL сейчас предоставляет сертификаты ZIP-архиве, содержащим набор сертификатов в разных форматах для разных сервисов. В том числе и для nginx. Проверил сейчас и действительно в сертификате сразу вся цепочка содержится. Был бы внимательнее — использовал данный факт при написании скрипта и не склеивал бы сертификаты сам. А по поводу let's crypt — читал много статей. Сервис только недавно вышел на публику. Статьи были в основном хвалебные, но некоторые люди отмечали, как недостаток, недолгий срок действия сертификатов. Даже учитывая тот факт, что можно настроить автоматическое продление, лично меня это немного пугает.
nikolayvaganov
let's encrypt — действительно сейчас в активной бете, но именно поддержка IT сообщества ( и чем больше, тем лучше ) покажет заинтересованность в сервисе. Ни в коем случае не говорю, что startssl лучше/хуже, но на данный момент let's encrypt — приятная альтернатива. Из пунктов могу отметить:
1. Моментальный выпуск сертификата
2. Даже при текущем выпуске на три месяца уже есть готовые решения для автоматического перевыпуска ( ответили ниже )
3. При сворачивании проекта всегда можно будет вернуться на аналоги, в том числе на startssl.
Одним из минусов startssl считаю, что по факту сертификаты выпускаются только под личные проекты, не приносящие денег. Это, скорее всего, после выпуска сертификата не проверяется, но под бизнес проекты все же немного страшно выпускать сертификат от startssl.
DuH_Khv
Искренне хотелось бы узнать, чем обоснованы ваши опасения, ибо использую эти сертификаты в нескольких не очень крупных организациях.
istui
у меня не захотели выпускать серт на интернет-магазин. Пришлось идти к WoSign. Let's Encrypt для данного случая не подходит, т.к. требует работы агента на сервере (а сайт магазина находится на хостинге).
На других проектах пробовал LE, сразу после выхода в бету. Не понравилась необходимость давать права рута, даже если по факту они не требуются. Как обстоят дела сейчас — не в курсе, надо попробовать в ближайшее время.
StartSSL порадовал обновленным интерфейсом, быстрой выдачей и поддержкой поддоменов. Теперь не надо тратиться на IV для серта с N поддоменами (можно выпустить вместо этого N-1 сертификат). IV сейчас необходима разве что для code signing…
IncorrecTSW
Я может ошибаюсь, но ничего не требует. Делаем в ручном режиме, указываем домен (список доменов), кидаем туда файлик проверочный и получаем свой сертификат. Уже использую на нескольких проектах, подводных камней не обнаружено.