LINUX.ORG.RU
решено ФорумAdmin

Шифрование для postfix


2

2

Доброго времени суток, лор. Меня обуяла жажда опыта шифрования, но т.к. первый раз столкнулся с шифрованием чего-либо, наткнулся на проблемы. Openfire вроде смог зашифровать, но не для всех клиентов (Jasmine IM включает шифрование, Psi+ нет). Dovecot я без проблем зашифровал (вроде), а вот с Postfix'ом какая-то беда. Для почтовых сервисов использую StartSSL'овский сертификат для WEB-сервера. Гугл что-то как-то не помог. По этому ману получился самый правдоподобный вариант, но всё равно не рабочий. Я уже задолбался ковырять.

Пытаюсь сделать openssl s_client -starttls smtp -showcerts -connect localhost:25. Выхлоп http://pastebin.com/fQBrZySD. Я думаю, именно тут заключена проблема (а именно в verify error:num=20:unable to get local issuer certificate), но не знаю, как её решить. journalctl -xn http://pastebin.com/Q9WQfQHt

Попытка отправить письмо из roundcube (journalctl) - http://pastebin.com/S7gmbk2B

Ах да, конфиг postfix'а дефолтный, в конец добавил:

relay_domains = *
virtual_alias_maps = proxy:mysql:/etc/postfix/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/virtual_mailbox_maps.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_limit = 512000000
virtual_minimum_uid = 5000
virtual_transport = virtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps
transport_maps = hash:/etc/postfix/transport

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous

smtpd_tls_CAfile = /etc/ssl/mail/ca-bundle.crt
smtpd_tls_cert_file = /etc/ssl/mail/mail.domain.net.pem
smtpd_tls_key_file = /etc/ssl/mail/mail.domain.net.pem
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
smtpd_use_tls = yes

smtp_tls_CAfile = /etc/ssl/mail/ca-bundle.crt
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtpd_tls_security_level = may

smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_auth_only = no
tls_random_source = dev:/dev/urandom

ca-bundle.crt от StartSSL, mail.domain.net.pem - слитие расшифрованного ключа, моего сертификата и sub.class1.server.ca.pem

Archlinux x86_64 только что обновлённый. Что делать, как быть?



Последнее исправление: nivs (всего исправлений: 1)

получился самый правдоподобный вариант, но всё равно не рабочий. Я уже задолбался ковырять.

Так что же не работает ?

vlb ★★★
()
Ответ на: комментарий от vlb

Не работает шифрованное соединение с smtp. К примеру, roundcube пишет: «SMTP Error (-1): Соединение с сервером сброшено». Письма не отправляются, но принимаются.

nivs
() автор топика
Ответ на: комментарий от vlb

Если мне не изменяют телепатические способности, то не работает SMTP over SSL для отправки писем клиентами сервера; нет?

Infra_HDC ★★★★★
()
Ответ на: комментарий от vlb

К слову, после неудачной попытки отправления сообщения во входящих появляется следующее письмо от MAILER-DAEMON@mail.domain.net:

Transcript of session follows.

 Out: 220 mail.domain.net ESMTP Postfix
 In:  EHLO openssl.client.net
 Out: 250-mail.domain.net
 Out: 250-PIPELINING
 Out: 250-SIZE 10240000
 Out: 250-VRFY
 Out: 250-ETRN
 Out: 250-STARTTLS
 Out: 250-AUTH PLAIN
 Out: 250-ENHANCEDSTATUSCODES
 Out: 250-8BITMIME
 Out: 250 DSN
 In:  STARTTLS
 Out: 454 4.7.0 TLS not available due to local problem
 In:  ????=?
 Out: 502 5.5.2 Error: command not recognized
 In:  ?"?!
 Out: 502 5.5.2 Error: command not recognized
 In:  ?/?+?'?#????????
 Out: 502 5.5.2 Error: command not recognized
 In:
 Out: 500 5.5.2 Error: bad syntax

Session aborted, reason: lost connection

For other details, see the local mail logfile

nivs
() автор топика
Ответ на: комментарий от Infra_HDC

TLS, да. Не вас ли я видел в финале битвы экстрасенсов? Прошу прощения за криво предоставленную информацию, мозг кипит.

nivs
() автор топика
Ответ на: комментарий от Infra_HDC
# openssl verify mail.domain.net.crt                                                                                                                           22:20 pts/1
mail.domain.net.crt: description = 3Tuh61r6QwlPn6Fl, C = RU, CN = mail.domain.net, emailAddress = webmaster@domain.net
error 20 at 0 depth lookup:unable to get local issuer certificate

Видимо, вот проблема, но как её победить я тоже не знаю.

nivs
() автор топика
Ответ на: комментарий от nivs

слитие расшифрованного ключа, моего сертификата и sub.class1.server.ca.pem

Не надо ничего сливать, там же отдельно указывается ключ и сертификат. Все CA/SubCA в один файл (ca-bundle), ключ - во второй, сертификат - в третий. Права проверить на файлы. И всё, больше ничего не надо.

blind_oracle ★★★★★
()
Последнее исправление: blind_oracle (всего исправлений: 2)
Ответ на: комментарий от blind_oracle

Тут какая интересная штука получается. Есть у меня 3 сертификата, полученных с офсайта: ca.pem (якобы корневой), sub.class1.server.ca.pem и my.crt (мой сертификат). Через

openssl verify -CAfile root.crt sub.crt
я узнал о зависимостях:

  • ca.pem -> sub.class1.server.ca.pem
  • sub.class1.server.ca.pem -> my.crt
  • ca.pem -> my.crt

Помимо этого простой openssl verify certName нормально реагирует на все сертификаты. Но! Он ругался на my.crt до тех пор, пока я не сделал:

cp sub.class1.server.ca.pem /usr/share/ca-certificates/mozilla/subStarSSL.pem && ln -s /usr/share/ca-certificates/mozilla/subStarSSL.pem /etc/ssl/certs/$(openssl x509 -noout -hash -in /usr/share/ca-certificates/mozilla/subStarSSL.pem).0
После этого мой сертификат научился верифицироваться. Но происходит сброс после c_rehash. После чего опять ca и sub верифицируются, а мой сертификат нет.

Какие права выставлять файлам? Я делаю сертификатам

chown root:root certName && chmod 444 certName
, а ключу
chown postfix:postfix keyName && chmod 400 certName

Делая чисто по ману хабра (ca-bundle.pem качая с офсайта, mail.domain.net.pem - это cat ca.pem sub.pem mycert.crt) при

systemctl restart postfix && sleep 1 && systemctl status postfix && openssl s_client -starttls smtp -showcerts -connect localhost:25
вылезает та же ошибка, что и в начале: http://pastebin.com/fQBrZySD .

Если делать как вы сказали, то немного другое:

verify error:num=19:self signed certificate in certificate chain

nivs
() автор топика
Ответ на: комментарий от nivs

Так, что-то ты всё усложняешь мне кажется.

Вот как сделано у меня с честным wildcard-сертификатом (*.domain.ru) от Thawte:

# Серверная часть
smtpd_tls_CAfile = /etc/ssl/thawte_ca_bundle.pem
smtpd_tls_key_file = /etc/ssl/wildcard.domain.ru.key
smtpd_tls_cert_file = /etc/ssl/wildcard.domain.ru.crt
...
# Клиентская часть
smtp_tls_CAfile = /etc/ssl/thawte_ca_bundle.pem
smtp_tls_key_file = /etc/ssl/wildcard.domain.ru.key
smtp_tls_cert_file = /etc/ssl/wildcard.domain.ru.crt
Где thawte_ca_bundle.pem - корневой и промежуточный сертификаты Thawte, wildcard.domain.ru.* - дешифрованый ключ и сертификат.

Всё. Больше ничего не надо.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

А у меня выходит вот это:

CONNECTED(00000003)
depth=2 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
Сертификаты только что ещё раз скачал с сайта StartSSL, проверил через openssl verify -CAfile. Как вы и сказали, сделал
cat ca.pem sub.class1.server.ca.pem > ca-bundle.pem
. Вот на всякий случай часть конфига, который только что запускался: http://pastebin.com/yw1PFh8g

Тратить сейчас в принципе деньги (а сертификаты стоят таки не мало) на это не хочется, т.к. в данном случае чисто идиотскопараноидальный^Wакадемический интерес - возможно ли пользоваться шифрованием бесплатно.

nivs
() автор топика
Ответ на: комментарий от blind_oracle

В общем, у меня сработало с вашей конфигурацией, но только вот так:

# openssl s_client -CAfile ca.pem -starttls smtp -showcerts -connect localhost:25
CONNECTED(00000003)
depth=2 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority
verify return:1
depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA
verify return:1
depth=0 description = 3Tuh61r6QwlPn6Fl, C = RU, CN = mail.domain.net, emailAddress = webmaster@domain.net
verify return:1
---
но добавление его в /etc/ssl/certs (как sub.class1.server.ca.pem я раньше добавлял для верификации моего сертификата - симлинком с именем хеша) не помогает. c_rehash тоже. Как добавить сертификат этот? К слову, вместе с пакетом ca-certificates поступило 2 сертификата от них, это они верифицируют мои сертификаты.

nivs
() автор топика
Ответ на: комментарий от Infra_HDC

Вот сейчас открыта форма регистрации, но я стараюсь обращаться за чьей-либо помощью только когда отчаиваюсь совсем, а тут, вроде, что-то начало получаться. Надо найти способ установить ca.pem в качестве корневого сертификата, наверное.

nivs
() автор топика

Эм... Выключил я шифрование (удалил все строки о tls), а почта всё равно не отправляется, хотя раньше я мог это делать. Что-то где-то накрутил, видимо.

nivs
() автор топика
Ответ на: комментарий от nivs

Roundcube слажал. В итоге на данный момент я таки могу отправлять почту (через Thunderburd, андроидовский ProfiMail Go) и то если только наплевав на все проверки сертификатов, Roundcube идёт лесом, openssl так и выдаёт ошибку. Мне это категорически не нравится, буду общаться с startcom. Большое всем спасибо за помощь.

nivs
() автор топика
Ответ на: комментарий от nivs

C Roundcube смог отправить сообщение, даже зашифрованное, надо было в настройках smtp исправить ssl на tls. И как оно раньше работало - не пойму.

nivs
() автор топика

июн 27 19:51:03 domain.net postfix/smtpd[1681]: > mail.domain.net[82.222.222.222]: 502 5.5.2 Error: command not recognized

июн 27 19:51:03 domain.net postfix/smtpd[1681]: < mail.domain.net[82.222.222.222]: июн 27 19:51:03 domain.net postfix/smtpd[1681]: > mail.domain.net[82.222.222.222]: 500 5.5.2 Error: bad syntax

Проблемы с сертификатами нет.

vlb ★★★
()
Ответ на: комментарий от nivs

Разница между SSL и TLS в том, что по SSL ты подключаешься на выделенный порт на котором сразу шифрованое соединение, а TLS - на обычный 25 порт и SSL сессия начинается только после команды STARTTLS. Поэтому работать и не должно было.

У меня на личном сервере как раз StartSSLные сертификаты в такой же конфигурации, проблем нет.

Вот полный конфиг относительно шифрования:

# SERVER TLS
smtpd_use_tls = yes
smtpd_tls_always_issue_session_ids = yes
smtpd_tls_ask_ccert = yes
smtpd_tls_req_ccert = no
smtpd_tls_auth_only = yes
smtpd_tls_CApath = /etc/ssl/certs
smtpd_tls_CAfile = /etc/ssl/ca.startssl.com.crt
smtpd_tls_key_file = /etc/ssl/domain.net.key
smtpd_tls_cert_file = /etc/ssl/domain.net.crt
smtpd_tls_ciphers = export
smtpd_tls_dh1024_param_file = /etc/ssl/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/ssl/dh_512.pem
smtpd_tls_exclude_ciphers = aNULL
smtpd_tls_exclude_ciphers = MD5, DES
smtpd_tls_exclude_ciphers = DES+MD5
smtpd_tls_exclude_ciphers = kEDH+aRSA
smtpd_tls_fingerprint_digest = sha1
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_protocols = TLSv1, SSLv3
smtpd_tls_protocols = TLSv1, SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 600s

# CLIENT TLS
smtp_use_tls = yes
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_CAfile = /etc/ssl/ca.startssl.com.crt
smtp_tls_key_file = /etc/ssl/domain.net.key
smtp_tls_cert_file = /etc/ssl/domain.net.crt
smtp_tls_ciphers = export
smtp_tls_enforce_peername = no
smtp_tls_exclude_ciphers = aNULL
smtp_tls_exclude_ciphers = MD5, DES
smtp_tls_exclude_ciphers = DES+MD5
smtp_tls_exclude_ciphers = kEDH+aRSA
smtp_tls_fingerprint_digest = sha1
smtp_tls_loglevel = 1
smtp_tls_mandatory_ciphers = medium
smtp_tls_mandatory_protocols = TLSv1, SSLv3
smtp_tls_note_starttls_offer = yes
smtp_tls_protocols = TLSv1, SSLv3
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtp_tls_session_cache_timeout = 600s

tls_random_source = dev:/dev/urandom

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

У меня на личном сервере как раз StartSSLные сертификаты в такой же конфигурации, проблем нет.

Аналогично.

vlb ★★★
()
Ответ на: комментарий от blind_oracle

Вот именно поэтому я и не понимал, как у меня раньше работало. Может из-за других сертификатов и настроек - я много перепробовал. Откуда dh брать? Самому генерить?

nivs
() автор топика
Ответ на: комментарий от blind_oracle

Результат оказался тем же.

openssl s_client -starttls smtp -showcerts -connect mail.keyr.net:25
выдаёт

Verify return code: 19 (self signed certificate in certificate chain)

, а если указывать -CApath /etc/ssl/certs, то всё отлично проходит. Причём такая фигня на всех машинах. Меня начинают терзать смутные сомнения, что я настолько ничерта не понимаю, что лучше шёл бы я продавать бигмаки. У вас сертификат программы почтовые принимают без вопросов? Он же вроде хороший, https://mail.domain.net и https://domain.net открывает без вопросов после элементарнейшей настройки апача. В итоге Thunderbird продолжает ругаться на неизвестный центр сертификации (к сертификату нет доверия, т.к. он не был верифицирован доверенным центром сертификации). Может оно так и надо? Но из-за этой шляпы я не могу подключить клиент K-9 и иже с ними. Работают только те, которые умеют принимать _все_ сертификаты. В итоге сертификат получается будто я сам создал. Подчеркну, что апач таки работает.

nivs
() автор топика
Ответ на: комментарий от blind_oracle

WIN!

Всё, сделал. Наконец-то. Thunderburd автоматом назначил STARTTLS и IMAP'у и SMTP, K-9 андоидовский точно также. И никто не пискнул по поводу кривизны сертификата. А надо-то было на проблему с другой стороны посмотреть - попробовал ковырять не SMTP, а IMAP. Я указывал там просто сертификат и ключ, а надо было так:

ssl_ca = </etc/ssl/mail/ca-bundle.pem
ssl_cert = </etc/ssl/mail/mail.domain.net.pem
ssl_key = </etc/ssl/mail/mail.domain.net.key
где ca-bundle взят отсюда, mail.domain.net.pem - это:

cat mail.domain.net.crt sub.class1.server.ca.pem > mail.domain.net.pem

где mail.domain.net.crt - мой сертификат, sub.class1.server.ca.pem - intermediate CA, взятый отсюда же. mail.domain.net.key - мой расшифрованный ключ. Ну а Postfix'у я скормил просто корневой (ca.pem), мой сертификат и ключ. Надеюсь, кому-нибудь моё решение поможет.

Такие дела. Большое спасибо за помощь, люди, я бы уже слился давно в одиночестве. Теперь можно и идти ковырять, какого чёрта Psi+ не хочет шифроваться, хотя Jasmine IM и Xabber андроидовские очень даже охотно шифруются. А потом фс на VPS попробовать зашифровать. И под конец SIP. Ну и шапочку слепить из фольги.

nivs
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.