Дешифровка PEM с SGN-пакетом в 1С: 4 причины сбоя и как их снять
Файл .pem с SGN-пакетом разбирают в 1С в два шага. Сначала снимают PEM-обёртку: убирают строки BEGIN и END и декодируют Base64 в двоичные данные. Затем смотрят, что внутри: зашифрованное сообщение расшифровывают сертификатом получателя с закрытым ключом, а из подписанного достают содержимое без ключа.
Что лежит внутри PEM-файла и при чём тут SGN
PEM — это текстовая оболочка. Внутри неё двоичные данные в Base64, а границы отмечены строками «-----BEGIN PKCS7-----» и «-----END PKCS7-----». Слово после BEGIN называет тип блока: CERTIFICATE, PKCS7, CMS. Сама оболочка ничего не защищает: Base64 снимается за секунду и без ключей.
С SGN сложнее. Единого стандарта у этого расширения нет: разные системы кладут под .sgn то отсоединённую подпись, то присоединённую, то подписанный пакет, который ещё и зашифрован. Поэтому «дешифровка» в заявке сотрудника может означать три разные операции. Выбрать нужную получится, только когда понятно, что лежит в пакете.
Тип определяют за пару минут:
- ✓Откройте файл в текстовом редакторе и прочитайте строку после BEGIN. Если там CERTIFICATE, перед вами сертификат, а не пакет.
- ✓Выполните команду openssl asn1parse -inform PEM -in файл.pem. В выводе pkcs7-signedData означает подписанные данные, pkcs7-envelopedData означает зашифрованные.
- ✓Посчитайте строки BEGIN. Если их несколько, в файле лежит цепочка, например сертификаты и сам пакет, а код, который читает только первый блок, возьмёт не то.
Подписанный пакет читается без закрытого ключа: подпись удостоверяет автора и неизменность данных, но содержимое не прячет. Зашифрованный без ключа получателя не откроется никак. Дальнейший разбор держится на этой разнице.
⚠️ Почему возникает ошибка при дешифровке PEM с SGN-пакетом в 1С
Типичная картина. Понедельник, девять утра: бухгалтерия оптовой компании получает от контрагента пачку файлов .pem с реестром отгрузок. В пятницу они открывались, сегодня 1С на каждом пишет ошибку расшифровки. Кладовщик ждёт реестр, чтобы отпустить машину, а бухгалтер перебирает сертификаты в хранилище и не понимает, что изменилось.
Причин обычно четыре.
Файл не зашифрован, а подписан
Менеджер криптографии честно отвечает ошибкой, потому что расшифровывать нечего. Но сотрудник ищет проблему в сертификате и час за часом переустанавливает КриптоПро. Вопрос решает один взгляд на тип пакета: signedData или envelopedData.
Закрытого ключа нет там, где работает 1С
Сертификат в хранилище виден, поэтому кажется, что всё на месте. Но видна только открытая часть: контейнер с закрытым ключом остался на токене, на другом компьютере или в сессии, куда токен не пробросили. В клиент-серверной базе добавляется ещё вопрос, где выполняется криптооперация, на клиенте или на сервере: ключ стоит в одном месте, а 1С обращается к другому.
PEM разобран с ошибкой
Лишний перевод строки в середине Base64, невидимый символ в начале файла, заголовки вроде Proc-Type, несколько блоков в одном файле. Декодер либо падает, либо отдаёт мусор, поэтому менеджер криптографии сообщает о неверном формате и сбивает со следа.
Не тот провайдер или закончилась лицензия
Сертификат выпущен по ГОСТ Р 34.10-2012, но менеджер криптографии создан с неподходящим типом провайдера. Для КриптоПро CSP с ключом на 256 бит это тип 80, на 512 бит тип 81. Ещё один вариант: срок лицензии CSP закончился, и операции с ключом перестали проходить.
Пока файл не открыт, входящий документ не попадает в учёт: отгрузка стоит, акт остаётся неподписанным, платёж не проходит, а срок по договору идёт. Если в пакетах приходит отчётность или данные для ведомства, просрочка грозит штрафом. А сотрудник, которому надоело ждать ИТ, расшифровывает файлы на личном ноутбуке и кладёт результат в общую папку, и к потерям добавляется утечка.
🛠 Как исправить: расшифровка PEM-файла с SGN-пакетом средствами 1С по шагам
Порядок общий для обоих случаев, а расходятся они только на шаге с криптографией.
- ✓Прочитайте файл как текст и вырежьте нужный блок от строки BEGIN до строки END. Заголовки, пробелы и переводы строк уберите.
- ✓Декодируйте Base64 методом ПолучитьДвоичныеДанныеИзВаsе64Строки. На выходе двоичные данные: DER-структура пакета.
- ✓Создайте МенеджерКриптографии с провайдером, под который выпущен сертификат (типы 80 и 81 для ГОСТ Р 34.10-2012 названы выше).
- ✓Выполните операцию по типу пакета, как описано ниже.
- ✓Оставьте результат в памяти и сразу передайте дальше, например в разбор XML.
Если внутри зашифрованное сообщение
Вызовите у менеджера метод Расшифровать. Менеджер сам подбирает в хранилище сертификат получателя, указанный в пакете, и берёт его закрытый ключ. Если контейнер защищён паролем, задайте пароль в свойстве ПарольДоступаКЗакрытомуКлючу: на сервере окно ввода показать негде, и без пароля операция завершится ошибкой. Убедитесь, что ключ доступен той учётной записи, под которой работает процесс 1С.
Если внутри подписанные данные
Содержимое достаётся без ключа, но подпись нужно проверить: подписант должен быть тем, кого вы ждёте, а сертификат не просрочен и не отозван. Сертификаты из подписи возвращает метод ПолучитьСертификатыИзПодписи. Если конфигурация построена на БСП, не пишите всё с нуля: подсистема электронной подписи уже умеет проверять подпись и расшифровывать, остаётся обёртка, которая принимает файл в PEM.
Фраза «на диск не пишите» не перестраховка. Если в файле персональные данные (реестр сотрудников, заявления клиентов), расшифрованная копия во временной папке или на общем диске создаёт риск нарушения 152-ФЗ. Результат держат в памяти и сразу загружают в документ.
Где выполнять расшифровку: на компьютере или на сервере
Место определяет, где должен лежать закрытый ключ, поэтому его выбирают до написания кода.
| Вариант | Где нужен закрытый ключ | Когда подходит | Слабое место |
|---|---|---|---|
| Клиентская часть 1С на рабочем месте | На компьютере пользователя: токен или контейнер | Единичные файлы, один-два сотрудника | Всё вручную; в веб-клиенте нужно подключить расширение для работы с криптографией |
| Сервер 1С, регламентное задание | На сервере, доступен учётной записи службы | Файлы от многих контрагентов, приём по расписанию | Ключ нужно защитить на сервере и настроить права на контейнер |
| Внешняя утилита, которую вызывает 1С (КриптоПро CSP, cryptcp) | Там, где запускается утилита | Формат, который менеджер криптографии не разбирает | Появляются временные файлы на диске, сопровождать сложнее |
| Обработка или расширение с собственным разбором PEM | Зависит от места запуска из вариантов выше | Нестандартный SGN-пакет, разные форматы у разных контрагентов | Нужна разработка и тесты на образцах каждого контрагента |
🔁 Что делать, если ошибка повторяется
Не переустанавливайте всё подряд. Сузьте круг:
- ✓Откройте тот же файл вне 1С, через КриптоПро CSP или утилиту cryptcp на том же компьютере. Не открылся и там, значит, дело в ключе, сертификате или самом файле, а платформа ни при чём.
- ✓Сверьте получателя. В зашифрованном пакете записано, для какого сертификата он создан: издатель и серийный номер. Типичный случай: вы перевыпустили сертификат, а контрагент по привычке шифрует на старый.
- ✓Выясните, где выполняется операция. В RDP-сессии токен виден только при включённой переадресации смарт-карт, а контейнер из реестра другого пользователя служба 1С не увидит.
- ✓Откройте журнал регистрации 1С на момент ошибки и сравните версии платформы, конфигурации и КриптоПро CSP. Старая версия библиотеки электронной подписи нередко не дружит с новым провайдером.
Дальше два сценария. Первый: конфигурация устарела и не работает с актуальным КриптоПро CSP. Тогда помогает обновление 1С, а сам файл править не придётся. Второй: формат нестандартный, контрагент кладёт в SGN собственную обвязку, и штатная подсистема её не понимает. Здесь нужна доработка 1С: обработка, которая разбирает именно этот формат.
🛡 Как предотвратить сбои при обмене подписанными и зашифрованными файлами
Повторы чаще организационные, чем технические: договорённости с контрагентом нигде не записаны, ключ живёт у одного человека, срок лицензии никто не отслеживает.
- ✓Зафиксируйте с контрагентом, что он присылает: подпись или шифрование, тип блока, кодировку, один блок или цепочку. Хватит абзаца в регламенте обмена.
- ✓Храните два образца на каждого контрагента: рабочий и тот, на котором сломалось. После обновления платформы или CSP прогоняйте оба.
- ✓Поставьте напоминания о сроках сертификата и лицензии КриптоПро CSP за месяц до окончания. О перевыпуске сертификата сообщайте контрагентам в тот же день.
- ✓Не держите единственный ключ на токене у одного сотрудника: отпуск главбуха не должен останавливать приём файлов.
- ✓Расшифровывайте по расписанию на сервере и сразу загружайте результат в базу, а файлы не пересылайте по почте и не носите на флешках.
- ✓Обновляйте конфигурацию и CSP вместе и по плану, а не после первой ошибки.
Как мы решаем задачу с PEM и SGN в 1С и сколько это стоит
Начинаем с образца: нужен тестовый файл от контрагента без персональных данных. По заголовку и структуре видно, что внутри (подпись или шифрование), один блок или цепочка и какой алгоритм. Мы не гадаем по тексту ошибки и не переустанавливаем КриптоПро по кругу: сначала определяем тип пакета, потом выбираем между настройкой и доработкой.
Если формат стандартный, настраиваем штатную подсистему электронной подписи в вашей конфигурации и проверяем приём файла целиком, от загрузки PEM до проведённого документа. Если нестандартный, пишем обработку или расширение: оно снимает обёртку, расшифровывает или проверяет подпись и раскладывает данные по справочникам и документам. Расшифровка идёт в памяти, без временных файлов, поэтому вопрос с персональными данными закрыт сразу. А если систему только выбирают, обмен подписанными файлами с контрагентами закладывают в проект на старте, при внедрении 1С, чтобы не переделывать потом.
Цена: час специалиста по сопровождению 1С стоит 3800 ₽. Сколько часов понадобится, зависит от формата пакета и состояния конфигурации, поэтому оценку по часам даём после просмотра образца, а не наугад по телефону. Пришлите тестовый файл от контрагента, и мы скажем, что в нём и сколько работы за этим стоит.
❓ Частые вопросы
Чем расшифровка PEM-файла отличается от проверки подписи в 1С?
Расшифровка превращает зашифрованное сообщение обратно в данные и требует закрытого ключа получателя. Проверка подписи закрытого ключа не требует: она подтверждает, что данные не менялись и кто их подписал. Файл .sgn или .pem может содержать любое из двух, поэтому сначала определяют тип пакета, а потом выбирают операцию.
Почему 1С видит сертификат, но не расшифровывает файл?
Обычно в хранилище лежит только открытая часть сертификата, а контейнер с закрытым ключом остался на другом компьютере, на токене или в другой сессии RDP. Второй вариант: отправитель зашифровал файл на старый сертификат, который вы потом перевыпустили. Сверьте серийный номер получателя в пакете с серийным номером вашего сертификата.
Можно ли расшифровывать такие файлы на сервере 1С по расписанию?
Можно, если закрытый ключ и КриптоПро CSP установлены на сервере, а служба 1С работает под учётной записью с доступом к контейнеру. Регламентное задание забирает файлы из папки или почты и обрабатывает пачкой. Главное решить заранее, где хранится ключ и кто к нему имеет доступ.
Сколько стоит доработка 1С под разбор такого файла?
Час специалиста по сопровождению 1С стоит 3800 ₽. Сколько часов уйдёт, зависит от формата: штатную подпись БСП настроить проще, нестандартный SGN-пакет требует отдельной обработки. Для оценки по часам достаточно одного тестового файла без персональных данных: его можно заранее запросить у контрагента.
Как понять, что внутри файла подпись или шифрование?
Откройте файл в текстовом редакторе и посмотрите на строку BEGIN: она называет тип блока, например PKCS7 или CMS. Точнее скажет команда openssl asn1parse: в выводе будет pkcs7-signedData для подписи или pkcs7-envelopedData для шифрования. Если в файле несколько блоков BEGIN, разбирайте каждый отдельно.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

