URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93651
[ Назад ]

Исходное сообщение
"TLS для Postfix"

Отправлено mr brightside , 06-Авг-12 15:50 
Добрый день, уважаемые!

ОС FreeBSD 9, postfix 2.9, OpenSSL 1.0.

Все установлено из портов. OpenSSL тоже установлен из портов вместо стандартного.

Никак не могу понять, что не так с моими сертификатами и почему они не хотят работать.

Сгенерировал сертификат и закрытый ключ командой:

++++++++++++++
openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 1095
++++++++++++++

Получил запрос на указание дополнительных данных. Common Name в конце сделал в виде HostName.MyDomain.ru.

Полученные файлы положил в /usr/local/etc/postfix/ssl. Дал права 600 пользователю postfix, от которого стартует МТА.

При подключении клиентом к серваку в логе вижу сообщение:

++++++++++++++
warning: cannot get RSA private key from file
++++++++++++++

Попробовал дать полные права на файл - 777. Не помогло.
Погуглил, нашел решение, воспользовался:

++++++++++++++
openssl rsa -in smtpd.pem -out smtpd.new.pem
rm smtpd.key && mv smtpd.new.pem smtpd.pem
++++++++++++++

Стал в логе получать ошибку:

++++++++++++++
warning: cannot get RSA certificate from file
++++++++++++++

Т.е. сначала он не мог получить RSA из закрытого ключа, теперь не может получить из сертификата.

Попробовал еще сгенерировать ключ и сертификат таким образом:

++++++++++++++
openssl genrsa -out genrsa.key 1024
chmod 600 genrsa.key
openssl req -new -key genrsa.key -out csr.csr
openssl x509 -req -days 730 -in csr.csr -signkey regrsa.key -out sptmd.crt
cat genrsa.key smtpd.crt > smtpd.pem
chmod 600 smtpd.pem
chown postfix smtpd.pem
++++++++++++++

Но увы, также не помогло. В чем может быть проблема?


Содержание

Сообщения в этом обсуждении
"TLS для Postfix"
Отправлено lavr , 06-Авг-12 16:35 
>[оверквотинг удален]
> ++++++++++++++
> openssl genrsa -out genrsa.key 1024
> chmod 600 genrsa.key
> openssl req -new -key genrsa.key -out csr.csr
> openssl x509 -req -days 730 -in csr.csr -signkey regrsa.key -out sptmd.crt
> cat genrsa.key smtpd.crt > smtpd.pem
> chmod 600 smtpd.pem
> chown postfix smtpd.pem
> ++++++++++++++
> Но увы, также не помогло. В чем может быть проблема?

http://www.postfix.org/TLS_README.html


"TLS для Postfix"
Отправлено mr brightside , 06-Авг-12 17:34 
> http://www.postfix.org/TLS_README.html

Вы правы, только я пошел более извращенным путем - через стандартный перловский скрипт для создания ключей и сертификатов:


# cd /usr/local/openssl
# mkdir certs
# cp misc/CA.pl certs/
# sed -I .old 's/365/1095/' openssl.cnf
# cd /usr/local/openssl/certs
# ./CA.pl -newca

...Заполняем тут данные....

# ./CA.pl -newreq

...Заполняем тут данные....

# ./CA.pl -signreq

...Заполняем тут данные....

# cp newcert.pem host.example.com-cert.pem
# cp newkey.pem host.example.com-encrypted-key.pem
# cp demoCA/cacert.pem ./example.com-CAcert.pem
# cp demoCA/private/cakey.pem ./example.com-encrypted-CAkey.pem
# openssl rsa -in host.example.com-encrypted-key.pem -out host.example.com-unencrypted-key.pem

Затем правильно прописываем main.cf:

+++++++++++++
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
#smtpd_tls_auth_only = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /usr/local/openssl/certs/host.example.com-unencrypted-key.pem
smtpd_tls_cert_file = /usr/local/openssl/certs/host.example.com-cert.pem
smtpd_tls_CAfile = /usr/local/openssl/certs/example.com-CAcert.pem
#smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtp_tls_key_file = /usr/local/openssl/certs/host.example.com-unencrypted-key.pem
smtp_tls_cert_file = /usr/local/openssl/certs/host.example.com-cert.pem
smtp_tls_CAfile = /usr/local/openssl/certs/example.com-CAcert.pem
#smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
+++++++++++++

По крайней мере ошибку не выдает сейчас


"TLS для Postfix"
Отправлено mr brightside , 07-Авг-12 18:37 
Так, сертификаты я сгенирировал, вроде бы всё прекрасно.

Thunderbird и The Bat! почту через мой сервак с использование сертификатов отправить могут. Догадайтесь, какой MUA не может? - Outlook.

Ниже привожу логи при отсылке каждого клиента:

++++++++++++OUTLOOK++++++++++++++++++++++

==================================
Aug  7 18:23:32 email postfix/smtpd[5144]: warning: hostname localhost does not resolve to address 192.168.0.133
Aug  7 18:23:32 email postfix/smtpd[5144]: connect from unknown[192.168.0.133]
Aug  7 18:24:49 email postfix/smtpd[5144]: SSL_accept error from unknown[192.168.0.133]: lost connection
Aug  7 18:24:49 email postfix/smtpd[5144]: lost connection after CONNECT from unknown[192.168.0.133]
Aug  7 18:24:49 email postfix/smtpd[5144]: disconnect from unknown[192.168.0.133]
==================================

+++++++++++++THUNDERBIRD++++++++++++++++++++

==================================
Aug  7 18:25:39 email postfix/smtpd[5150]: warning: hostname localhost does not resolve to address 192.168.0.133
Aug  7 18:25:39 email postfix/smtpd[5150]: connect from unknown[192.168.0.133]
Aug  7 18:25:39 email postfix/smtpd[5150]: 63F105DF4DF: client=unknown[192.168.0.133], sasl_method=PLAIN, sasl_username=test@mydomain.ru
Aug  7 18:25:39 email postfix/cleanup[5152]: 63F105DF4DF: message-id=<502133C3.1010608@mydomain.ru>
Aug  7 18:25:39 email postfix/qmgr[5142]: 63F105DF4DF: from=<test@mydomain.ru>, size=653, nrcpt=1 (queue active)
Aug  7 18:25:39 email postfix/smtpd[5150]: disconnect from unknown[192.168.0.133]
Aug  7 18:25:53 email postfix/smtp[5153]: 63F105DF4DF: to=<ЛИЧНАЯ_ПОЧТА@mail.ru>, relay=mxs.mail.ru[94.100.176.20]:25, delay=14, delays=0.02/0.02/0.05/14, dsn=2.0.0, status=sent (250 OK id=1Sykj8-0005wG-By)
Aug  7 18:25:53 email postfix/qmgr[5142]: 63F105DF4DF: removed
==================================

++++++++++++THE BAT!++++++++++++++++++++++

Aug  7 18:29:03 email postfix/smtpd[5144]: warning: hostname localhost does not resolve to address 192.168.0.133
Aug  7 18:29:03 email postfix/smtpd[5144]: connect from unknown[192.168.0.133]
Aug  7 18:29:06 email postfix/smtpd[5144]: warning: unknown[192.168.0.133]: SASL CRAM-MD5 authentication failed: authentication failure
Aug  7 18:29:06 email postfix/smtpd[5144]: 7DF7D5DF4DF: client=unknown[192.168.0.133], sasl_method=PLAIN, sasl_username=test@mydomain.ru
Aug  7 18:29:06 email postfix/cleanup[5158]: 7DF7D5DF4DF: message-id=<555897833.20120807183024@mydomain.ru>
Aug  7 18:29:06 email postfix/qmgr[5142]: 7DF7D5DF4DF: from=<test@mydomain.ru>, size=770, nrcpt=1 (queue active)
Aug  7 18:29:06 email postfix/smtp[5159]: error: open database /usr/local/etc/postfix/sasl/sasl_passwd.db: No such file or directory
Aug  7 18:29:06 email postfix/smtpd[5144]: disconnect from unknown[192.168.0.133]
Aug  7 18:29:07 email postfix/smtp[5159]: 7DF7D5DF4DF: to=<ЛИЧНАЯ_ПОЧТА69@mail.ru>, relay=mxs.mail.ru[94.100.176.20]:25, delay=0.7, delays=0.01/0.02/0.05/0.62, dsn=2.0.0, status=sent (250 OK id=1SykmS-0007Ov-Mf)
Aug  7 18:29:07 email postfix/qmgr[5142]: 7DF7D5DF4DF: removed
==================================

Полагаю, что Outlook не хочет принимать сертификат, - что ему не нравится, ума не приложу. Ранее, он еще в лог пихал ошибку:

SSL_accept:before/accept initialization

Решил проверить сертификат:

#openssl s_client -showcerts -cert cert.pem -key key.pem -starttls smtp -CAfile CAcert.cer -connect localhost:25

Получил ответ:

==================================
.............
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 4FD69A64FB99C2FE7F26775FA6F7C9086768A5F00D652B2B2D6482DFB39B327E
    Session-ID-ctx:
    Master-Key: 153C7674447A114D3475881B155203AC38FB2E0AB18EBA7ADEC8E03B61C1698D28CCCFC059B11EE86D82515F68F32E76
    Key-Arg   : None
    Start Time: 1344350215
    Timeout   : 300 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
---
250 DSN
==================================

Вопрос: что не нравится аутлуку?


"TLS для Postfix"
Отправлено lavr , 07-Авг-12 19:04 
> Так, сертификаты я сгенирировал, вроде бы всё прекрасно.
> Thunderbird и The Bat! почту через мой сервак с использование сертификатов отправить
> могут. Догадайтесь, какой MUA не может? - Outlook.
> Ниже привожу логи при отсылке каждого клиента:

<skipped>

> Вопрос: что не нравится аутлуку?

а может дело не в сертификатах?
Вы же, как я понимаю, используете SMTP AUTH?!

Большинство MUA используют PLAIN, а OE - LOGIN, а у вас?

[unix1]~ > telnet xxx.yyy.ru 25
Trying aaa.bbb.ccc.ddd...
Connected to xxx.yyy.ru.
Escape character is '^]'.
220 xxx.yyy.ru ESMTP Postfix
ehlo unix1.jinr.ru
250-mail.jinr.ru
250-PIPELINING
250-SIZE 1073741824
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
~~~~~~~~~^^^^^^^^^^^^------- посмотрите как у вас?

250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
rset
250 2.0.0 Ok
quit
221 2.0.0 Bye
Connection closed by foreign host.
[unix1]~ >

проверить просто, telnet mail-relay 25 порт:
после helo или ehlo пробуем:
AUTH LOGIN
получаем ответ либо все хорошо, либо пшел нафик, не поддерживаем

проверьте, оно?


"TLS для Postfix"
Отправлено mr brightside , 07-Авг-12 19:42 
> а может дело не в сертификатах?
> Вы же, как я понимаю, используете SMTP AUTH?!
> Большинство MUA используют PLAIN, а OE - LOGIN, а у вас?

Да, об этом читал, соответственно SASL настроил на использование LOGIN:

+++++++++++++++++++++
[root@email /home/vertigo]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.mydomain.ru.
Escape character is '^]'.
220 email.mydomain.ru ESMTP Postfix
EHLO mydomain.ru
250-email.mydomain.ru
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5 DIGEST-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
++++++++++++++++++++

При подключении не с локалхост, а с удаленной машины, ситуация аналогична.

smtpd.conf:

++++++++++++++++++++
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5
log_level: 3
++++++++++++++++++++

Вон оно TLS предложение, вот она аутентификация. Также SASL не собирал с поддержкой Керберос или NTLM.


"TLS для Postfix"
Отправлено lavr , 07-Авг-12 20:06 
>[оверквотинг удален]
> ++++++++++++++++++++
> При подключении не с локалхост, а с удаленной машины, ситуация аналогична.
> smtpd.conf:
> ++++++++++++++++++++
> pwcheck_method: saslauthd
> mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5
> log_level: 3
> ++++++++++++++++++++
> Вон оно TLS предложение, вот она аутентификация. Также SASL не собирал с
> поддержкой Керберос или NTLM.

http://www.postfix.org/TLS_README.html

Port 465 (smtps) используете? OE любит его и postfix советую настраивать
с wrap mode:

TLS is sometimes used in the non-standard "wrapper" mode where a server always uses TLS, instead of announcing STARTTLS support and waiting for remote SMTP clients to request TLS service. Some clients, namely Outlook [Express] prefer the "wrapper" mode. This is true for OE (Win32 < 5.0 and Win32 >=5.0 when run on a port<>25 and OE (5.01 Mac on all ports).

It is strictly discouraged to use this mode from main.cf. If you want to support this service, enable a special port in master.cf and specify "-o smtpd_tls_wrappermode=yes" (note: no space around the "=") as an smtpd(8) command line option. Port 465 (smtps) was once chosen for this feature.

Example:

    /etc/postfix/master.cf:
        smtps    inet  n       -       n       -       -       smtpd
          -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes


ну и есть еще ньюансы с OE, в разных версиях - разные проблемы, ошибки в sasl,
wrapper mode и тд и тп...

Нужно смотреть настройки postfix, и что за ошибку возвращает OE.


"TLS для Postfix"
Отправлено mr brightside , 07-Авг-12 20:19 
>[оверквотинг удален]
> always uses TLS, instead of announcing STARTTLS support and waiting for
> remote SMTP clients to request TLS service. Some clients, namely Outlook
> [Express] prefer the "wrapper" mode. This is true for OE (Win32
> < 5.0 and Win32 >=5.0 when run on a port<>25 and
> OE (5.01 Mac on all ports).
> It is strictly discouraged to use this mode from main.cf. If you
> want to support this service, enable a special port in master.cf
> and specify "-o smtpd_tls_wrappermode=yes" (note: no space around the "=") as
> an smtpd(8) command line option. Port 465 (smtps) was once chosen
> for this feature.

Безусловно, я использую 465 порт для отправки в любом клиенте:

master.cf

++++++++++++++++++++
smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
++++++++++++++++++++

Outlook возвращает ошибку "Для операции истекло время ожидания отклика отправляющего (SMTP) сервера. Если вы продолжаете получать это сообщение, обратитесь к администратору сервера или поставщику услуг Интернета".

В логе (включил более подробную отладку) имею вот что:

++++++++++++++++++++
Aug  7 20:13:55 email postfix/smtpd[5382]: initializing the server-side TLS engine
Aug  7 20:13:55 email postfix/tlsmgr[5384]: open smtpd TLS cache btree:/var/db/postfix/smtpd_tls_session_cache
Aug  7 20:13:55 email postfix/tlsmgr[5384]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
Aug  7 20:13:55 email postfix/smtpd[5382]: connect from 247.200-client.airnet.ru[93.92.200.247]
Aug  7 20:13:55 email postfix/smtpd[5382]: setting up TLS connection from 247.200-client.airnet.ru[93.92.200.247]
Aug  7 20:13:55 email postfix/smtpd[5382]: 247.200-client.airnet.ru[93.92.200.247]: TLS cipher list "aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH"
Aug  7 20:13:55 email postfix/smtpd[5382]: SSL_accept:before/accept initialization
Aug  7 20:13:55 email postfix/smtpd[5382]: read from 28C0EC80 [28DC5000] (11 bytes => -1 (0xFFFFFFFF))
Aug  7 20:15:10 email postfix/smtpd[5382]: read from 28C0EC80 [28DC5000] (11 bytes => 0 (0x0))
Aug  7 20:15:10 email postfix/smtpd[5382]: SSL_accept error from 247.200-client.airnet.ru[93.92.200.247]: lost connection
Aug  7 20:15:10 email postfix/smtpd[5382]: lost connection after CONNECT from 247.200-client.airnet.ru[93.92.200.247]
Aug  7 20:15:10 email postfix/smtpd[5382]: disconnect from 247.200-client.airnet.ru[93.92.200.247]
++++++++++++++++++++

Это я из дома делаю коннект к почтовику. Из локалки - то же самое

Что есть TLS cipher list? и принять он сертификат не может, видимо, потому, что я должен подтвердить исключение безопасности. Сертификат то самоподписанный.


"TLS для Postfix"
Отправлено mr brightside , 08-Авг-12 01:26 
> Что есть TLS cipher list? и принять он сертификат не может, видимо,
> потому, что я должен подтвердить исключение безопасности. Сертификат то самоподписанный.

Сам нашел ответ:

http://www.openssl.org/docs/apps/ciphers.html

++++++++++++++++++++++++++++++
aNULL

    the cipher suites offering no authentication. This is currently the anonymous DH algorithms. These cipher suites are vulnerable to a ``man in the middle'' attack and so their use is normally discouraged.
++++++++++++++++++++++++++++++

Если кто-знает, что прописать в конфиг, чтобы заставить аутлук подключаться так, как надо ИЛИ настроить аутлук так, чтобы подключаться корректно - буду премного благодарен. А пока продолжу поиски