При работе со старыми, давно снятыми с поддержки конфигурациями 1С (такими как «Зарплата и кадры бюджетного учреждения 1.0», «Зарплата и управление персоналом 2.5», «Управление производственным предприятием 1.3») пользователи неизбежно сталкиваются с проблемой несовместимости с современными криптографическими стандартами. Наиболее острая проблема возникает при попытке использовать новые сертификаты электронных подписей, выпущенные по стандарту ГОСТ Р 34.10-2012, для взаимодействия с государственными органами, в частности, для получения электронных листков нетрудоспособности (ЭЛН) из Социального фонда России (СФР, бывший ФСС).
При попытке подписать или отправить запрос система выдает критическую ошибку: «Ошибка 0x80090009 (80090009). Указан неверный алгоритм. Не удалось подписать файл запроса ЭЛН». Выясним причину этой ошибки и разберем пошагово, как вернуть работоспособность обмена в старых конфигурациях без полного перехода на новые версии программ.
Системная ошибка CryptoAPI с кодом 0x80090009 (NTE_BAD_ALGID) буквально означает, что программное обеспечение передало криптопровайдеру идентификатор алгоритма (OID), который тот не смог распознать или применить в текущем контексте. В контексте старых конфигураций 1С эта проблема складывается из трех ключевых факторов:
75, тогда как для ГОСТ 2012 требуется тип провайдера 80 (для ключей длины 256 бит) или 81 (для ключей длины 512 бит). Платформа или внешняя компонента пытается инициализировать контекст с типом 75, используя новый сертификат, что и приводит к ошибке.Рассмотрим подробнее каждый этап исправления этой проблемы, от обновления платформы до модификации кода конфигурации и настройки операционной системы.
Прежде чем приступать к изменению программного кода, проанализируем системное окружение. Для полноценной поддержки криптографии ГОСТ Р 34.10-2012 на уровне платформы 1С нам потребуются определенные условия:
МенеджерКриптографии) могут функционировать некорректно. По возможности режим совместимости следует поднять до актуального для вашей платформы уровня (хотя бы до 8.3.12), предварительно выполнив резервное копирование и протестировав стабильность работы базы данных.В конфигурациях, где механизмы работы с электронными подписями построены на базе БСП (Библиотеки стандартных подсистем), за сопоставление криптопровайдеров отвечает справочник ПрограммыЭлектроннойПодписиИШифрования. В старых релизах этот справочник просто не имеет предопределенных настроек для работы с ГОСТ 2012.
Добавим поддержку нового алгоритма программно. Для этого нам необходимо открыть Конфигуратор, найти справочник ПрограммыЭлектроннойПодписиИШифрования, перейти в его Модуль Менеджера и в процедуру инициализации или заполнения настроек по умолчанию добавить инициализацию нового провайдера:
// Добавление поддержки КриптоПро CSP (ГОСТ 2012) в программный код
Настройка = Настройки.Добавить();
Настройка.Представление = НСтр("ru = 'КриптоПро CSP (ГОСТ 2012)'");
Настройка.ИмяПрограммы = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider";
Настройка.ТипПрограммы = 80;
Настройка.АлгоритмПодписи = "GR 34.10-2012 256";
Настройка.АлгоритмХеширования = "GR 34.11-2012 256";
Настройка.АлгоритмШифрования = "GOST 28147-89";
Настройка.Идентификатор = "CryptoPro2012";
Настройка.АлгоритмыПодписи.Добавить("GR 34.10-2012 256");
Настройка.АлгоритмыХеширования.Добавить("GR 34.11-2012 256");
Настройка.АлгоритмыШифрования.Добавить("GOST 28147-89");
Этот код позволит системе корректно определять настройки шифрования при выборе в интерфейсе программы профиля криптографии, привязанного к ГОСТ 2012.
Даже после изменения справочника программ шифрования попытка загрузить ЭЛН может завершиться неудачей. Дело в том, что регламентированная отчетность и механизмы прямого обмена с ФСС в старых конфигурациях используют внешнюю компоненту AddIn.ЭДОNative.CryptS (файл CryptS.dll). Старая версия этой компоненты жестко завязана на вызовы библиотек Windows с параметрами ГОСТ 2001.
Для решения этой проблемы выполним следующие действия:
КомпонентаОбмена, CryptS или аналогичные в составе обработок документооборота с контролирующими органами)..dll).ДокументооборотСКонтролирующимиОрганами или в общих макетах) и заменим его содержимое файлом, сохраненным из новой конфигурации.После замены компоненты платформа 1С при следующем обращении к функциям подписи автоматически распакует и зарегистрирует в операционной системе обновленную версию библиотеки, умеющую корректно работать со спецификациями ГОСТ 2012.
Проанализируем программный код модулей, отвечающих за отправку отчетности и получение ЭЛН. В конфигурациях уровня ЗУП 2.5 / ЗКБУ 1.0 параметры инициализации контекста провайдера очень часто прописаны непосредственно в коде (так называемый «хардкод»).
Нам необходимо запустить глобальный поиск по конфигурации (сочетание клавиш Ctrl + Shift + F) по значению 75 (числовой идентификатор типа провайдера ГОСТ 2001) и по строке "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider".
Особое внимание следует уделить общему модулю ДокументооборотСКонтролирующимиОрганами и модулям обработки РегламентированнаяОтчетность. В местах, где происходит создание объекта криптографии, добавим условие автоматического определения типа провайдера на основе анализа используемого сертификата:
// Корректировка выбора типа провайдера в зависимости от алгоритма сертификата
Если Найти(Врег(ИмяАлгоритмаСертификата), "2012") > 0 Тогда
ТипПровайдера = 80; // ГОСТ Р 34.10-2012 (256 бит)
ИмяПровайдера = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider";
Иначе
ТипПровайдера = 75; // ГОСТ Р 34.10-2001
ИмяПровайдера = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider";
КонецЕсли;
Если в коде используются вызовы методов внешней компоненты CryptS, убедимся, что параметры инициализации также принимают переменные значения, а не жестко заданные константы старого стандарта.
После успешного подписания файла запроса на получение ЭЛН мы можем столкнуться с тем, что сервер ФСС не отвечает или возвращает ошибку соединения. Это связано с тем, что ФСС полностью прекратил поддержку старых шлюзов обмена версий 1.1 и изменил свои доменные имена в связи с объединением в Социальный фонд России (СФР).
В коде конфигурации (в модуле объекта обработки ДокументооборотСКонтролирующимиОрганами, функция СерверПриемаОтчетностиФССЭЛН или аналогичная) необходимо заменить устаревшие URL-адреса на новые рабочие эндпоинты СФР:
https://eln.fss.ru/.../ws-insurer-crypto-v11/) должен быть заменен на актуальный адрес веб-службы СФР.https://eln.sfr.gov.ru/ws-insurer-crypto/FileOperationsLnService?wsdl.Иногда даже при полностью корректном коде 1С операционная система Windows (особенно устаревшие версии или серверные ОС Windows Server 2012/2016) может некорректно обрабатывать сопоставление криптографических идентификаторов объектов (OIDs) алгоритма ГОСТ 2012. Для принудительного включения корректного сопоставления OID в КриптоПро CSP выполним простую настройку системного реестра:
Win + R, введите regedit и нажмите Enter для запуска редактора реестра.HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Crypto Pro\Cryptography\CurrentVersion\ParametersHKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\ParametersEnableOIDModify.1 (в десятичной системе исчисления).Для безошибочной работы криптографии в 1С критически важно правильно построить цепочку доверия сертификатов в операционной системе. Разберем, как правильно установить новые сертификаты ГОСТ 2012 через консоль сертификатов Windows или КриптоПро CSP:
CryptS пытается найти для него закрытый ключ подписи (которого у вас, естественно, нет) и возвращает ошибку обращения к контейнеру ключей.Выполнив все описанные шаги по модификации программного кода конфигурации 1С, замене устаревшей внешней компоненты шифрования на актуальную версию, а также настроив системный реестр и хранилище сертификатов Windows, мы полностью решим проблему совместимости со стандартом ГОСТ Р 34.10-2012. Наша старая конфигурация сможет беспрепятственно обмениваться данными с контролирующими органами и запрашивать электронные листки нетрудоспособности без необходимости дорогостоящего и экстренного обновления на новые редакции программных продуктов.