Назад | Перейти на главную страницу

Не удается подключиться к imap_open, но openssl s_client работает

Итак, после 2 дней попытки найти все подходящие решения, я все еще чешу в затылке. Должно быть что-то я упускаю.

Я пытаюсь подключиться к почтовому серверу postfix / dovecot с помощью php imap_open() в SuiteCRM (он использует только imap, pop3 не подходит).

Я могу подключиться из командной строки с помощью openssl s_client -connect mail.mydomain.com:143 -starttls imap или openssl s_client -connect mail.mydomain.com:993. Я могу отдавать команды, выводить список входящих и выходить из системы. Если я попытаюсь использовать php imap_open, я получаю различные ошибки в зависимости от переданных параметров.

Вопрос: почему не удается установить соединение с imap_open?

Кажется, это проблема с php. Я проверил phpinfo на почтовом сервере, и у него есть imap с поддержкой ssl. Почтовый сервер работает в конфигурации Ubuntu 14.04 LEMP. Версия PHP 5.5.9-1ubuntu4.9. Сертификат ssl является сертификатом с подстановочным знаком.

imap
IMAP c-Client Version   2007f
SSL Support         enabled
Kerberos Support    enabled


openssl
OpenSSL support     enabled
OpenSSL Library Version OpenSSL 1.0.1f 6 Jan 2014
OpenSSL Header Version  OpenSSL 1.0.1f 6 Jan 2014

Вот конфиги postfix и dovecot:

postconf -n:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
inet_protocols = ipv4
mailbox_size_limit = 0
mydestination = localhost
myhostname = mail.livechat4sales.com
mynetworks = 127.0.0.0/8
myorigin = $myhostname
readme_directory = no
recipient_delimiter = +
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3
smtp_tls_note_starttls_offer = yes
smtp_tls_protocols = !SSLv2,!SSLv3
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_CAfile = /etc/nginx/ssl/geotrust.stapling.crt
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/nginx/ssl/mydomain.wild.crt
smtpd_tls_ciphers = high
smtpd_tls_key_file = /etc/nginx/ssl/mydomain.wild.key
smtpd_tls_loglevel = 4
smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains = mydomain.com
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000

голубятня:

auth_mechanisms = plain login
auth_verbose = yes
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k session=<%{session}>
mail_location = maildir:~mail/vhosts/%d/%n/
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  args = scheme=SHA512-CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
protocols = " imap lmtp pop3"
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
ssl_cert = </etc/nginx/ssl/mydomain.wild.crt
ssl_cipher_list = HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3
ssl_client_ca_dir = /etc/nginx/ssl/
ssl_client_ca_file = geotrust.stapling.crt
ssl_key = </etc/nginx/ssl/mydomain.wild.key
ssl_prefer_server_ciphers = yes
ssl_protocols = !SSLv2 !SSLv3
userdb {
  args = username_format=%u /etc/dovecot/users
  default_fields = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
  driver = passwd-file
}

Результаты тестирования imap_open:

{mail.mydomain.com:993/service=imap/ssl/tls/validate-cert/secure}INBOX: invalid remote specification
{mail.mydomain.com:993/service=imap/ssl/tls/validate-cert}INBOX: invalid remote specification
{mail.mydomain.com:993/service=imap/ssl/validate-cert/secure}INBOX: [CLOSED] IMAP connection broken (server response)
{mail.mydomain.com:993/service=imap/ssl/novalidate-cert/secure}INBOX: [CLOSED] IMAP connection broken (server response)

Это единственный вызов, который возвращает данные, но я думаю, что пароль передается в виде обычного текста. 143 только открыли для тестирования; 993 является предпочтительным.

 {mail.mydomain.com:143/service=imap/tls}INBOX