Фотогалереи

Услуги

Помощь при использовании сайта

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

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

1
1 голос
Ваша оценка: Нет


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
Аватар пользователя anonymous

Спасибо за статью. Подскажите, каким образом вы формируете "ssl_enc.key - Публичный ключ"?

Аватар пользователя admin

Пара ключей (приватный и публичный) генерируется как бы сказать мастером на сайте StartSSL. Также в процессе можно задать битность шифрования и пароль. После этого Вам выдается ключ в текстовом формате. Сохраняете их оба и все. Главное не потеряйте эту пару, а то я как то по невнимательности для одного домена создал пару, а потом решил пересоздать их с другой битностью шифрования. Перезаписал ключи, и все, пришлось подписывать другой поддомен, так как можно создать только 1 пару ключей для 1 поддомена.

Аватар пользователя anonymous

Спасибо за оперативный ответ.

В таком случае, видимо, необходимо исправить: ключ должен быть не открытый, а закрытый, так как именно закрытым ключем письма шифруются, а открытым расшифровываются (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-го уровня позволяется подписать одному пользователю?

Аватар пользователя admin

Насколько я помню, то ограничений нет. Но как я говорил, можно только один серт под определенное доменное имя. Другими словами можно нагенерировать неограниченное количество поддоменов и подписать для них сертификаты. Но для одного поддомена только один (отзыв сертификата стоит денег, по моему $29)

Вы меня запутали. Насколько я знаю, сами письма не шифруются, шифруется соединение между клиентом и сервером, либо от MTA к MTA при передаче письма к серверу ответственному за определенную зону (MX запись).
По поводу ключей. Я не вижу смысла генерить ключи самому ибо все равно потом подписывать их надо в StartSSL. А написал так потому, что так было написано в админке StartSSL)).