Бесплатные SSL сертификаты и их установка в nginx postfix dovecot и ejabberd
Сейчас SSL сертификаты можно получить бесплатно и те кому интересна данная тема без труда найдут информацию о получении бесплатных сертификатов StartSSL. Есть хорошая статья по этому поводу на Хабре, поэтому я не буду останавливаться подробно на процессе получения самих ключей и сертификатов, а перейду сразу к процессингу настройки почтового сервера,веб сервера... для работы с SSL.
Итак. Подразумевается, что уже имеете секретный ключ и сертификат подписанный StartSSL. Сразу хочу сказать, что все ключи и сертификат нужно надежно сохранить как минимум до момента, когда вы убедились, что все сертификаты корректно работают на сервере, а лучше всего до окончания срока их действия (1 год).
Введу некоторые обозначения:
- ssl.key - Приватный ключ
- ssl.crt - Сертификат подписанный StartSSL
- ssl_enc.key - Публичный ключ
- sub.class1.server.ca.pem - Сертификат промежуточного CA
- ca-bundle.pem - Цепочка сертификатов
- ca.pem - Сертификат корневого CA
Скачать недостающие сертификаты можно здесь
Начнем с самого простого
Nginx
Сначала создадим файл сертификата который будет понимать nginx:
cat ssl.crt sub.class1.server.ca.pem ca.pem > /etc/ssl/nginx/nginx.crt
cp ssl_enc.key /etc/ssl/nginx/nginx.key
Далее очень рекомендую изучить мою небольшую заметку по сертификатам, потому как если не следовать инструкции описаной в ней - работать ничего не будет. Данное правило справедливо для всех сертификатов (dovecot,postfix,nginx,ejabberd)
Установим нужного владельца и права на ключи и сертификаты
chown -R root:root && chmod -R 400 /etc/ssl/nginx/nginx.*
Теперь настроим сам nginx путем добавления некоторых строк в конфиг. Добавлять нужно в директиву server
server { ssl on; ssl_certificate /etc/ssl/nginx/nginx.crt; ssl_certificate_key /etc/ssl/nginx/nginx.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; listen 443 ssl;
Показал только строки которые нужно добавить.
Проверяем валидность конфига:
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
И стартуем сервер.
Теперь проверим работу всего этого:
openssl s_client -connect -CApath /etc/ssl/certs/ yourdomain.ru:443
Видим примерно такой листинг:
CONNECTED(00000003) depth=2 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority verify return:1 depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA verify return:1 depth=0 C = RU, CN = host.yourdomain.ru, emailAddress = postmaster@yourdomain.ru verify return:1
Если ошибок нет, то значит все работает как надо
Postfix
Создадим нужные файлы и для постфикса.
cp ssl.crt /etc/ssl/postfix/postfix.crt cp ssl_enc.key /etc/ssl/postfix/postfix.key cp ca.pem /etc/ssl/postfix
Сменим права и владельца файлов:
chown -R root:postfix /etc/ssl/postfix/* chmod -R 400 /etc/ssl/postfix/*
Открываем конфиг постфикса
nano -w /etc/postfix/main.cf
И добавляем в него следующее если еще не включено:
smtpd_tls_CAfile = /etc/ssl/postfix/ca.pem smtpd_tls_cert_file = /etc/ssl/postfix/postfix.crt smtpd_tls_key_file = /etc/ssl/postfix/postfix.key smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache smtpd_use_tls = yes smtpd_tls_security_level = may smtpd_tls_received_header = yes smtpd_tls_loglevel = 0 smtpd_tls_auth_only = yes
smtp_tls_CAfile = /etc/ssl/postfix/ca.pem smtp_tls_cert_file = /etc/ssl/postfix/postfix.crt smtp_tls_key_file = /etc/ssl/postfix/postfix.key smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache smtp_use_tls = yes
Закрываем конфиг и переходим к Dovecot
Dovecot
Все делаем по аналогии:
cat ssl.crt sub.class1.server.ca.pem > /etc/ssl/dovecot/dovecot.crt
cp ssl_enc.key /etc/ssl/dovecot/dovecot.key
Установим права:
chown -R root:root /etc/ssl/dovecot/dovecot.* chmod -R 400 /etc/ssl/dovecot/dovecot.*
Теперь откроем конфиг ssl dovecot
nano -w /etc/dovecot/conf.d/10-ssl.conf
ssl = yes ssl_cert = /etc/ssl/dovecot/dovecot.crt ssl_key = /etc/ssl/dovecot/dovecot.key ssl_ca = /etc/ssl/dovecot/ca-bundle.pem
Рестартим постфикс и довкот, а потом проверяем работу сертификатов:
openssl s_client -CApath /etc/ssl/certs/ -connect hostname.domain.ru:25 -starttls smtp
openssl s_client -CApath /etc/ssl/certs/ -connect hostname.domain.ru:993
Опять же если ошибок нет - то все работает как надо.
Ejabberd
cat ssl.crt sub.class1.server.ca.pem ca.pem ssl_enc.key > /etc/ssl/ejabberd/jabber.crt
Сменим права и пользователя:
chown -R ejabberd:ejabberd /etc/ssl/ejabberd/jabber.crt chmod 400 /etc/ssl/ejabberd/jabber.crt
Само собой chown делаем на того пользователя и группу от которого запускается Ejabberd. В моем случае (Debian 7) это ejabberd.
Теперь открываем конфиг и включаем tls на сервере ejabberd:
{certfile, "/etc/ssl/ejabberd/jabber.crt"}, starttls, {s2s_use_starttls, optional}. {s2s_certfile, "/etc/ssl/ejabberd/jabber.crt"}.
Не советую копировать отсюда куски конфига ejabberd - могут быть тяжелые последствия. Ищем соответствующие переменные в существующем конфиге.
На этом все, предложения и замечания в коментариях.
Спасибо за статью. Подскажите, каким образом вы формируете "ssl_enc.key - Публичный ключ"?
Пара ключей (приватный и публичный) генерируется как бы сказать мастером на сайте StartSSL. Также в процессе можно задать битность шифрования и пароль. После этого Вам выдается ключ в текстовом формате. Сохраняете их оба и все. Главное не потеряйте эту пару, а то я как то по невнимательности для одного домена создал пару, а потом решил пересоздать их с другой битностью шифрования. Перезаписал ключи, и все, пришлось подписывать другой поддомен, так как можно создать только 1 пару ключей для 1 поддомена.
Спасибо за оперативный ответ.
В таком случае, видимо, необходимо исправить: ключ должен быть не открытый, а закрытый, так как именно закрытым ключем письма шифруются, а открытым расшифровываются (Postfix должен зашифровать письма перед отправкой, не так ли ?) Открытый же ключ содержится в сертификате. Во всяком случае у меня только так заработало:
cp ssl.crt /etc/ssl/postfix/postfix.crt
cp ssl.key /etc/ssl/postfix/postfix.key
cp ca.pem /etc/ssl/postfix
Ключи и сертификат я генерирую на сервере с помощью openssl, поэтому они на серваке и хранятся. Только подписанный сертификат остается скачать с startssl.
Статья прекрасная - лаконично и юзабельно.
Вам, как пользователю startssl, еще вопросик) Сколько сертификатов 1-го уровня позволяется подписать одному пользователю?
Насколько я помню, то ограничений нет. Но как я говорил, можно только один серт под определенное доменное имя. Другими словами можно нагенерировать неограниченное количество поддоменов и подписать для них сертификаты. Но для одного поддомена только один (отзыв сертификата стоит денег, по моему $29)
Вы меня запутали. Насколько я знаю, сами письма не шифруются, шифруется соединение между клиентом и сервером, либо от MTA к MTA при передаче письма к серверу ответственному за определенную зону (MX запись).
По поводу ключей. Я не вижу смысла генерить ключи самому ибо все равно потом подписывать их надо в StartSSL. А написал так потому, что так было написано в админке StartSSL)).