Бесплатные 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 = [email protected]
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 — могут быть тяжелые последствия. Ищем соответствующие переменные в существующем конфиге.

На этом все, предложения и замечания в коментариях.

Оцените статью