Добрый день, уважаемые!ОС 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
++++++++++++++Но увы, также не помогло. В чем может быть проблема?
>[оверквотинг удален]
> ++++++++++++++
> 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Вы правы, только я пошел более извращенным путем - через стандартный перловский скрипт для создания ключей и сертификатов:
# 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
+++++++++++++По крайней мере ошибку не выдает сейчас
Так, сертификаты я сгенирировал, вроде бы всё прекрасно.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
==================================Вопрос: что не нравится аутлуку?
> Так, сертификаты я сгенирировал, вроде бы всё прекрасно.
> 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
получаем ответ либо все хорошо, либо пшел нафик, не поддерживаемпроверьте, оно?
> а может дело не в сертификатах?
> Вы же, как я понимаю, используете 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.
>[оверквотинг удален]
> ++++++++++++++++++++
> При подключении не с локалхост, а с удаленной машины, ситуация аналогична.
> 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.
>[оверквотинг удален]
> 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 cipher list? и принять он сертификат не может, видимо,
> потому, что я должен подтвердить исключение безопасности. Сертификат то самоподписанный.Сам нашел ответ:
http://www.openssl.org/docs/apps/ciphers.html
++++++++++++++++++++++++++++++
aNULLthe 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.
++++++++++++++++++++++++++++++Если кто-знает, что прописать в конфиг, чтобы заставить аутлук подключаться так, как надо ИЛИ настроить аутлук так, чтобы подключаться корректно - буду премного благодарен. А пока продолжу поиски