При использовании нового, оптимизированного механизма реструктуризации базы данных (версия 2) в 1С:Предприятии могут возникать различные технические сложности, особенно когда система взаимодействует с SQL Server и Java. В этом материале мы подробно разберем наиболее частые ошибки, связанные с безопасным подключением к SQL Server через SSL/TLS и таймаутами сетевого соединения, а также предложим проверенные способы их решения. Мы будем действовать пошагово, чтобы вы могли успешно обновить свою базу.
Для начала, давайте проясним, что механизм реструктуризации v2 (далее – ОМР v2) является частью платформы 1С:Предприятие, начиная с версии 8.3.16. Он предназначен для значительного ускорения процесса обновления конфигурации базы данных, особенно на больших объемах данных, за счет использования внешнего Java-процесса, который напрямую взаимодействует с СУБД (SQL Server или PostgreSQL). Именно этот Java-процесс и является источником большинства ошибок подключения, поскольку он имеет свои требования к среде и безопасности соединения.
Прежде чем углубляться в исправление ошибок, мы должны убедиться, что базовые требования для работы ОМР v2 выполнены. Эти условия являются критически важными, и их несоблюдение может привести к неработоспособности механизма или возникновению неочевидных ошибок.
Чтобы проверить и настроить протокол TCP/IP, выполните следующие действия:
TCP/IP включен. Если он отключен, включите его и перезапустите службу SQL Server для применения изменений.Это одна из самых частых ошибок, возникающих при запуске ОМР v2. Полный текст ошибки, который вы можете увидеть в логах (для оперативного реагирования есть мониторинг ошибок 1С с уведомлением в Telegram) или в окне конфигуратора, выглядит следующим образом:
В процессе обновления конфигурации базы данных при работе оптимизированного механизма обновления произошла критическая ошибка по причине: Критическая ошибка работы Java-процесса. Путь к Java: C:\Program Files (x86)\BellSoft\LibericaJRE-8-Full\bin\java.exe Действие: prepare Process ID: 2596 Код возврата: 1 Ошибка: Exception in thread "main" com._1c.dmf.v8.cli.ApplicationException: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]". ClientConnectionId:52ff6245-493e-4fd6-8333-24be583d1fd3
Перевод основной части ошибки: "Драйверу не удалось установить безопасное соединение с SQL Server с использованием шифрования Secure Sockets Layer (SSL). Ошибка: «Версия протокола сервера TLS10 не принимается клиентскими предпочтениями [TLS13, TLS12]»."
Эта ошибка прямо указывает на конфликт версий протокола TLS (Transport Layer Security) между Java-процессом 1С (клиентом) и вашим SQL Server (сервером). Современные версии Java Runtime Environment (JRE), такие как те, что используются 1С для ОМР v2, по умолчанию отключают устаревшие и менее безопасные версии протоколов TLS (TLS 1.0 и TLS 1.1). Это сделано из соображений безопасности. Однако, если ваш SQL Server настроен или по умолчанию использует только эти устаревшие версии TLS, или если у него отсутствуют необходимые обновления для поддержки более новых версий (TLS 1.2 или TLS 1.3), то Java-клиент отвергнет соединение, поскольку сервер предлагает протокол, который клиент считает небезопасным или нежелательным.
Существует два основных подхода к решению этой проблемы: быстрое (но менее безопасное) и рекомендуемое (более безопасное).
Этот метод временно позволяет Java-процессу 1С использовать устаревшие протоколы TLS, чтобы установить соединение. Это может помочь быстро решить проблему и продолжить обновление, но мы должны понимать, что это снижает общий уровень безопасности соединения. Мы не рекомендуем использовать этот подход на постоянной основе в продуктивной среде.
java.security: Этот файл находится в каталоге установки вашей Java Runtime Environment (JRE). Путь к Java обычно указывается в сообщении об ошибке (например, C:\Program Files (x86)\BellSoft\LibericaJRE-8-Full\bin\java.exe). Мы должны найти файл по пути, подобному C:\Program Files (x86)\BellSoft\LibericaJRE-8-Full\lib\security\java.security или C:\Program Files\Java\jre1.8.0_291\lib\security\java.security. Если вы не уверены в используемой JRE, проверьте переменную окружения JAVA_HOME или настройки сервера 1С.java.security: Откройте его в любом текстовом редакторе с правами администратора (например, Блокнот от имени администратора).jdk.tls.disabledAlgorithms: Внутри файла найдите строку, которая начинается с jdk.tls.disabledAlgorithms=. Эта строка содержит список алгоритмов и протоколов, которые Java отключает по умолчанию. Пример такой строки:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, ...
TLSv1 и TLSv1.1 из этого списка. После изменений строка должна выглядеть примерно так:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, ...
Обратите внимание, что список может содержать и другие элементы, которые мы оставляем без изменений.
После выполнения этих шагов, как правило, проблема с SSL/TLS соединением исчезает, и обновление продолжается. Об этом свидетельствует сообщение 11, где автор подтверждает, что решение с java.security сработало.
Наиболее правильным и безопасным подходом является обновление и настройка вашего Microsoft SQL Server для поддержки современных версий протокола TLS, в частности TLS 1.2 и TLS 1.3. Это устранит корень проблемы, повысит безопасность всей системы и избавит нас от необходимости снижать уровень безопасности Java-среды.
Для этого мы должны предпринять следующие шаги:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2. Для получения точных инструкций по настройке реестра мы рекомендуем обращаться к официальной документации Microsoft.Этот подход требует более глубоких знаний в администрировании SQL Server (поможет инструмент администрирования кластера и баз 1С) и операционной системы, но обеспечивает наиболее надежное и безопасное решение проблемы.
В некоторых случаях, даже при включении TLS, могут возникать проблемы с SSL-сертификатами:
cacerts) на машине, где работает сервер 1С. Для временного обхода этой проблемы (небезопасно для продуктивной среды) можно попробовать добавить параметры encrypt=true;trustServerCertificate=true в строку подключения JDBC. Однако 1С управляет этим подключением внутренне, и такой прямой контроль над параметрами может быть недоступен пользователю.Помимо проблем с SSL/TLS, мы можем столкнуться с ошибками таймаута при попытке подключения к SQL Server. Пример такой ошибки:
В процессе обновления конфигурации базы данных при работе оптимизированного механизма обновления произошла критическая ошибка по причине: Критическая ошибка работы Java-процесса. Путь к Java: C:\Program Files\JAVA\\bin\java.exe Действие: prepare Process ID: 13496 Код возврата: 1 Ошибка: Exception in thread "main" com._1c.dmf.v8.cli.ApplicationException: com.microsoft.sqlserver.jdbc.SQLServerException: The connection to the host SQLTORG, named instance MSSQLSERVERDEV, 1415 failed. Error: "java.net.SocketTimeoutException: Receive timed out". Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434. For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
Перевод основной части: "Соединение с хостом SQLTORG, именованным экземпляром MSSQLSERVERDEV, порт 1415 не удалось. Ошибка: «java.net.SocketTimeoutException: Таймаут получения». Проверьте имена сервера и экземпляра, а также убедитесь, что брандмауэр не блокирует UDP-трафик на порт 1434. Для SQL Server 2005 или более поздних версий убедитесь, что на хосте запущена служба SQL Server Browser."
Эта ошибка указывает на то, что Java-процесс 1С не смог установить соединение с SQL Server в течение заданного времени ожидания. Это обычно связано с сетевыми проблемами, неправильными именами сервера/экземпляра или некорректной конфигурацией SQL Server.
SQLTORG) и имя именованного экземпляра (MSSQLSERVERDEV), указанные в настройках подключения 1С к СУБД, абсолютно корректны. Малейшая опечатка приведет к невозможности подключения.SQL Server Browser запущена на сервере с SQL Server.TCP/IP включен для вашего экземпляра SQL Server в SQL Server Configuration Manager. Если мы изменили настройки, необходимо перезапустить службу SQL Server.ping и telnet (если telnet-клиент установлен) для проверки сетевого доступа к порту. Например, telnet SQLTORG 1433 (если SQLTORG - это имя сервера и используется стандартный порт).lpc: (для локальных подключений). Для Java-компонента ОМР v2 это может быть непонятно и вызывать таймаут. Мы должны указывать имя сервера СУБД так, как если бы мы обращались к нему по сетевому доступу, например, просто SQLTORG или SQLTORG\MSSQLSERVERDEV.Помимо специфических ошибок, существуют общие моменты, которые мы должны учитывать при использовании нового механизма реструктуризации.
java.exe), который использует 1С. Этот путь может быть указан в файле conf.cfg сервера 1С или определяться через системную переменную окружения JAVA_HOME. Убедитесь, что сервер 1С способен найти и запустить соответствующую JRE. В некоторых случаях мы можем попробовать добавить путь до папки bin вашей JRE в системную переменную Path.C:\Users\Username\AppData\Roaming\1C\1CE\ и C:\Users\Username\AppData\Local\1C\1CE\.NoSuchElementException: Сущность "ReferenceChngR58055" не имеет разделителя с идентификатором... (сообщение 18), могут указывать на проблемы с метаданными или их изменением через расширения.Мы надеемся, что этот подробный разбор поможет вам успешно справиться с ошибками при использовании нового режима реструктуризации v2 в 1С:Предприятии и обеспечить стабильную работу вашей системы.