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

Автор: Admin | 28.02.2013
4 комментария | 26 459 views

Как я получал и прикручивал 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.

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

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