Home » Linux » Бесплатный ssl сертификат для postfix

Бесплатный ssl сертификат для postfix

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

Из этой статьи вы узнаете:

Получение бесплатного ssl сертификата

Бесплатно получить сертификат можно на сайте startssl.com. Для этого нужно зарегистрироваться, зайти в панель управления. Последовательность действия такова:

  • Сначала подтверждаем право владения доменом
  • Потом выпускаем сертификат для домена сроком на год

Для подтверждения владения доменом достаточно получить проверочный код на один из ящиков: postmaster, hostmaster или webmaster. Если у вас есть доступ к одному из этих ящиков, вы сможете выпустить сертификат для своего сайта.

Итак, подтверждаем право владения в пункте меню Validations Wizard. Там достаточно просто пройти по шагам, не буду на этом останавливаться подробно. Важнее правильно выпустить ssl сертификат, чтобы потом не было проблем. После того, как подтвердили, что домен ваш, приступайте к генерации сертификата. Для этого выбираем пункт Certificates Wizard.

В выпадающем списке указываем тип сертификата — web server SSL/TLS Сertificate. Дальше нужно сформировать Private Key. Сделать это можно как тут же, на сайте, либо загрузить свой. Визард на сайте не позволяет создать приватный ключ без пароля, но если его создать с паролем, то postfix не будет с ним работать. Так что будем генерировать приватный ключ сами.

Для этого идем на сервер, на котором должен быть установлен OpenSSL, и выполняем там команды:

# mkdir /root/ssl
# cd /root/ssl
# openssl genrsa -out private.key 2048

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

# cat private.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAxn5az13u/oZa3CXgkQiGNGuEvY5GFjXXXuIoWC+VaE99uWjI
NMKvyzKctLpCIz6066WNzb/NaBR2RVhQn/TrWMyapY1WGVrq4XEQ6veRzAAus6Is
iea31nn+n46Z9aN2iAZjpkIuhsQHRwzjgCkoAIPMDhMtMmcoa2DH5GV1Aq8yHrjf
WNCY53+7/uq60kg+MpNxePDdhe2c8Qs9qEcnMG8Ew3DzjPPZfUa2zsq5g1eCoP5O
aDNtD9lWeCZBWgG1fVj0C7ydHV9H5HU9tMdHXZH8PcLZ4sf4a3Dub1t9klYNIcxG
HlaOKaPzouM78UHSOPdnrg1I8+nvREDKJ27IPQIDAQABAoIBAFGK2O11blgbg7oK
yW1rbg6c2OQyTXKUXcy55c8MhTlb5o9Dj3O1QxibyyqnlcH64cIouc97avvF5Cxq
snxz1jcdnq5CVMvDwNgqZcPRPpDqxkS/a8KfCIjQhxyvLWpu46PP1CIZ8Bkm8MJs
dg1RWwCTJEHn+NpK7JzoHlYio+Ycrv92NcZ8PMrobkwwrBmJx2WvryRe1YgXL58z
TvNxXnfiITAwCLMu7fBZvFWs7hY4XLZP7YjSxhIsoZeTRpt4RZ1gniSAfYZOffq1
HFAokdn2f00nVHjRvFcwQeP0+QBGZvGL2IgllO4IFBsBSDp4IwawT9fFi71BVLcy
1nmHYbUCgYEA9VOFHjgx4NbWXKs+jeiFIIY8Hmsmu+v2j+eWBMiamgxkHnJQKqD0
lGagww6uIMqxH3r6XJ8ZJlygCH7fZRpSA2rPIReJwWUHU9R4pZOVUyp8t3iHFV78
SAcgrl2NzROiq5OgGYmh1VmoHIgJZ1VCNO5AMTsyNhs5Rnm89XrJ4XsCgYEAzyE0
mTG3YbTkWi1CE2PajiLw6x/WTZ4Q4QcIq6n0+DvWP/hwcu78gt9oCP+M8WM1/w34
uc0hoJhJ7/XTkR0/UArG8yr7L2g+MMypnz1Smzj3ML+nyfPLo9TrCj1EwapD6OHZ
qGR1TvAYHhX1tR6HcKaQxhz/uXLQdNVwHk40w6cCgYAdhv/uszTNqw4B+Vp+Gg5r
67wwrRTsaWozx9v2l26EPBmQ0JF1kAngEromwA2VRNAsydB4dW3BgESCwUKCGLjm
UGS9xud9r3tCS8B5rVm7uNFqA8e+esBCqxjz4669kC90F0Cd0kL4OuJRDM6U8V4W
oNZ5FnbkrEIoiV6E7VJ/IQKBgHSoQAaUELOP/Rio6tEe6SYqmcPjT4CxqNIEcyaz
90uj79xhoXuqDD/tcZu3ynrdpLi89rw2w1y+yM3Eh17wuQrstvaX25bswDOqYpJU
KGVSJS6okujUTXo9Xg+LSGFG8y6DnWIRClzmLr8rIRLcWe3hciKSjJi3CJ7040u+
Qkt7AoGBAMbmmth493sx6K0lT1VGkqg50v5auku17MobvXE4VDZFk/fHoad+ql1D
4C0V55eBOxCYFa2yG+Aba6WynYUJ6oD1M6oK29xRVGzjj8ptbRh1XbdxKXuILWVd
/bVZnDthvZ2S/l494upw9oC65wp96041F0MHSKOt8EwiKZ96MIma
-----END RSA PRIVATE KEY-----

Затем создаем CSR ключ. Аккуратно отвечаем на все вопросы. Изменить введенную информацию будет нельзя, придется перевыпускать сертификат. Этот сервис перевыпустить сертификат бесплатно не позволит. Так что делаем все аккуратно:

# openssl req -new -key private.key -out zeroxzed.ru.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) [XX]:RU
State or Province Name (full name) []:Moscow state
Locality Name (eg, city) [Default City]:Moscow
Organization Name (eg, company) [Default Company Ltd]:zeroxzed
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mail.zeroxzed.ru
Email Address []:root@zeroxzed.ru

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

Жирным я отметил те пункты, что вводил сам, остальное оставил как было. На выходе имеем файл запроса на сертификат:

# cat zeroxzed.ru.csr

-----BEGIN CERTIFICATE REQUEST-----
MIICyjCCAbICAQAwgYQxCzAJBgNVBAYTAlJVMRUwEwYDVQQIDAxNb3Njb3cgc3Rh
dGUxDzANBgNVEAcMBk1vc2NvdzERMA8GA1UECgwIemVyb3h6ZWQxGTAXBgNVBAMM
EG1haWwuemVyb3h6ZWQucnUxHzAdBgkqhkiG9w0BCQEWEHJvb3RAemVyb3h6ZWQu
cnUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGflrPXe7+hlrcJeCR
CIY0a4S9jkYWNdde4ihYL5VoT325aMT0wq/LMpy0ukIjPrTrpY3Nv81oFHZFWFCf
9OtYzJqljVYZWurhcRDq95HMAC6zoiyJ5rfWef6fjpn1o3aIBmOmQi6GxAdHDOOA
KSgAg8wOEy0yZyhrYMfkZXUCrzIeuN9Y0Jjnf7v+6rrSSD4yk3F48N2F7ZzxCz2o
RycwbwTDcPOM89l9RrbOyrmDV4Kg/k5oM20P2VZ4JkFaAbV9WPQLvJ0dX0fkdT20
x0ddkfw9wtnix/hrcO5vW32SVg0hzEYeVo4po/Oi4zvxQdI492euDUjz6e9E8Mon
bsg9AgMBAAGgADANBgkqhkiG9w0BAQDFAAOCAQEAsUnBtUV7WMtIdbCoMv75U1X2
EOhaO8hm8NwJM7mNsCBhI4p/XsOwc0712TbJS0exoWLD86/2NIkSiWBAf14UaXOE
TcrNxcvVTCnrrJmO0mxlCiLWpFJPe+v6pTnMhJXSPdxEdnqVlRGEUYw1FlsKHgd0
eSzlQXyHZq4o/KRvZpJeSqj+xZKn3P9XuNVYWqa9EPDtNx+QoGYT/2JzvWKtGBBV
fx8wLSLTIHRHUUu7ildClAmkKcR/lnFuW5ZePC8pg5N2wO7SdVVYhuCskWWPlh75
sFrWrBjYLynTDcwpXeEOOCRE6FXOoLrjV9I1wEpkrnopQpt4Dn9Q4PGnV7r70A==
-----END CERTIFICATE REQUEST-----

Запрос на сертификат сформировали, теперь идем снова на сайт. Мы находились на первом этапе запроса сертификата, когда нужно было сформировать pravate key. Так как мы его создали сами, нажимаем на Skip. В открывшейся форме вводим наш Certificate Request. На следующем шаге выбираем подтвержденный домен и вводим один поддомен, который хотим добавить в сертификат. В бесплатной версии можно выпустить сертификат на домен и один поддомен.

На завершающем этапе получаем сформированный сертификат. Копируем его к себе и сохраняем, попутно скачиваем корневой сертификат, он нам позже пригодится.

Бесплатный ssl сертификат

На этом получение бесплатного сертификата окончено. Нам понадобятся в будущем 3 файла: zeroxzed.key, zeroxzed.crt, sub.class1.server.ca.pem.

Настраиваем postfix на использование ssl сертификата

Теперь настроим postfix для поддержки им SSL/TLS соединений. Для этого нужно сначала подготовить файл, включающий в себя 2 сертификата: наш для домена и корневой.

# cat zeroxzed.ru.crt sub.class1.server.ca.pem >> zeroxzed.ru.crt+ca

Изменяем конфиг postfix main.cf. Добавляем туда следующие строки:

smtpd_tls_cert_file = /root/ssl/zeroxzed.ru.crt
smtpd_tls_key_file = /root/ssl/zeroxzed.ru.crt.key
smtpd_tls_CAfile = /root/ssl/zeroxzed.ru.crt+ca
smtpd_use_tls = yes
smtpd_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtp_tls_security_level = may

Для применения изменений перезапускаем postfix и проверяем. Не забудьте открыть необходимые порты на фаерволе для работы защищенных соединений. Проверить работу ssl соединения постфикс можно следующим образом:

#  openssl s_client -starttls smtp -showcerts -connect localhost:25
Server certificate
subject=/C=RU/CN=mail.zeroxzed.ru/emailAddress=root@zeroxzed.ru
issuer=/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
---
No client certificate CA names sent
---
SSL handshake has read 4048 bytes and written 354 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 9A832A0BF1DE2907D8D24797D8178B4C90D7D5ADDCFD6CF39A95FB234CD7B3A9
Session-ID-ctx:
Master-Key: B0AFCAD300C0EBBE8C20320D215D70CEED5B3BFAF2B7C552F7BBF8C5B0358F6B6B85E1DBACEE6878AE3E65B5783DC1EF
Key-Arg : None
Krb5 Principal: None
Start Time: 1433174737
Timeout : 300 (sec)
Verify return code: 0 (ok)

Если у вас подобный вывод, все в порядке. Если же у вас нечто подобное:

43134:error:1455430FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601

То нужно идти в почтовые логи и смотреть, в чем проблема.

Если в логах нечто подобное:

postfix/smtpd[12882]: warning: cannot get RSA private key from file /root/ssl/zeroxzed.key: disabling TLS support
postfix/smtpd[12882]: warning: TLS library problem: 12882:error:0911407E:PEM routines:PEM_def_callback:problems getting password:pem_lib.c:111:
postfix/smtpd[12882]: warning: TLS library problem: 12882:error:0911407E:PEM routines:PEM_do_header:bad password read:pem_lib.c:454:
postfix/smtpd[12882]: warning: TLS library problem: 12882:error:150D1007:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib:ssl_rsa.c:669:

Это значит, что ваш приватный ключ зашифрован. postfix не умеет работать с зашифрованными ключами. Private key можно расшифровать следующей командой:

#  openssl rsa -in private.key -out newprivate.key

Я сначала не знал об этом и сгенерировал private key с паролем с помощью сайта startssl.com, выпустил сертификат на его основе. А потом столкнулся с ошибкой postfix. Попытался создать сертификат заново, но это уже невозможно, на домен можно выпустить только один бесплатный сертификат. Чтобы создать новый, нужно отозвать существующий, а отзыв сертификата — платная услуга. Но оказалось, что перевыпускать сертификат не обязательно, достаточно было снять пароль с приватного ключа, что я и сделал.

Настраиваем dovecot на использование ssl сертификата

Если вы используете на почтовом сервере dovecot, то можно добавить защищенные соединения на основе нашего бесплатного сертификата и в нем. Сделать это очень просто. Открываем конфиг dovecot и добавляем туда следующие строки:

ssl_cert_file = /root/ssl/zeroxzed.ru.crt
ssl_key_file = /root/ssl/zeroxzed.ru.crt.key
ssl_ca_file = /root/ssl/zeroxzed.ru.crt+ca

Изменения вступят в силу после перезапуска сервера. Опять же, не забываем про фаервол. SSL/TLS соединения работают по другим портам, нежели открытые подключения.

По идее, теперь у вас все должно работать. Мои примеры с работающих серверов.


Помогла статья? Есть возможность отблагодарить автора

2 комментария

  1. А зачем нужно собирать crt+ca ?
    Разве не достаточно просто intermediate сертификат использовать как smtpd_tls_CAfile ?

    • Я уже точно не помню. Настраивал на достаточно старой версии postfix. Там по-другому не работало. Да и все старые руководства делают то же самое, собирают цепочки в один файл. Недавно настраивал новую версию postfix, там все это не нужно. Указываешь только crt и key файлы и все.

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

Ваш e-mail не будет опубликован.