Получение и установка SSL сертификата для почтового сервера (Postfix, Dovecot и Apache)

Автор: Admin | 28.02.2013

Как я получал и прикручивал SSL сертификат для защиты трафика почтового сервера

Что требуется:
Шифрование почтовых сообщений на всех протоколах по которым они ходят.

Исходные данные:
Домен - notessysadmin.com
MX сервер (доменное имя на котором крутится почтарь) - mail.notessysadmin.com, он же сайт с вебмордой
Шифруемые протоколы - SMTP, POP, IMAP, HTTP

Получал сертификат у регистратора домена, т.е. на nic.ru. Там есть неплохой мануал, но, почему-то, они думают что сертификаты используются только для WEB, дальше объясню почему.

Заказал самый дешевый сертификат для физического лица на февраль 2013г. - "Thawte SSL123" на три года за 6570р. В общем-то не дорого, по сравнению с другими.
Стоит отметить, что данный сетрификат поддерживает только одно доменное имя, а не один домен. И может:
1. шифровать трафик
2. удостоверять владельца сайта
Если не заниматься электронной коммерцией и не заботиться о безопасности электронной корреспонденции, то по сути, авторизированная подпись и не нужна, но google mail с недавних пор перестал доверять самоподписным сертификатам при импорте почты из других почтовых служб. Поэтому и пришлось прикручивать доверенный сертификат.

Вообще, не лишним будет прочесть это.

Итак, для начала нужен CSR, как написано на nic.ru это:

"CRS(Certificate Signing Request) — запрос на получение сертификата, который представляет собой текстовый файл, содержащий в закодированном виде информацию об администраторе домена и открытый ключ."

Генерируем. Rucenter предлагает сгенерить приватный ключ для апача такой командой:

openssl genrsa -des3 -out private.key 2048

В общем-то команда правильная и, если предполагается шифровать только HTTP, POP и IMAP, то можно делать как написано и дальше не читать. Но Postfix такой ключ не примет и заставить его никак нельзя (но к голубятне и индейцу прикрутить все-же можно). В официальном руководстве Postfix'а написано:

In order to use TLS, the Postfix SMTP server generally needs a certificate and a private key. Both must be in "PEM" format. The private key must not be encrypted, meaning: the key must be accessible without a password.

Т.е. приватный ключ должен быть без пароля. За создание пароля отвечает параметр -des3, поэтому надо сгенерировать без него, переходим в каталог в котором будут храниться пароли и генерим сначала приватный ключ:

mkdir /etc/serts
cd /etc/serts
openssl genrsa -out private.key 2048

который выглядит примерно так:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA3U5AA34tOQxISLiVKMK3DAAmRColopu9X1IUMCJZpZMnyprS
xgcsWfdbfPmU/m9XkFXcsJAFvfkzjfQEPCxB42wYrpxwB9IMygyq1lfxyAVJspQY
RELFsNphfa7lxlG9imma4zhRpvY2PzdVO1Xs8hsrmYPH7bt7p7y171chvQDn3K7A
mVpGzU8VEJW0iJ8mv+LnAp+LaSrTPCKZ+U+MFDQl+UkpOqUL3l/iRZ/IIxXpnzhU
3g2cGApWDJKOHgkukOMGJfWLk4L8sv1KKXxTMJrZOxsg12MOfmJ0RYXhMaGIsT5H
wQyLzH6CFqefw0K5YZzGCrpYGyLT4q33ihKpbwIDAQABAoIBAAsaWevS8MHj89xy
JkmdO0HG4CSbWLgHyEB4BbtEferorx5jFiAJTBhXaKekfe0l+Oas6B2TnDYjwopk
q7G5JrUaP0LDZnt99lZMvGV0lBTM7x2egHksQG7XBf0gQTbp8vB2y+aKdM5DnAUf
6Y7IiNK8ujtBeU5cEaAgv5/6Zx7sTMg6AqoId1NghwgHtObsog4BUm/9hHRyx1Yl
p9qVa16+dCPUAXt2AagPFb4LJ5PRtQNNbOT+yhzYEYTB86odvaxo5pA6Z1uSGNlN
+01gTX18XTehozV3GHlxDmJzkH6BMdq2sn5XxcqwYdAQ5eiVAj2CAVr8NpP9CUHf
LRiFOMECgYEA/OvP8DSLSdeYnru3LrqX1Q+ghZPQve5mjC0dlfcQhRqgN+jAYeiQ
NUdQ9qjwP5uoQ3TbBgZ8QqzHlXxbUfjhdKLsVVz/a0ure1jLUM9fkzk4wxXyuan5
r0/LMk4w3XmiehEGEF95jTHnj3kdswidwGOjtMDR1Wz/f5qpZiosLsMCgYEA3//p
zPbwhHJMYvqmtAD8B/v8labeprVgUtI2YMxEytrqSNN7SOtY9KN1Pg36douwO0O2
XPrI2rF5sT0ajM04j2goSexjyJ0P16qi+lYYKqZD+m2AAbgh5u0R+hAYXd+6g2vb
AMyIFXVcDB5DEztaAiOjMyh2Z0IZk+YxfrZMh+UCgYEAvv4MTqY/MQoAFI5IrJ73
nUtpurV/Ao6PHffLyb2C2iDbMJ0w+j6296TdPQciNcaD8DzEUO6A05DKPtZj16kM
CBooQeYyc4H3AvRwxJt03yZs+NUQMKhtBrhJB7oIKJd73JYScDbJAZjX9n5NsS8m
gWw86XhafMMMxf2zQpVCPCUCgYAm/PUl3sloVDildbk0VYOIpDyHk77nR2SXpc0f
Ng63PDlRKbYosAYQtq6+eVJh9dhbyGJidqglIITs65TGcyXoGBoDG+kWTvgl8qZh
akDUk5H7cbm5EuKbviHF461KEZn2K/y3e+In0gCOf2nvXAJDow5R5jYNrPykuIle
474YXQKBgQCZ0cCsJz62+aBIfThdGFtuhUcV1ymZj6SB6GrxVYDelqD6yIgVETeZ
YohsgNkOyV2hPk2O3n+t96zPGfoyvhXqM4AVJg/AhLeucISsGQbUMeNYwrfzqvY1
jX62wKcIHUlPzl79kpDsc6mBbcr3z+xcR7JdqZNrnMas71532efiSg==
-----END RSA PRIVATE KEY-----

а затем и CSR ключ, где notessysadmin.com - название именно домена, а не того доменного имени для которого делается сертификат. По ходу надо ответить на несколько вопросов, при чем надо быть внимательным, т.к. исправить уже будет нельзя, только перевыпустить:

# openssl req -new -key private.key -out notessysadmin.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Tomsk State
Locality Name (eg, city) []:Tomsk
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:mail.notessysadmin.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

там где ответил (выделено жирным) - поля обязательные для заполнения, где нет не обязательные. Но все-равно отображение названия компании My Company при просмотре сертификата не будет, т.к. его тип этого не подразумевает, а так же сама процедура не проводит проверку компании на валидность, только владение доменом.
Появился файл запроса notessysadmin.com.csr:

-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCUlUxFDASBgNVBAgMC1RvbXNrIFN0YXRl
MQ4wDAYDVQQHDAVUb21zazETMBEGA1UECgwKTXkgQ29tcGFueTEfMB0GA1UEAwwW
bWFpbC5ub3Rlc3N5c2FkbWluLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAN1OQAN+LTkMSEi4lSjCtwwAJkQqJaKbvV9SFDAiWaWTJ8qa0sYHLFn3
W3z5lP5vV5BV3LCQBb35M430BDwsQeNsGK6ccAfSDMoMqtZX8cgFSbKUGERCxbDa
YX2u5cZRvYppmuM4Uab2Nj83VTtV7PIbK5mDx+27e6e8te9XIb0A59yuwJlaRs1P
FRCVtIifJr/i5wKfi2kq0zwimflPjBQ0JflJKTqlC95f4kWfyCMV6Z84VN4NnBgK
VgySjh4JLpDjBiX1i5OC/LL9Sil8UzCa2TsbINdjDn5idEWF4TGhiLE+R8EMi8x+
ghann8NCuWGcxgq6WBsi0+Kt94oSqW8CAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IB
AQCVx4yk/Wi6Fav9fk0XEbVceNoe2+yKnD3jF7DOhpE2wqpwEn8/zBixzBb+M4DJ
28EfSv08raKHJPqp1/3/OiE5xpYFUN8BaNYfsFEiMeUQg8NOuC4mw77VQaD6pRzL
wTrSHXoOStEUgz2AB6EuMMZUbDNMDIKKTsveTlBrCFOU67g2YtwqqYWmoIevDdso
wwVp3TYl77A4jixqw+YBvSwycSbIewLu52C3GTb7gsRBdqVem0fwQgQKAhuzVXvv
2mmeBu8b6JNbQe37svaCzBQMVy6vBmBwsG6jhtT1rDI/WMv2QiIkR/9FoSGvqUkN
Y4giVfLuEXxtQe/Na5tTem4t
-----END CERTIFICATE REQUEST-----

Вводим в поле CSR на сайте, настраиваем нехитрые парамертры и отсылаем запрос.
Через несколько минут приходит письмо с thawte.com о просьбе подтверждения заказа, затем еще одно и, примерно через час, с nic.ru о том что процедура выпуска сертификата успешно завершена со ссылкой на сам сертификат.
Для скачивания предоставлены четыре сертификата: корневой, два промежуточный и сертификат на домен mail.notessysadmin.com, качаем все.

Опять же с никру:

Промежуточный корневой сертификат является связующим звеном в иерархической цепочке сертификатов. С его помощью пользователь сайта, на котором установлен сертификат, может проверить всю цепочку доверия и убедиться в подлинности выпущенного сертификата.

другими словами это сертификат центра сертификации (CA - Certification authority), а вот зачем их два - хз, сначала подумал чтобы показать всю цепочку от созданного сертификата до корня, но опытным путем выяснилось, что апач нормально принимает рутовый сертификат (т.е. при заходе на https://mail.notessysadmin.com не выскакивает окно о предупреждении), а вот отправка и прием из клиента Mozilla Thunderbird рутовый сертификат не принимался, но подошел один из промежуточных.

Переименовываем и копируем ключи из полученных файлов на сервер:

mail_notessysadmin_com_YYYY_MM_DD.crt -> mail.notessysadmin.com.crt
root_pem_thawte_ssl123_1.crt -> root.crt
intermediate_pem_thawte_ssl123_1.crt -> intermediate1
intermediate_pem_thawte_ssl123_2.crt -> intermediate2

по сути назвать их можно как угодно.

В итоге в /etc/serts получилось шесть файлов:
private.key - созданный ранее приватный ключ
notessysadmin.com.csr - запрос на сертификат, теперь можно удалить
root.crt - корневой сертификат thawte
intermediate1 - первый промежуточный сертификат
intermediate2 - второй промежуточный сертификат
mail.notessysadmin.com.crt - сам сертификат, ради которого все и затевалось

В общем-то все. Настройка демонов на SSL шифрование тема отдельной статьи, приведу только блоки с сертификатами:

#Apache - конфиг файла с доменом:
SSLCertificateKeyFile "/etc/certs/private.key"
SSLCertificateFile "/etc/certs/mail.notessysadmin.com.crt"
SSLCACertificateFile "/etc/certs/root.crt"

#Dovecot - dovecot.conf:
ssl_cert_file = /etc/certs/mail.notessysadmin.com.crt
ssl_key_file = /etc/certs/private.key
ssl_ca_file = /etc/certs/intermediate2.crt

#Postfix - main.cf:
smtpd_tls_key_file = /etc/certs/private.key
smtpd_tls_cert_file = /etc/certs/mail.notessysadmin.com.crt
smtpd_tls_CAfile = /etc/certs/intermediate2.crt

Если все правильно настроено, то сертификаты не будут просить подтверждения исключения безопасности и не добавятся к списку серверов почтового клиента в управлении сертификатами. Все должно работать.

UPD. Можно получить бесплатный сертификат такого же типа, который описан в заметке, только на один год, на startssl.com. Подробное описание как это сделать. Пользуюсь данным сервисом уже года два, рекомендую. Продлить данный сертификат, как и любой другой - нельзя, только перевыпустить.

Комментарии к посту “Получение и установка SSL сертификата для почтового сервера (Postfix, Dovecot и Apache)

  1. Виталий Парфенов

    In order to use TLS, the Postfix SMTP server generally needs a certificate and a private key. Both must be in «PEM» format. The private key must not be encrypted, meaning: the key must be accessible without a password.

    А как же формат .pem? SMTP будет работать и с .key .crt?

    1. admin

      Цитата приводилась ради «must be … without a password»
      Да, SMTP будет работать и с .key, и с .crt.

  2. Владимир

    У меня такая же проблема.. Не пойму на какое доменное имя выпускать сертификат на mx.mydomain.ru (который ссылается на IP где крутиться почтарь с вебмордой) или mydomain.ru (сам сайт на другом IP)

    1. admin Автор записи

      Конечно на mx.mydomain.ru, при чем тут сайт на mydomain.ru?
      Вообще, статья написана до существования Let’s Encrypt, поэтому советую воспользоваться именно им, а не покупать сертификат.

        1. admin Автор записи

          Не совсем понял какое письмо и откуда. Скажите что сделали, тогда можно будет подумать конкретно.

          1. Владимир

            nic.ru отправил письмо мне на этот адрес для проверки существования домена, а у меня почта admin@mydomain.ru

            1. admin Автор записи

              Вы сертификат уже купили на nic.ru? Предлагаю перейти в почту, напишите на admindoggynotessysadmindotcom

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *