Нативный RSA в 1С: как зашифровать карту для эквайринга без COM и .NET
Нативный RSA в 1С шифрует данные банковской карты открытым ключом платёжного шлюза средствами самой платформы — без CryptoPro CSP, COM-объектов и .NET-компонент. Механизм встроен начиная с определённых сборок платформы 8.3 и работает одинаково на Windows- и Linux-сервере. Он снимает типовую проблему интеграции: код, который шифровал карту на рабочем месте разработчика, отказывался работать на боевом сервере 1С.
почему возникает ошибка при шифровании карты через com-объект в 1С
Разработчик тестирует оплату картой на своей машине: CryptoPro CSP установлен, сертификат банка-эквайера импортирован в хранилище, COM-объект CAdESCOM создаётся без единой ошибки, тестовая карта шифруется, запрос уходит в шлюз и возвращается токен. Код выкладывают на боевой сервер 1С — часто арендованный, нередко на Linux, — и та же строка кода валится с «Invalid class string» или просто ничего не возвращает. Похожая история типична для розничных и B2B-интеграций эквайринга в Москве: небольшая команда разработки собирает и проверяет код на одном компьютере, а прод разворачивается на сервере с другой конфигурацией и другими правами доступа.
Причина не в коде, а в природе COM: это технология Windows, на Linux она не существует в принципе, а криптопровайдер должен быть установлен и зарегистрирован именно на той машине, где физически выполняется серверный код 1С — не на компьютере разработчика и не на клиенте. Поэтому демо, которое три недели подряд работало у разработчика, ничего не говорит о том, заработает ли оно у клиента, где кластер 1С стоит на другой ОС или под учётной записью без прав на регистрацию COM.
Пока идёт разбор, почему рабочий на вид код падает в проде, магазин теряет не абстрактные «проблемы», а конкретные деньги: форма оплаты на сайте открывается, но платёж не проходит, заявки уходят в статус «ошибка», а срок запуска интеграции, обещанный за неделю, растягивается на переустановку CryptoPro на сервере, покупку лицензии на неё и поиск администратора с правами root на арендованной машине.
и внешняя .net-компонента спасает не всегда
.NET-компонента, вызываемая как внешняя, выглядит обходным путём: не нужен CryptoPro, шифрование пишут на C#. На практике компонента такая же Windows-зависимая, как и COM, а для её запуска серверу 1С нужен включённый небезопасный режим работы с внешними компонентами — многие администраторы отключают его намеренно, потому что это расширяет поверхность атаки на сервер. В итоге интеграция снова упирается не в код, а в то, что этот код на сервере просто не может выполниться.
как исправить: шифрование карты нативным rsa в 1С без com и .net
Начиная с определённой сборки платформы 8.3, 1С умеет шифровать данные открытым ключом RSA собственными средствами — без CryptoPro, без внешних компонент и без разницы между Windows и Linux-сервером. Криптографический движок встроен в саму платформу и не зависит от того, что установлено рядом: серверу достаточно получить сертификат шлюза с открытым ключом и вызвать штатную функцию шифрования.
- ✓Получить у платёжного шлюза сертификат с открытым ключом — обычно файл .cer или .pem, который банк или процессинг выдаёт вместе с документацией API.
- ✓Загрузить сертификат в 1С как двоичные данные и создать из него объект открытого ключа платформенными средствами — без обращения к внешнему криптопровайдеру.
- ✓Сформировать блок данных карты в формате, который требует шлюз (обычно JSON или фиксированная строка с номером, сроком действия и кодом), и зашифровать его этим ключом.
- ✓Закодировать результат в base64 и отправить HTTP-запросом в API шлюза — расшифрованные данные карты при этом ни разу не попадают ни в лог, ни на диск сервера 1С.
Разница с com-схемой не только в отсутствии внешних зависимостей: код одинаково ведёт себя в толстом клиенте, на сервере и в веб-клиенте, потому что это часть платформы, а не внешняя технология. Для демо-стенда это значит, что тестовый пример, собранный на ноутбуке, с высокой вероятностью повторит поведение на боевом сервере — то, чего не было с COM. Проверять такую интеграцию стоит парой тестовых карт из sandbox-контура шлюза: одной с заведомо корректными данными и одной с истёкшим сроком действия, чтобы увидеть не только успешное шифрование, но и то, как шлюз возвращает отказ.
сравнение способов шифрования данных карты в 1С
Выбор между четырьмя вариантами определяет не скорость шифрования, а то, где именно интеграция откажет через полгода эксплуатации.
| способ шифрования | внешний компонент | работает на linux-сервере 1С | лицензия крипто-провайдера | типичная точка отказа |
|---|---|---|---|---|
| com-объект cryptopro csp | нужен, отдельная установка | нет | платная, на сервер | com не регистрируется на боевом сервере |
| внешняя .net-компонента | нужна, своя сборка | нет | не нужна | небезопасный режим внешних компонент отключён администратором |
| openssl через вызов из 1С | нужен openssl на сервере | да, если установлен | бесплатная | ломается при обновлении ОС и смене версии openssl |
| встроенный rsa платформы 1С | не нужен | да | не нужна | устаревшая сборка платформы или неверный формат сертификата |
Для небольшой компании, которая раньше принимала оплату только по счёту или наличными, выбор часто падает на последнюю строку таблицы — не потому, что остальные способы хуже технически, а потому что они добавляют задачи, не связанные с самим шифрованием: администрирование лицензий, слежение за версией OpenSSL на сервере, согласование небезопасного режима с отделом информационной безопасности. Встроенный RSA снимает эти задачи целиком, а не переносит их в код.
что делать, если ошибка шифрования повторяется даже на встроенном rsa
Встроенный RSA снимает зависимость от COM, но не отменяет обычные ошибки интеграции — они просто возвращаются в других формах.
- ✓Платформа сервера старше сборки, в которой появилась встроенная криптография — точный номер релиза стоит сверить в системных требованиях 1С перед тем, как искать баг в коде.
- ✓Сертификат шлюза пришёл в формате, который платформа не ожидает — PEM вместо DER или наоборот; конвертация решает вопрос без единой правки в коде шифрования.
- ✓Шлюз требует другую схему дополнения ключа — PKCS#1 v1.5 там, где демо использует OAEP, или наоборот; это сверяется с документацией конкретного шлюза, а не с общим примером.
- ✓Длина ключа сертификата отличается от той, что тестировали — 4096 бит вместо 2048 меняет размер зашифрованного блока и может требовать другого способа его передачи в запросе.
- ✓Код работал в толстом клиенте на разработке, но падает в серверном модуле или регламентном задании — кластер 1С может быть собран в другой разрядности или запускаться под учётной записью без нужных прав.
Ошибка «повторяется» почти всегда потому, что причина не в самом факте использования RSA, а в одном конкретном параметре — формате сертификата, схеме дополнения или версии платформы. Проверять их стоит по отдельности, а не пересобирать всю интеграцию заново.
как предотвратить повторение проблемы при подключении платёжного шлюза
Три меры снимают большинство повторных инцидентов ещё до того, как они долетают до боевого контура.
- ✓Зафиксировать версию платформы для боевого сервера и обновлять её по графику, а не вслед за первой найденной проблемой — стихийные обновления 1С на проде создают ровно те несовпадения версий, из-за которых шифрование ломается через месяц после успешного запуска.
- ✓Держать тестовый стенд с той же сборкой платформы и той же ОС, что на боевом сервере, и прогонять на нём шифрование тестовой картой шлюза перед каждым релизом интеграции — не только один раз на этапе внедрения.
- ✓Включать проверку крипто-блока в приёмку любого релиза, который затрагивает оплату — если магазин работает через 1С:Управление торговлей и принимает заказы с онлайн-оплатой, регрессия по шифрованию должна идти в одном списке с проверкой печати чека и списания остатков.
- ✓Исключить попадание номера карты в лог и историю запросов даже во временном виде — маскировать номер до записи в журнал регистрации 1С и хранить в базе только результат шифрования или токен, а не сами данные карты.
Шифрование данных карты — не факультативная предосторожность: обработка платёжных и персональных данных клиента при передаче третьей стороне подпадает под требования 152-ФЗ о защите персональных данных, и отсутствие шифрования на этом участке — не только риск отказа платежа, но и основание для претензий регулятора.
когда нужна доработка 1С под конкретный платёжный шлюз
У каждого шлюза свой формат запроса, своя схема дополнения ключа и свой набор полей в зашифрованном блоке — универсального демо-примера, который заработает «из коробки» с конкретным банком, не существует. Рабочая интеграция начинается с документации API шлюза, а не с адаптации чужого кода.
Если в штате нет разработчика, который уже собирал такие интеграции, разумнее заказать доработку 1С с техническим заданием, привязанным к документации конкретного шлюза и к его тестовому контуру — это исключает ситуацию, когда код «в целом работает», но падает на граничных случаях вроде карт с истекающим сроком действия или отклонённых транзакций. Отдельно стоит заложить время на код-ревью крипто-части силами специалиста по безопасности 1С — часовая ставка на сопровождение и такие точечные проверки у нас от 3 800 руб/час.
Для компании, которая внедряет приём онлайн-оплаты впервые, разумно завести этот пункт отдельной строкой в проекте внедрения 1С — с тестовым стендом, чек-листом шифрования и версией платформы, зафиксированной до запуска, а не после первого сбоя.
❓ Частые вопросы
Зачем шифровать карту в 1С, если оплату обычно принимает форма банка?
Часть корпоративных и B2B-шлюзов не даёт готовой формы: интеграция строится через прямой API-запрос, где шлюз ожидает уже зашифрованный блок с данными карты. В этом сценарии шифрование выполняет именно бэкенд — то есть 1С.
С какой версии платформы 1С доступен встроенный RSA без CryptoPro?
Функциональность появилась в одной из сборок ветки 8.3 и продолжает развиваться в новых релизах. Точный номер сборки для конкретной конфигурации стоит свериться в системных требованиях 1С перед началом работ.
Работает ли встроенное шифрование на арендованном сервере 1С на Linux?
Да, это его основное преимущество перед COM-объектом CryptoPro: встроенный RSA — часть платформы, а не внешний Windows-компонент, поэтому ведёт себя одинаково на Windows- и Linux-сервере.
Нужна ли лицензия на криптопровайдер для встроенного RSA в 1С?
Нет. В отличие от CryptoPro CSP, встроенный механизм не требует отдельной лицензии крипто-СЗИ — он входит в лицензию самой платформы 1С.
Что делать, если у нашего банка нестандартный формат зашифрованного блока?
Свериться с документацией API конкретного шлюза по схеме дополнения ключа и составу полей, а не с общим демо-примером. Для нестандартных требований обычно нужна точечная доработка под этот конкретный шлюз.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

