При разработке интеграционных решений на платформе 1С:Предприятие часто возникает необходимость использования криптографических алгоритмов, таких как SHA-512, для работы с внешними API (например, криптобиржами, платежными шлюзами или государственными информационными системами). Исторически для этого программисты часто обращались к возможностям операционной системы Windows, вызывая библиотеки .NET Framework через механизм COM (Component Object Model).
Однако при переносе или первоначальной настройке такого кода на 64-битном сервере 1С разработчики регулярно сталкиваются с неприятной ошибкой при попытке инициализации объекта: Криптография = Новый COMОбъект("System.Security.Cryptography.SHA512Managed");. Система возвращает системное сообщение: "Unknown error 0x80131700". Давайте детально разберем, почему возникает эта проблема, проанализируем внутренние механизмы взаимодействия платформы 1С и среды .NET, а также изучим все возможные способы решения этой задачи — от настройки операционной системы до перевода конфигурации на современные встроенные механизмы 1С.
Код ошибки 0x80131700 в экосистеме Windows расшифровывается как FUSION_E_LOADER_NOT_INITIALIZED. Это означает, что загрузчик подсистемы Fusion (которая отвечает за поиск, загрузку и связывание сборок .NET) не смог инициализировать среду выполнения CLR (Common Language Runtime).
Выясним подробнее, как это происходит в контексте сервера 1С:
rphost.exe) пытается создать COM-объект System.Security.Cryptography.SHA512Managed, операционная система обращается к системному реестру Windows для поиска соответствующего идентификатора класса (CLSID).0x80131700.Ниже мы подробно рассмотрим несколько практических вариантов решения этой проблемы, начиная с настройки окружения Windows и заканчивая полной модернизацией кода 1С для избавления от внешних зависимостей.
Самый простой и быстрый способ, который помогает "оживить" старый код без изменения конфигурации 1С, — это установка .NET Framework 3.5 непосредственно на сервере, где запущен рабочий процесс rphost.exe. После активации этого компонента в операционной системе появится необходимая среда CLR v2.0, и COM-объект инициализируется без ошибок.
Рассмотрим по шагам процесс установки .NET Framework 3.5 на Windows Server:
sources\sxs на установочном диске) по ссылке "Указать альтернативный исходный путь".Второй, более быстрый вариант установки для системных администраторов — использование командной строки PowerShell. Запустите консоль PowerShell от имени администратора и выполните следующую команду:
Install-WindowsFeature NET-Framework-Core
После завершения выполнения команды проблема с вызовом SHA512Managed будет решена. Однако этот способ имеет существенный недостаток: во многих крупных корпорациях установка устаревших версий .NET Framework строго запрещена политиками информационной безопасности из-за потенциальных уязвимостей.
В некоторых случаях на сервере уже может быть установлена среда .NET Framework 4.5 или 4.6, но из-за отсутствия системных обновлений и исправлений безопасности загрузчик COM-объектов не может корректно сопоставить старые вызовы с новой средой выполнения. Проанализируем этот сценарий:
Если по соображениям безопасности вы не хотите устанавливать версию 3.5, убедитесь, что текущая версия .NET Framework 4.x обновлена до самого последнего релиза через Центр обновления Windows (Windows Update). Установка накопительных пакетов обновлений безопасности зачастую исправляет внутренние ошибки регистрации классов COM в реестре Windows, позволяя современной CLR v4.0 перехватывать и корректно обрабатывать вызовы, предназначенные для старых версий библиотек.
Если вам запрещено устанавливать .NET Framework 3.5, а обновлений Windows недостаточно, существует элегантное архитектурное решение. Мы можем принудительно заставить процесс сервера 1С выполнять старые COM-объекты .NET внутри современной и безопасной среды выполнения CLR v4.0. Для этого нам не потребуется вносить изменения в код конфигурации или устанавливать старое ПО.
Разберем этот процесс по шагам:
C:\Program Files\1cv8\8.3.XX.YYYY\bin\ (где 8.3.XX.YYYY — конкретный номер вашего релиза платформы).rphost.exe.rphost.exe.config. Если такой файл уже существует, откройте его для редактирования. Обратите внимание, что для создания и сохранения файлов в этой директории вам понадобятся права администратора.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>
Проанализируем структуру этого конфигурационного файла. Параметр useLegacyV2RuntimeActivationPolicy="true" является ключевым. Он дает команду загрузчику операционной системы использовать среду .NET 4.0 (CLR v4.0) для выполнения всех старых COM-объектов и библиотек смешанного типа, которые изначально были скомпилированы под .NET 2.0–3.5.
После создания и сохранения файла rphost.exe.config необходимо обязательно перезапустить службу сервера 1С:Предприятие через оснастку "Службы" (Services.msc) для применения новых параметров загрузки процессов.
Важное примечание: Если аналогичный код криптографии выполняется не на сервере, а непосредственно в толстом или тонком клиенте на рабочих местах пользователей, аналогичные файлы конфигурации с тем же содержимым необходимо создать для клиентских приложений в их каталогах установки. Файлы должны называться 1cv8.exe.config (для толстого клиента) или 1cv8c.exe.config (для тонкого клиента).
Использование COM-объектов операционной системы Windows на сервере 1С несет в себе скрытые риски. Современный тренд автоматизации бизнеса диктует необходимость кроссплатформенности. Если в будущем ваша компания решит перевести серверную часть 1С на операционную систему Linux (что сейчас крайне актуально в рамках импортозамещения), любой код, использующий внешние COM-объекты .NET Framework или устаревшую библиотеку Capicom, мгновенно перестанет работать и приведет к критическому сбою системы.
К счастью, начиная с версии платформы 1С:Предприятие 8.3.18, фирма "1С" добавила мощную встроенную поддержку вычисления хеш-сумм по современным стандартам безопасности, включая семейство алгоритмов SHA-2 (в частности, SHA-512). Использование встроенного объекта ХешированиеДанных полностью избавляет нас от необходимости регистрировать библиотеки, настраивать .NET Framework или создавать конфигурационные файлы.
Рассмотрим по шагам пример создания кроссплатформенного и быстрого алгоритма получения хэша SHA-512 на языке 1С:
// Шаг 1. Создаем объект хеширования с указанием нужного алгоритма
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA512);
// Шаг 2. Добавляем исходные данные для расчета хэша.
// В качестве параметра можно передать строку, двоичные данные или файл.
// Если мы передаем строку, платформа автоматически преобразует ее с учетом кодировки UTF-8.
Хеширование.Добавить(СтрокаДляХеширования);
// Шаг 3. Получаем результат вычисления в виде объекта "ДвоичныеДанные"
ХешСуммаДвоичныеДанные = Хеширование.ХешСумма;
// Шаг 4. Если внешнему API требуется получить хэш в виде строки HEX (шестнадцатеричный вид):
// Стандартное представление ДвоичныхДанных в 1С при приведении к строке возвращает HEX-последовательность с пробелами.
// Очистим результат от пробелов, чтобы получить чистую строку хэша.
ХешСтрока = СтрЗаменить(Строка(ХешСуммаДвоичныеДанные), " ", "");
ХешСтрока = НРег(ХешСтрока); // Приводим к нижнему регистру, если это требуется принимающим API
Проанализируем преимущества перехода на встроенный объект ХешированиеДанных:
Иногда разработчики сталкиваются с похожей ошибкой 0x80131700 при попытке зарегистрировать и вызвать не стандартную системную библиотеку Windows, а собственную (кастомную) библиотеку, написанную на языке C# в Visual Studio. В этом случае корень проблемы кроется в разрядности регистрации.
Если вы запускаете регистрацию библиотеки через утилиту Regasm.exe, предназначенную для 32-битных систем, 64-битный рабочий процесс сервера 1С rphost.exe просто не увидит этот класс в системном реестре, так как записи попадут в ветку Wow6432Node.
Разберем, как правильно зарегистрировать вашу .NET сборку для работы на 64-битном сервере 1С:
Regasm.exe, расположенную по пути вашей актуальной версии .NET Framework 4.0. Выполните команду перехода в каталог:
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
regasm.exe "C:\MyLibraries\MyCryptoLibrary.dll" /tlb /codebase
Использование флага /codebase крайне важно, так как оно указывает загрузчику операционной системы точный путь к файлу библиотеки на диске, избавляя вас от необходимости помещать сборку в глобальный кэш сборок GAC (Global Assembly Cache).
Мы детально проанализировали причины возникновения ошибки 0x80131700 на 64-битном сервере 1С:Предприятие при интеграции с библиотеками .NET Framework. Подводя итог, дадим несколько практических рекомендаций для разработчиков и системных администраторов:
SHA512Managed или внешних библиотек типа Capicom. Полностью перепишите этот функционал на встроенный объект платформы ХешированиеДанных. Это гарантирует стабильность, кроссплатформенность и максимальную скорость работы кода.rphost.exe.config для перенаправления выполнения старых объектов в современную среду CLR v4.0. Это наиболее безопасный способ настройки со стороны администрирования.