При переходе на новые версии платформы 1С:Предприятие (начиная с 8.3.18 и выше, и особенно на ветки 8.3.21, 8.3.22) разработчики часто сталкиваются с тем, что привычный механизм работы с объектом ИнтернетПочта перестает функционировать, если в конфигурации установлен режим совместимости 8.2.13. Чаще всего это проявляется в виде ошибки: «Произошла ошибка при работе с SMTP. Код ошибки: 27 (Ошибка установки защищенного SSL/TLS соединения)».
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние изменения платформы и рассмотрим несколько эффективных способов восстановления работоспособности почты без изменения режима совместимости конфигурации — для этого подойдёт рассылка отчетов и уведомлений из 1С.
Разберем ситуацию с технической точки зрения. Основная причина кроется в обновлении библиотек OpenSSL, что важно учитывать при проектировании защищенной IT инфраструктуры, которые встроены в платформу 1С. В версиях платформы 8.3.18 и старше произошел переход на OpenSSL версии 1.1.1 и выше. В этих современных библиотеках по умолчанию отключена поддержка устаревших и небезопасных протоколов, таких как SSLv2, SSLv3, TLS 1.0 и TLS 1.1. Также были ужесточены требования к проверке сертификатов серверов.
Когда конфигурация работает в режиме совместимости 8.2.13, объект ИнтернетПочта ограничен в своих возможностях, в отличие от решений, где алгоритмы шифрования реализованы нативно. В нем отсутствуют современные свойства для управления TLS, хотя в новых версиях платформы доступны широкие возможности шифрования (например, ИспользоватьTLS или выбор конкретной версии протокола ВариантИспользованияSSL). Платформа пытается инициировать соединение по старым стандартам, которые либо блокируются самой платформой на уровне OpenSSL, либо отвергаются современными почтовыми серверами (такими как Mail.ru, Yandex или Gmail), требующими TLS 1.2 или 1.3.
Первым делом проанализируем возможность влияния на поведение платформы через файлы настроек. Мы можем попытаться ослабить требования платформы к проверке сертификатов и принудительно разрешить использование определенных протоколов.
Для этого нам понадобится отредактировать файл conf.cfg, который обычно находится в каталоге установленной платформы (например, C:\Program Files\1cv8\conf\). Рассмотрим последовательность действий:
conf.cfg.IgnoreInternetMailServerCertificateVerificationList. Этот параметр позволяет платформе игнорировать ошибки проверки цепочки сертификатов для конкретных почтовых узлов.ForceTLS1_0, если сервер требует именно этот протокол (хотя это редко помогает с современными публичными сервисами).Пример содержимого файла conf.cfg:
IgnoreInternetMailServerCertificateVerificationList=mail.vash-domen.ru;smtp.mail.ru;imap.yandex.ru;*
ForceTLS1_0=false
Важно: Использование символа * в списке позволяет игнорировать проверку для всех серверов, что может быть полезно для диагностики, но небезопасно в промышленной эксплуатации. Если после добавления ForceTLS1_0=true вы получили ошибку «Код ошибки: 5 (Ошибка разбора ответа сервера)», это означает, что сервер ожидает более современный протокол, а вы принудительно ограничили платформу устаревшим вариантом.
Если манипуляции с файлом conf.cfg не принесли результата, рассмотрим наиболее надежный и стабильный метод — использование stunnel. Этот программный продукт выступает в роли «обертки», которая принимает обычное незащищенное соединение от 1С и превращает его в современное защищенное TLS-соединение для почтового сервера.
Разберем по шагам, как настроить эту связку:
stunnel на сервере 1С или на локальной машине.stunnel.conf создаем секции для SMTP и IMAP.Пример настройки stunnel.conf:
[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
checkHost = smtp.gmail.com
OCSPiair = yes
[gmail-imap]
client = yes
accept = 127.0.0.1:143
connect = imap.gmail.com:993
checkHost = imap.gmail.com
В коде 1С мы теперь должны изменить параметры подключения. Вместо прямого обращения к почтовому серверу с SSL, мы будем обращаться к локальному адресу:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "127.0.0.1";
Профиль.ПортSMTP = 25; // Порт, который мы указали в accept stunnel
Профиль.АдресСервераIMAP = "127.0.0.1";
Профиль.ПортIMAP = 143;
// SSL в коде 1С выключаем, так как шифрованием займется stunnel
Профиль.ИспользоватьSSLSMTP = Ложь;
Профиль.ИспользоватьSSLIMAP = Ложь;
Этот метод полностью снимает проблему совместимости протоколов 1С и почтового сервера, так как stunnel использует актуальные системные библиотеки шифрования.
Иногда ошибка «Код ошибки: 5» или ошибки соединения могут быть вызваны не только протоколами шифрования, но и спецификой работы сервера с конкретным почтовым ящиком. Проанализируем несколько дополнительных моментов:
ИнтернетПочтовыйПрофиль до 60–120 секунд.Поскольку вашей основной целью обновления платформы является использование внешних компонент в изолированном режиме, логичным решением будет вынести функционал почты во внешнюю компоненту — для этого есть обработка массовой рассылки документов из 1С. Это позволит избежать ограничений устаревшего объекта ИнтернетПочта. Для этой задачи есть инструмент для автоматизации Email-рассылок из 1С.
Мы можем рассмотреть использование:
Пример использования CDO для отправки почты (через COM-объект):
Конфиг = Новый COMОбъект("CDO.Configuration");
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.mail.ru";
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = Истина;
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "login";
Конфиг.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "password";
Конфиг.Fields.Update();
Сообщение = Новый COMОбъект("CDO.Message");
Сообщение.Configuration = Конфиг;
Сообщение.Subject = "Тема письма";
Сообщение.From = "login@mail.ru";
Сообщение.To = "client@gmail.com";
Сообщение.TextBody = "Текст сообщения";
Сообщение.Send();
Мы рассмотрели несколько путей решения проблемы. Если вам требуется быстрое решение «здесь и сейчас», начните с настройки conf.cfg и проверки чистоты почтового ящика. Если же вы нацелены на долгосрочную и стабильную работу системы на новой платформе без повышения режима совместимости, наиболее предпочтительным вариантом будет настройка stunnel или переход на использование COM-объектов/внешних компонент — для этого подойдёт автоматическая отправка счетов и актов из 1С. Это полностью изолирует процесс криптографии от ограничений платформы 1С версии 8.2.13.