В повседневной практике использования почтового сервера 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. Исходные данные:
- 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
Буду рад, если данный скрипт окажется кому-нибудь полезным. Спасибо за прочтение.
Автор: DuH_Khv