Как я получал и прикручивал 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. Подробное описание как это сделать. Пользуюсь данным сервисом уже года два, рекомендую. Продлить данный сертификат, как и любой другой - нельзя, только перевыпустить.
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?
Цитата приводилась ради «must be … without a password»
Да, SMTP будет работать и с .key, и с .crt.
Спасибо!
Спасибо, объяснили блондинке как правильно создать сертификаты))