[Из песочницы] Быстрая установка SSL сертификата от StartSSL в почтовом сервере iRedMail

В повседневной практике использования почтового сервера iRedMail возникает необходимость замены SSL сертификатов (как при первичной установке, так и ежегодная смена). В топике описан процесс смены SSL сертификатов для iRedMail от StartSSL и предложен скрипт, позволяющий автоматизировать все необходимые действия.

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

Немного об 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. Исходные данные:

  1. example.com.key (Запароленный RSA-ключ)
  2. example.com.txt (Файл, содержащий пароль к RSA-ключу)
  3. 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


Буду рад, если данный скрипт окажется кому-нибудь полезным. Спасибо за прочтение.

© Habrahabr.ru