На днях узнал про интересный сервис, который позволяет получить бесплатно ssl сертификат с подтверждением доменного имени. Его можно использовать либо в почтовом сервисе, либо на сайте для подтверждения его подлинности. В этой статье я расскажу об использовании ssl сертификата в почтовом сервере postfix.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Содержание:
Получение бесплатного 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. На следующем шаге выбираем подтвержденный домен и вводим один поддомен, который хотим добавить в сертификат. В бесплатной версии можно выпустить сертификат на домен и один поддомен.
На завершающем этапе получаем сформированный сертификат. Копируем его к себе и сохраняем, попутно скачиваем корневой сертификат, он нам позже пригодится.
На этом получение бесплатного сертификата окончено. Нам понадобятся в будущем 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 соединения работают по другим портам, нежели открытые подключения.
По идее, теперь у вас все должно работать. Мои примеры с работающих серверов.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Уведомление для всех подписчиков StartCom
Центр сертификации StartCom CA закрыт с 1 января 2018 года и не выдаёт новые сертификаты с корнями StartCom.
Если вы хотите приобрести надёжный SSL-сертификат и сертификат подписи кода, пожалуйста, посетите https://store.wotrus.com.
Если вы хотите получить бесплатный сертификат электронной почты, пожалуйста, посетите https://www.mesign.com, чтобы загрузить приложение MeSign и автоматически получить бесплатный сертификат электронной почты и автоматически отправлять зашифрованные электронные письма.
С наилучшими пожеланиями,
StartCom CA Limited
1 января 2018 г.
Спасибо!!!!!!
Понял спасибо большое. А по этой ошибке что-нибудь можете сказать.
Спасибо!
По ошибке ничего не понятно, видно только, что сертификат не работает.
zeroxzed.key должен дать сервис по выпуску сертификата.
1_Intermediate.crt
2_mail.rzncit.ru.crt
root.crt
Вот эти три файла выдает центр сертификации что из них что??
Прошу прощения, а откуда появился zeroxzed.key?
Я рекомендую не использовать больше эти сертификаты. Их большинство браузеров забанило и исключило из списка доверенных. Вместо startssl, надо использовать let's encrypt. Они тоже бесплатные. Там уже другая схема получения.
А зачем нужно собирать crt+ca ?
Разве не достаточно просто intermediate сертификат использовать как smtpd_tls_CAfile ?
Я уже точно не помню. Настраивал на достаточно старой версии postfix. Там по-другому не работало. Да и все старые руководства делают то же самое, собирают цепочки в один файл. Недавно настраивал новую версию postfix, там все это не нужно. Указываешь только crt и key файлы и все.
Вот такая ошибка что может означать подскажи пжл. Уже не понимаю.
openssl s_client -starttls smtp -showcerts -connect localhost:25
CONNECTED(00000003)
139738368210848:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:769:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 252 bytes and written 282 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE