Сейчас 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 — могут быть тяжелые последствия. Ищем соответствующие переменные в существующем конфиге.
На этом все, предложения и замечания в коментариях.