Криптография и электронная подпись в решениях на 1С

Что такое эцп

Электронная цифровая подпись (ЭЦП) приравнивает любой электронный документ к бумажному оригиналу и позволяет удаленно взаимодействовать с государственными учреждениями, юридическими и физическими лицами, заключать сделки, подавать заявления, подписывать документы и подтверждать личность владельца. Закрытый ключ гарантирует защиту ЭЦП от фальсификации и взломов.

1с-эдо

В случае, если Вы используете программу 1С в серверном режиме, у Вас есть возможность настроить и серверное подписание электронных документов, т.е. когда и криптопровайдер, и электронные подписи установлены только на сервере (на “клиентах” их нет).
Принципиальное значение в реализации данного варианта имеет то, от имени какого пользователя осуществляется настройка криптографии на сервере.
Настройка должна быть выполнена от имени того пользователя, под которым запускается служба “Агент сервера 1С:Предприятия”.
По умолчанию данный пользователь именуется “USR1CV8”, см. Рис. 1.

Криптография и электронная подпись в решениях на 1С

Рис. 1.

Эта служба может быть запущена и от имени другого пользователя (например, “Administrator”) – данное правило задается системным администратором на свое усмотрение.
Поэтому, перед началом настройки серверной криптографии, обязательно нужно уточнить вышеописанный момент.
Определившись с пользователем, можно начинать.

1. Проходим на сервере аутентификацию под пользователем, под которым запускается служба “Агент сервера 1С:Предприятия”.
2. Устанавливаем криптопровайдер.
3. Месторасположение контейнеров с закрытыми ключами (реестр, жесткий диск, внешний носитель) может быть любым, с условием, что они доступны пользователю, под которым запускается служба “Агент сервера 1С:Предприятия”.
4. Устанавливаем личные сертификаты, корневые сертификаты, списки отозванных сертификатов. При этом установку можно проводить “для текущего пользователя” – нет необходимости устанавливать их “для локального компьютера”.
5. Помечаем в программе 1С галочками пункты “Проверять подписи и сертификаты на сервере” и “Подписывать на сервере” (Администрирование – Обмен электронными документами – Электронная подпись и шифрование – Настройки электронной подписи и шифрования – закладка “Программы”).

Похожее:  - личный кабинет ФРМР | Подать документы на аккредитацию

Система настроена. Подписание на “клиентах” должно проходить успешно.

При тестировании сертификата на “клиенте” нужно обращать внимание только на корректность прохождения этапов теста на сервере, см. Рис. 2.

Криптография и электронная подпись в решениях на 1С

Рис. 2.

Stunnel

При заходе на URL local/login в случае успешной авторизации пользователя на Рутокен ЭЦП Flash локальное web-приложение, используя php-cgi, запускает процесс sTunnel, передавая ему PIN-код токена в качестве одного из параметров командной строки.Кроме того, локальное WEB-приложение может сконфигурировать sTunnel на использование определенного сертификата для проведения клиентской аутентификации в рамках TLS.

STunnel, слушая на localhost, ожидает реверcированного NGINX-ом запроса от браузера. При получении первого запроса устанавливает TLS-соединение с удаленным сервером в соответствии со своим конфигурационным файлом и затем передает по установленному соединению запросы и ответы.

Пример конфигурационного файла:

; проверка сертификата сервера обязательна
verify=1

; режим работы: клиент TLS-прокси
client=yes

; корневой сертификат
CAFile=ca2001_A-root.crt

; версия протокола TLS
sslVersion=TLSv1

; не создаем иконку в трее
taskbar=no

; уровень ведения логирования
DEBUG=7
output = log

; использовать engine PKCS11_GOST для работы с Рутокен ЭЦП
engine=pkcs11_gost

; использовать библиотеку PKCS#11 из директории запуска процесс
engineCtrl=MODULE_PATH:rtpkcs11ecp.dll

;за ГОСТ-ы отвечает engine
engineDefault=ALL

  
[remote system]

; используем для загрузки ключа engine PKCS11_GOST
engineNum = 1

; загружаем клиентский сертификат из файла
cert=client.crt

; ID ключевой пары на Рутокен ЭЦП                                                                  
key = a0:59:d9:62:0d:09:69:2f:b6:ba:2d:9b:da:5b:2b:4d:fe:75:05:19

; прокси принимает подключения на данном порту
accept = localhost:1443

; удаленный сервер
connect = x.x.x.x:443
sni = localhost


; используем российский шифрсьют для TLS
ciphers = GOST2001-GOST89-GOST89

; for IE
TIMEOUTclose = 0

Подобное конфигурирование дает вот что:

Web-сервер nginx

Этот web-сервер вполне успешно запускается на localhost без установки, с FLASH-памяти Рутокен ЭЦП Flash.

Конфигурационный файл выглядит так:

Аутентификация на базе эцп

Уже в нескольких топиках рассматривались проблемы построения безопасного механизма аутентификации при небезопасном соединении. Ниже предлагается к обсуждению схема с использованием асимметричной криптографии. Такой подход позволит аутентифицироваться на сервере, никогда не передавая серверу пароль, ни при регистрации, ни при аутентификации. Как всегда, будет демонстрация и исходные коды. Кому данная тема интересна, прошу под кат.

Ранее мы уже рассмотрели несколько вариантов:

  • Решение с шифрованием пароля самое простое и имеет огромное преимущество — внедрение такой схемы не требует перерегистрация пользователей. Безопасность этого решения не на высоте, но все равно лучше, чем пароли передаваемые в открытом виде.
  • SRP-6, о котором тоже рассказывалось — безопасный протокол. Из недостатков, пожалуй, только длинный диалог с сервером и сложность реализации.
  • Аутентификация на базе Рутокен, описанная здесь, очень безопасное решение, но сравнивать его с чисто программными решениями некорректно. И надо отметить, что не все пользователи готовы платить за дополнительное устройство.

Предлагаемый механизм аутентификации использует тот же протокол, что и решение на базе Рутокен. Основное отличие заключается в том, что все криптографические операции выполняются программно, а приватный ключ формируется на основании пароля. Оба решения используют

криптографию на базе эллиптических кривых (ECC).

ECC криптографически более стойкая чем RSA, что позволяет использовать более короткие ключи, и как следствие, снижает требования к производительности. И так:

Регистрация.

Аутентификация.

Прилагается

демонстрация

. В подготовке примера использовались

библиотека

написанная студентами Стэнфорда. Отдельное спасибо хорошему человеку

Мартыненко Александру

, у которого к сожалению нет инвайта на Хабр, за программную реализацию генерации ключевой пары и формирования ЭЦП по алгоритму ГОСТ Р 34.10-2001 в прилагаемом примере.

Конечно, все приведенные примеры, всего лишь примеры. Для их «боевого» использования надо сперва хорошо подумать и больше внимания уделить различным «мелочам». Однако само существование различных защищенных протоколов аутентификации приводит к вопросам. Почему до сих пор пароли передают в открытом виде? Почему хранят и пароли в БД в открытом виде или в виде хешей без соли? При общении с некоторыми представителями крупных онлайн-сервисов о безопасности их аккаунтов не раз слышал вопрос — А где здесь наша выгода? Так все же, есть ли выгода в безопасности ваших пользователей?

Криптография и электронная подпись в решениях на 1с

Защита ПО и шифрованиеБесплатно (free)

Если вы профессиональный программист, то не раз, наверное, задумывались о том, что бы создать какую то авторскую программу и продавать ее (а может уже продаете). Согласитесь, неплохо – один раз написали программу, а потом сидите в кресле (в шезлонге на Канарском пляже), потягиваете пивко с рыбкой, а денежки идут. Но есть одна проблема – как же надежно защитить свою нетленку от злобных пиратов, которые так и норовят обломать вас в вашей светлой мечте. Действительно, кто будет покупать программу, над создание которой вы пролили тонны соленого пота и крови, если ее можно спокойно скопировать у приятеля, или, говоря юридическим языком, украсть.

03.04.2022   
16584   
megabax   
10    

Заключение

Конструкция, при всей ее кажущейся громоздкости, представляет собой 4 запущенных приложения — nginx, sTunnel, php, php-cgi.

Эти приложения, как я уже отмечал, не требуют установки, хранятся на FLASH-памяти и с нее же запускаются.

Не составляет большого труда написать управляющее приложение, которое аккуратно их стартует и «гасит» процессы при окончании работы или в случае отсоединения токена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *