Не удалось подписать в формате xmldsig 1с отчетность
На хабре уже была обзорная статья о механизмах создания ЭЦП в браузере, где было рассказано о связке Крипто-Про CSP +их же плагин к браузерам. Как там было сказано, предварительные требования для работы — это наличие CryptoPro CSP на компьютере и установка сертификата, которым собираемся подписывать. Вариант вполне рабочий, к тому же в версии 1.05.1418 плагина добавлена работа с подписью XMLDsig. Если есть возможность гонять файлы на клиент и обратно, то для того, чтобы подписать документ на клиенте, достаточно почитать КриптоПрошную справку. Все делается на JavaScript вызовом пары методов.
Однако, что если файлы лежат на сервере и хочется минимизировать трафик и подписывать их, не гоняя на клиент целиком?
Интересно?
Итак, клиент/серверный алгоритм формирования цифровой подписи XMLDSig.
Информацию об спецификации по XMLDsig можно найти по адресу тут.
Я буду рассматривать формирование enveloping signature (обворачивающей подписи) для xml-документа.
Простой пример подписанного xml:
Чтобы лучше понять, что из себя представляет enveloping signature, предлагаю краткий перевод описания тэгов из спецификации:
- Signature -содержит данные подписи, включая саму подпись и сертификат.
- SignedInfo -содержит информация о подписываемых данных и алгоритмах, которые будут применяться при формировании подписи.
- CanonicalizationMethod -указывает канокализирующий алгоритм, который будет применен к SignedInfo перед вычислением подписи.
- SignatureMethod -указывает алгоритм, используемый для генерации и валидации подписи. На вход алгоритму приходит канокализированный тэг SignedInfo.
- Reference -может встречаться 1 или больше раз. Содержит информацию о подписываемых данных, включая местоположение данных в документе, алгоритм вычисления хэша от данных, преобразования, и сам хэш.
- Transforms и Transform -перобразования над данными. На вход первого transform приходит результат разыменовании(dereferencing ) атрибута URI тэга Reference. На вход каждому последующему transform приходит результат предыдущего, результат последнего transform приходит на вход алгоритма, указанного в DigestMethod. Обычно в transform указывают XPath, определяющий защищаемые части документа.
- DigestMethod -алгоритм вычисления хэша от результатов Transforms.
- DigestValue -значение хэша от результатов Transforms.Часто это хэш от данных, на которые указывает Reference URI.
- SignatureValue -собственно сама подпись, ради формирования которой все и затевается.
- KeyInfo — информация о ключе, на тут интересует тэг X509Certificate, который содержит base64encoded сертификат из ключа, которым подписаны данные.
Итак, исходные данные:
- устанавливаем CryptoPro CSP 3.6
- устанавливаем КриптоПро ЭЦП Browser Plugin
- устанавливаем сертификат с флешки в локальное хранилище (см. инструкцию
пункт «2.5.2.2. Установка личного сертификата, хранящегося в контейнере закрытого ключа»)
Посмотреть хэш можно с помощью hashObject.Value
3.2)Считаем хэш на сервере и отправляем на клиент. Этот вариант у меня так и не заработал, но честно сказать я особо и не пытался.
Возможно хэш надо преобразовывать в base64.
Отправляем на клиент, там используем
Именно на методе hashObject.SetHashValue у меня падала ошибка. Разбираться я не стал, но криптопрошном форуме говорят, что можно как-то заставить ее работать.
Если соберетесь реализовывать серверный алгоритм генерации хэша, то вот пара полезных советов:
1) Посчитайте хэш на клиенте и на сервере от пустой строки. он должен совпадать, это значит ваши алгоритмы одинаковые.
Для GOST3411 это следующие значения:
base64: mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsA=
hex: 98 1e 5f 3c a3 0c 84 14 87 83 0f 84 fb 43 3e 13 ac 11 01 56 9b 9c 13 58 4a c4 83 23 4c d6 56 c0
2) Добейтесь, чтобы у вас совпадали хэши для произвольных данных, генерируемые на клиенте и на сервере.
После этого можно пересылать клиенту только хэш от SignedInfo вместо всего SignedInfo.
Шаг №4.(клиент)
Генерируем SignatureValue и отсылаем на сервер SignatureValue и информацию о сертификате
Возвращем на сервер binReversedSignatureString и certValue.
Код функций из utils не выкладываю. Мне его подсказали на форуме криптоПро и его можно посмотреть в этой теме
Шаг №5. (сервер)
Заменяем в сгенерированном на шаге №1 тэге Signature значения тэгов SignatureValue и X509Certificate значениями, полученными с клиента
Шаг №6. (сервер)
Верифицируем карточку.
Если верификация прошла успешно, то все хорошо. В результате мы получаем на сервере документ, подписанный клиентским ключом, не гоняя туда-обратно сам файл.
Примечание: если работа ведется с документом, уже содержащим подписи, то их надо отсоединить от документа до шага №1 и присоединить к документу обратно после шага №6
В заключение хочется сказать большое спасибо за помощь в нахождении алгоритма участникам форума КриптоПро dmishin и Fomich.
Без их советов я бы плюхался с этим в разы дольше.
Андрей Глебов, докладчик конференции Infostart Event 2017 Community, делает обзор нормативной базы РФ по теме электронной подписи. Рассказывает о возможностях криптографии в платформе «1С:Предприятие 8» и ее расширении через технологию создания внешних компонент. Также он описывает функционал подсистемы «Электронная подпись» в конфигурации «1С:Библиотека стандартных подсистем», приводит примеры использования криптографии в сервисах «1С-ЭДО» и «1С:ДиректБанк», дает рекомендации по разработке собственных решений с криптографией и устранению проблем при запуске электронного документооборота на предприятиях.
Надо смотреть какую именно отчетность подписываете и требования законодательства к уровню ЭП для этой отчетности. На сколько помню, в 1С-Отчетности, с этим все было хорошо, чего не скажешь про другие сервисы
"специализированное ПО для ведения списка сертификатов". А можно примеры? Еще бы хорошо чтобы оно на почту предупреждения об окончании сертификата заранее слало.
(3) к сожалению, такого готового ПО не подскажу, чтобы еще и рассылку делало, но в 1С можно легко реализовать, особенно, если ЭДО туда встроено.. ))
(6) возьмите демо-поставку БСП, там уже есть справочник "Сертификаты" - при выдаче отв.лицу туда вносите запись (программа сама зачитает все данные открытого ключа), за одним будет порядок - понятно, какой сертификат, кому выдан.
Останется прикрутить отправку по smtp письма, можно без визуализации и хранения отправленного (в БСП подсистема работы с почтой тоже есть).
Ну если что найдете готовое, черкните сюда плиз!
Успехов!
Подскажите, а работает ли 1С под Linux?
К сожалению, на ИТС мануалы только под windows или только о криптопро.
(5) если вопрос "работает ли механизм криптографии в платформе 1С:Предприятие на Linux?", то ответ "Да".
В БСП модуль работал точно. Вероятно придется какое-то время повозиться с настройками, но это придется в любом случае делать. Также важно понимать, где будет располагаться модуль криптографии: на клиенте или на сервере, ну и соответственно, туда ставить Linux нужной версии и битности.
Рекомендую учесть, что сначала надо собрать стенд для экспериментов, полностью выверить состав ПО, аппаратной части, вплоть до конкретного набора токетов и сертификатов, и только потом планировать масштабирование.
(7) Заказчик просит всенепременно на сервере 1с, 1с сервер на линуксе, и криптопровайдер нужен - VipNet SCP.
Я вот пытаюсь понять, возможна ли эта связка вообще.
(9) Напишите на тех.подержку 1С с нужными вопросами, лучше производителя никто не ответит на этот вопрос + предложите провести пилот с подобной связкой, если получите теоритическое "да". Пилот подразумевает обычно прямое взаимодействие с командой разработки и более оперативное исправление проблем
Добрый день, Андрей!
Вы пишите что для избежания одновременного использования VipNet и CryptoPro "Вы заказываете сертификат в удостоверяющем центре, Вы можете указать, для какого криптосредства Вы его будете использовать."
Не могли бы чуть чуть поподробнее описать о чем идет речь. По крайней мере у меня не получилось.
(Задал вопрос в VipNet - есть ли возможность через них подписывать сертификаты CryptoPro и получил отказ).
Обратитесь в УЦ 1С, Такском или какой другой, не привязанный жестко к ВипНет или КриптоПро.
Если возникнет сложность, тех.поддержка 1С-ЭДО работает, пользуйтесь.
Добрый!
За 2 года много что могло поменяться, в т.ч. и в платформе появиться новые механизмы. ))
По стандарту XMLDSig подпись должна вкладываться в тот же файл, что и сами данные - это принципиальное отличие, т.е. подписывается набор данных в XML-тегах, а сам хеш кладется в другой тег.
Возможно, что в БСП это было реализовать целесообразнее, чем в платформе, но это уже надо спрашивать у разработчиков.
А если в 1С по терминалу работать? Можно ли поставить «КриптоПро» и в терминале пробросить для него ключи?
РУ-токен локально установлен на сервере 1С, там же КрптиПро серверная, хочу подписывать из клиента на терминальном сервере (т.е. на рабочих местах нет и не будет ключей), подписание и шифрование стоит "на сервере" - а не взлетает . Бухгалтерия 2.0 КОРП, платформа 8.3.12. Куда копать ? Или нереализуемый вариант ?
Определите, что именно не работает, в БСП есть диагностика, которая должна помочь - сертификат не виден, КриптоПро не подхватывается или еще что-то.
Дальше уже решать.
Самым простым, на мой взгляд, выглядит вариант - сесть за сервер, как за рабочую станцию и добиться того, что там все заработает, потом двигаться дальше.
Ну и пробуйте задавать вопросы по настройке на партнерском форуме 1С, разработчики БСП и платформы обычно вникают в детали и помогают решить вопрос, даже если это дефект какой-то конкрентной версии ПО.
Подскажите, пожалуйста, возможно ли настроить 1С-Отчетность так, чтобы КриптоПро и сертификаты были установлены на отдельном сервере (не на сервере 1С), а сервер 1С или локальный пользователь обращался к этому серверу за данными?
Проблема в том, что у организации несколько серверов 1С, несколько терминальных серверов и много расчетчиков, которым нужно получать данные в ФСС. Сейчас получается каждому нужно устанавливать сертификат на каждом сервере.
По настройке 1С-Отчетности никто лучше разработчиков 1С не скажет. Разве что коллеги из "Калуги-Астрал", попробуйте написать на хот-лайн.
Еще как вариант, ограничить средствами платформы установку соединения с АРМ расчетчиков каким-то одним 1С-сервером (или поделить по сегментам), чтобы сертификат ставить только на один сервер.
Добрый день, коллеги!
У меня такой вопрос: можно ли с помощью БСП или синтаксис помощника, как то понять, что это сертификат JaCard или токен.
Есть ли какой то признак в свойствах сертификата, мне нужно разделять обычные сертификаты от указанных.
БСП у меня 2.4.6 - ничего похожего не нашел, возможно в более старших версиях что то есть?
Спасибо!
Опишите подробнее, какую проблему хотите решить, почему важно разделять "обычные сертификаты от указазанных"?
Также не понятно в чем их отличие.
Собственно, токен/JaCard/реестр - это места хранения.
Сертификат с его закрытым ключом может быть также успешно перенесен в реестр Windows, но из-за этого он ничего не потеряет. Тогда не понятно, станет ли он "обычным"?
(22) Добрый день.
Это бизнес задача, у нас в одной конфигурации хранятся все сертификаты компании, их много, у нас своя конфигурация на основе БСП 2.4.6 для управления правами доступа.
Для работы с сертификатами используются ограничения в том числе и РЛС.
Для примера: нужно что некоторые сотрудники, могли видеть и работать только с сертификатами JzCarta (токены) а обычные сертификаты не видели в базе.
Поэтому мне нужен признак того, как определить токен ли это.
На счет реестра, это к данному вопросу не подходит, т.к. на сервере где запущена база, в реестре сертификатов ничего нет.
Я достаточно хорошо описал проблему?
Спасибо!
(23) что уловил:
- в базе есть сертификаты, которые связаны с закр.ключами размещенными на Токене (JaCarta) или в другом месте (тут не понял каком, что такое "обычный" сертификат);
- нужно сделать так, чтобы сотрудники могли видеть только какую-то часть сертификатов (но не понятно в каком сценарии, при какой "операции").
Если без дальнейших распросов, то вижу 2 варианта:
1) добавить признак в справочник сертификатов - "связан с токеном" - заполнять его при добавлении сертификата в базу и использовать для отборов и РЛС;
2) в момент "перед операцией" у пользователя делать поиск доступность закрытого ключа сертификата (ов) и если их нет (токен не вставлен или криптосредство не доступно), то просто не показывать (но не понятно, что такое "обычный сертификат").
Обычный сертификат - это тот который не с токена. Это я так для себя называю что бы понимать.
Был на семинаре, общался с платформщиками, понял что средствами 1С это понять на сегодняшний день нельзя, оставил заявку на рассмотрение изменения в платформе.
Дело в том что у нас сложный кейс, и сертификаты попадают автоматически в систему, без участия пользователя, поэтому расставлять ручками конечно можно, но не хотелось бы.
Спасибо.
На MacOS в Chrome не могу получить сертификаты, установленные в системе (это когда при добавлении выбираешь - с компьютера или из центра сертификации добавить сертификат), хотя расширение в хроме установлено. Это проблема 1С или я неправильно что-то настроил, кто знает?
(26) Типовой функционал БСП? Какой порядок действий (сценарий воспроизведения)? Какой 1С-клиент?
Отдельно надо пояснить, какое криптосредство на MacOS и где установлены сертификаты.
(27) Типовой Документооборот 8 ПРОФ, редакция 2.1 (2.1.14.4) . Подозреваю, что да - там типовой БСП.
Захожу через все функции в справочник "Сертификаты ключей электронной подписи и шифрования", открывается форма "Настройки электронной подписи и шифрования". На вкладке "Сертификаты" есть кнопка "Добавить" - "Из установленных на компьютере". Выбираю "Для подписания и шифрования", открывается форма "Добавление сертификата для подписания и шифрования". Вот в ней в декорации ругается, что сертификаты недоступны, при нажатии - что не установлено расширение, хотя в хроме на маке стандартное расширение 1С установлено. На винде и линуксе все ок - показывает установленные на компе сертификаты.
Веб-клиент, гугл хром. Платформа 1С:Предприятие 8.3 (8.3.14.1854)
По криптосредству и где сертификаты пока не поясню, мак не мой - у пользователя. Какие есть варианты криптосредств на маке и где сертификаты могут быть установлены на маке?
Удивлен, что в 2019 г еще кто-то пользуется таким барахлом, как токены JaCarta ) Хотя, возможно, некоторые просто любят трудности.
В остальном сертификат с неизвлекаемым ключом, даже перенесенный в реестр, не потеряет своих качеств, а значит не станет, конечно, "обычной" подписью в понимании авторов статьи.
Добрый день!
А есть какие-то утилиты автоматической установки списка отозванных сертификатов? в рамках Крипто-ПРО автоматически данные списки не актуализируются
(30) Добрый день! Списки отзыва ставятся автоматически на Крипто_ПРО, главное, чтобы УЦ, которому принадлежат сертификаты поддерживал распространения (точку расдачи списка отозванных сертификатов можно найти в свойствах сертификата, если открыть его в ОС) - за это отвечает отдельный сервис и он должен администрироваться силами УЦ, а с компьютера, на котором нужно обновлять списки отзыва автоматически, нужно обеспечить доступ через Интернет к точке расдачи списка УЦ.
Регулярность распространения прописана, если правильно помню, в регламенте деятельность УЦ (обычно 1-2 раза в месяц).
(31) ага, спасибо. Так и понял. У нас настроен прокси-сервер. Нужно в исключения добавить данные адреса распространения СОС
очень классная статья- спасибо.
а теперь вопрос)
Перед нашей компанией стоит задача- разработать сервис по приему отчетности из 1С и передачи отчетности в налоговый орган:
есть пользователи 1С (Конфигурации на базе БСП), у них сертифицированные ключи ЭЦП и программа VipNet. На стороне пользователей 1С будет формировать xml файлик отчета, подписывать его и отправлять в сервис нашей компании
наша компания должна проверить КЭП, проверить сам файлик на правильность заполнения и если всё норм - то передать налоговому органу
есть 2 вопроса:
1. насколько верно будет разработать такой сервис на 1С при условии что пользователей будет от 300 до нескольких тысяч
2. сможет ли бсп проверить КЭП если криптопровайдеры не предоставляют таких сервисов, т.е. проверку нужно будет делать локально
В этом проекте стоит бОльше внимания уделить ворк-флоу (как ваш сервис будет подтверждать приемку? как будет отвечать по ошибке проверки ЭП? как по ошибке формата? как на это будет реагировать 1С-решения клиентов?).
Рекомендую поштудировать стандарт "1С:ДиректБанк" (участвовал в его создании и подобные вопросы там прорабатывались).
2. Да, конечно, БСП умеет проверять. Более того, все типовые решения 1С, когда получают по ЭДО документы с ЭП, обязательно проверяют и отклоняют эл.док-ты, если подпись не валидна (например, просрочен сертификат).
Рекомендую поштудировать стандарт "1С:ДиректБанк" (участвовал в его создании и подобные вопросы там прорабатывались).
Спасибо за оперативный ответ. Тоже об этом подумал, тем более с одним банком делали интеграцию и прорабатывали эти вопросы там, но не использовали ЭЦП.
Спасибо за вопросы - теперь примерно понимаю с чем столкнемся.
Спасибо за статью.
На некоторых сайтах есть авторизация в систему через электронную подпись.
Есть ли возможность реализовать аналогичный вход в 1С ?
И как это можно проще сделать ?
1) Из описания не очень понятен кейс, приложите примеры сайтов.
2) Какую проблему решаем?
3) Кто будет пользоваться этим входом?
Поясню, распространие эл.подписи пока ограничено для физ.лиц, поэтому надо понимать целесообразность автоматизации.
можно ли используя БСП подписывать присоединенные файлы электронной подписью на "сервере" или подписание возможно только вызовом с клиента 1С? Требуется создать регл. задание, которое будет раз в сутки проходить по присоед. файлам к счет фактуре и подписывать их. Конфигурация 1С Документооборот.
Можно ли используя БСП подписывать файлы со штампом времени (TSP) ?
Использовать OCSP?
Добрый день!
Вопрос в тему хранения документов, подписанных электронной подписью. Может кто сталкивался или имеет представление:
в организации есть идея внедрить подписание внутренних документов усиленной неквалифицированной электронной подписью. Подписание планируется осуществлять в 1С:Бухгалтерии и 1С:Документообороте. Предположим, подписи сгенерированы, в 1с всё настроено и документы подписываются. А где и как хранить эти документы? Нужно ли создавать электронный архив, передавать в него доки с сопутствующими процессами составления архивных дел, описей и т.д.? Или можно не создавать себе таких проблем и хранить подписанные документы в 1С или томах на сетевом диске?
Программа 1С не всегда видит токены JaCard. Я не знаю в чем проблема, то ли в JaCard, то ли платформе. Переустанавливаешь криптосредство – оно какое-то время работает, а после перезагрузки системы снова слетает. Почему-то 1С и JaCard не очень дружат.
Здравствуйте, спасибо за статью.
Может кто подскажет - у нас сервер 1С на Windows Server 2016, на нём крутится кластер 1С: Медицина.Поликлиника.
Подписи хранятся в контейнерах на сервере, криптопровайдер - ViPNet CSP - установлен на сервере.
Процесс сервера запускается от доменного пользователя domain\usr1cv8.
Подписание и шифрование выбрано на стороне сервера 1С.
На сервере импортированы сертификаты организации и работников путем запуска ViPNet от имени domain\usr1cv8 и импорта сертификатов в личное хранилище.
Проблема такая: Если зайти в Администрирование-Общие-Настройки ЭП и шифрования, и оттуда выполнить проверку подписи, то все пункты успешно проходят проверку. Но при попытке подписания электронного больничного в интерфейсе 1с, или при запросе данных из ФСС выпадает ошибка:
Что я сделал:
На сервере запустил клиент 1С от имени domain\usr1cv8, затем в настройках ЭП и шифрования указал, что нужно подписывать и шифровать на стороне клиента (я же нахожусь на сервере, то бишь разницы нет, ибо компьютер в данном случае является как сервером так и клиентом).
В итоге всё успешно работает, больничные подписываются, данные из ФСС прилетают.
Но если я опять же на сервере выбираю, чтобы подписание и шифрование выполнялось на стороне сервера, то выскакивает та же ошибка.
То есть разница успехи и неудачи подписания только в том, какой процесс вызывает подписание. Если процесс клиента 1с, то успех. Если процесс сервера, то - ошибка. И всё это при том, что и то и другое запускается на одной и той же машине, от одного и того же пользователя.
В VipNet CSP в настройках установил максимальное логирование действий, но в журнале событий Windows нет ничего стоящего:
Добрый день! Пытаюсь подписать xml-файл созданным сертификатом, но никак не получается. Порядок действий был такой:
1. Выпустил собственный сертификат командой в PowerShell:
2. Скопировал в папку "Доверенные корневые центры сертификации" -> "Сертификаты"
3. В отладчике, в списке, полученном от МенеджерКриптографии нашел свой сертификат
4. Выбрав свой сертфикат, при попытке Подписать() получаю ошибку типа:
Сертификат, связанный с закрытым ключом, указывает на модуль криптографии, отличный от текущего.
Сертификат связан с модулем криптографии "Microsoft Software Key Storage Provider" с типом 0.
Код получения сертификатов и подписи с ИТС
Что делаю не правильно?
(1)
Мда. RTFM.
С чего вы вообще решили, что МенеджерКриптографии.Подписать выдаст вам подпись в формате xmldsig?
Это так не работает. Вот вообще.
Да собственно, все делаете не правильно.
Платформа не умеет подписывать в формате xmldsig.
Но в БСП есть внешняя компонента, которая умеет.
(4) собственно по этому и спрашиваю, что мат. часть по этому вопросу со стороны 1с освещена слабо, а пример с ИТС получается вообще не к этому относится.
Можете ссылку на описание ВК? Или хотя бы ее наименование?
(1)По поводу ошибки при подписи.
При таком создании сертификата провайдер может быть разный, его надо указать явно.
Specifies the name of the KSP or CSP that this cmdlet uses to create the certificate. See Cryptographic Providers for more information. Some acceptable values include:
Microsoft Software Key Storage Provider
Microsoft Smart Card Key Storage Provider
Microsoft Platform Crypto Provider
Microsoft Strong Cryptographic Provider
Microsoft Enhanced Cryptographic Provider v1.0
Microsoft Enhanced RSA and AES Cryptographic Provider
Microsoft Base Cryptographic Provider v1.0
The name of a third party KSP or CSP
У вас создался сертификат с провайдером Microsoft Software Key Storage Provider, а вы создаете менеджер криптографии для провайдера Microsoft Enhanced Cryptographic Provider v1.0, поэтому и ошибка.
(7)Да, так вы не подпишите.
Возьмите демо базу БСП и попробуйте в ней реализовать подпись, используя процедуры и функции общих модулей БСП.
(8) попробовал, проблема с сертификатами.
Вопрос - делали ли уже такую процедуру сами? Если да, то сертификат самовыпущенный? Если да, то как его создавали?
(10)Как-то пробовал, в тот раз не разобрался что передать, чтобы заработало. Больше не пробовал.
Но то что оно работает у других, это точно.
У меня есть сертификат крипто-про.
Самовыпущенные сертификаты не использовал.
Значит, скорее всего, дело в сертификате - чем-то он не соответствует криптопровайдеру, о чем честно говорится в ошибке
ключ сгенерился, но устанавливаться не хочет, скопировал во все места, куда просился, теперь такая беда:
но не могу допереть, как "Установить закрытый ключ" - во всех примерах там КриптоПро и VIPnet, все возможные действия для стандартной оснастки certmgr уже выполнил (добавил в доверенные, в личные, экспортировал и импортировал в локальный компьютер и личную учетную запись).
(25) да, для usr1cv8 тоже.
В свойствах закрытого ключа не нашёл - по картинками должен быть ключик на главной странице свойств и надпись. Но его нет (
Тогда результат из (22) закономерен - система не видит закрытого ключа и поэтому 1С никак не сможет ним работать.
Как минимум надо добиться, чтобы сертификат был связан с закрытым ключом. а потом, не исключено, снова вылезет ошибка из (1).
(22) Картинка "на клиентском компьютере". Так Вы где подпись собираетесь ставить, &НаКлиенте или &НаСервере?
(30) 1) Команда PowerShell добавит самоподписанный с закрытым ключом в личное текущего пользователя ОС - в хранилище админа.
New-SelfSignedCertificate -DnsName "www.mytest.com", "www.whatsthis.com" -Provider "Microsoft Enhanced Cryptographic Provider v1.0" -CertStoreLocation "cert:\CurrentUser\My"
2) Далее его нужно экспортировать с закрытым ключом. Win+R certmgr.msc
3) Потом certmgr.msc нужно запустить под тем пользователем, под которым сервер 1С работает как служба (например USR1CV8), и в личное хранилище этого юзера импортировать файл из шага-2
(30) У меня после того, как сертификат с закрытым ключом появился в личном хранилище сертификатов у пользователя USR1CV8 - начинает работать следующий код:
(22) Если Вы генерировали сертификат по инструкции через certreq.exe -new template.txt outcert.cer - то он должен появиться в остнастке
Win+R
mmc
Ctrl+M
Сертификаты
Учетной записи компьютера
Экспортируем из остнастки этот сертификат с закрытым ключом в файл (название файла задаем, чтобы не перепутать с outcert.cer, т.к. outcert.cer это просто открытый сертификат без закрытого ключа), закрываем консоль. Открываем консоль снова под пользователем USR1CV8 (можно создать ярлык на рабочем столе certmgr.msc и запускать его от имени пользователя USR1CV8) В консоли импортируем файл с закрытым ключом в личное хранилище пользователя USR1CV8.
После всего этого МенеджерКриптографии.Подписать - сможет подписать данным ключом &НаСервере.
Приведенная Вами картинка относится к подписанию из личного хранилища текущего пользователя, НаКлиенте. Если хотите подписывать на клиенте с помощью МенеджераКриптографии - то нужно из файла импортировать сертификат с закрытым ключом в личное хранилище пользователя (админа) - тоже через остнастку certmgr.msc, запущенную от имени админа.
Область применения ЭП довольно широка. Например, многие специальные сервисы требуют верификации пользователя с её помощью: Госуслуги, онлайн-сервисы для управления средствами в банке и электронные площадки и другие. Поэтому любые технические неполадки, возникающие при использовании ЭП, могут вызвать различные серьёзные: от упущенной выгоды до материальных убытков.
Какие бывают ошибки
Проблемы при использовании ЭП, с которыми пользователи встречаются чаще всего, можно условно разделить на три группы:
Проблемы с сертификатом Они появляются, когда сертификат не выбран, не найден или не верен.
Проблемы с подписанием документа. Ошибки возникают при попытке подписать документ.
Проблема при авторизации на торговых площадках.
Рассмотрим неполадки подробнее и разберёмся, как их решать.
Сертификат не найден
Иногда при попытке подписать электронный документ с помощью ЭП пользователь может столкнуться с ошибкой «Не удалось найти ни одного сертификата, пригодного для создания подписи»
У подобных ошибок могут быть следующие причины:
1. На компьютере не установлены корневые сертификаты Удостоверяющего Центра (УЦ), в котором была получена ЭП. Необходимо установить либо обновить корневой сертификат. Установка корневых сертификатов удостоверяющего центра подробно описана в нашей инструкции.
2. На ПК не установлено ни одного личного сертификата ЭП. Для применения ЭП необходимы и личные сертификаты. Об их установке мы писали в другой статье.
3. Установленные на компьютере необходимые сертификаты не валидны. Сертификаты отозваны или просрочены. Уточните статус сертификата в УЦ. Ошибка с текстом «Ваш сертификат ключа подписи включён в список отозванных» возникает, если у сертификата закончился срок действия или на ПК нужно обновить список сертификатов. В последней ситуации следует вручную загрузить перечень отозванных сертификатов.
Для установки списка отозванных сертификатов:
Откройте личный сертификат пользователя в окне Свойства браузера. Чтобы открыть его, наберите «Свойства браузера» в поисковой строке меню Пуск. Перейдите во вкладку Содержание и нажмите кнопку «Сертификаты».
Во вкладке Состав выберите из списка пункт «Точки распространения списков отзыва».
В блоке Имя точки распространения скопируйте ссылку на загрузку файла со списком отзыва.
Скачайте по указанной ссылке файл. Нажмите по нему правой кнопкой мыши и выберите в контекстном меню «Установить список отзыва (CRL)».
Следуйте указаниям «Мастера импорта сертификатов».
Не виден сертификат на носителе
Как правило, причина такой проблемы — сбой в работе программных компонентов. Для её решения достаточно перезагрузить компьютер. Однако иногда этого бывает недостаточно, поэтому требуется переустановка драйверов или обращение в службу техподдержки.
К наиболее распространённым причинам такой проблемы относятся следующие случаи:
Драйвер носителя не установлен или установлен некорректно. Для решения проблемы необходимо извлечь носитель электронной подписи из ПК и скачать последнюю версию драйвера носителя с официальных ресурсов. Если переустановка драйвера не помогла, подключите носитель к другому ПК, чтобы убедиться в исправности токена. Если токен определится другой системой, попробуйте удалить на неисправном компьютере драйвер носителя и установить его заново.
Долгое опознание носителя. Для решения проблемы необходимо дождаться завершения процесса или обновить версию операционной системы.
Некорректная работа USB-порта. Подключите токен к другому USB-порту, чтобы убедиться, что проблема не в носителе ЭП. Если система определила токен, перезагрузите компьютер. Если это не поможет, следует обратиться службу технической поддержки.
Неисправность носителя. Если при подключении токена к другому компьютеру или USB-порту система не определяет его, значит, проблема в самом носителе. Устранение неисправности возможно в данном случае лишь одним путём — нужно обратиться в сервисный центр для выпуска нового носителя.
ЭП не подписывает документ
Причин у подобной проблемы множество. Среди самых распространённых можно выделить следующие неполадки:
Закрытый ключ на используемом контейнере не соответствует открытому ключу сертификата. Возможно был выбран не тот контейнер, поэтому следует проверить все закрытые контейнеры на компьютере. Если необходимый контейнер по тем или иным причинам отсутствует, владельцу придётся обращаться в удостоверяющий центр для перевыпуска ЭП.
Ошибка «Сертификат недействителен» (certificate is not valid). Следует повторно установить сертификат ЭП по инструкциям УЦ в зависимости от используемого криптопровайдера — КриптоПро CSP, ViPNet CSP или другого.
Сертификат ЭП определяется как непроверенный. В этом случае необходимо переустановить корневой сертификат удостоверяющего центра.
Истёк срок действия криптопровайдера. Для решения этой проблемы необходим новый лицензионный ключ к программе-криптопровайдеру. Для его получения необходимо обращаться к специалистам УЦ или к ответственным сотрудникам своей организации.
Подключён носитель с другим сертификатом. Убедитесь, что подключён правильный токен. Проверьте также, не подключены ли носители других сертификатов. Отключите другие носители в случае их обнаружения.
В момент подписания электронных документов или формирования запроса в различных может возникнуть ошибка «Невозможно создание объекта сервером программирования объектов».
В этой ситуации помогает установка и регистрация библиотеки Capicom:
Распакуйте и переместите файлы capicom.dll и capicom.inf в каталог syswow64, находящийся в корневой папке ОС.
Откройте командную строку от имени администратора — для этого в меню Пуск наберите «Командная строка», нажмите по найденному приложению правой кнопкой мыши и выберите Запуск от имени администратора.
Введите «c:\windows\syswow64\regsvr32.exe capicom.dll» (без кавычек) и нажмите ENTER. Должно появиться уведомление о том, что команда выполнена успешно.
Здравствуй Гиктаймс, сегодня мы поговорим о некоторых, а по сути — одной большой, проблемах сдачи электронной отчетности в системе GNU/Linux.
Вопрос сдачи электронной отчетности из ОС Linux давно обсуждался как на Хабре/Гиктаймс, так и на тематических форумах — Мисте, Убунту, ЛОРе, КриптоПро и форуме техподдержки 1С: ИТС. В двух словах на настоящий момент есть два решения — либо использовать облачную КЭП и сдавать отчетность через обозреватель, либо использовать выделенную/виртуальную машину с установленной ОС Windows (пусть даже пробной версией) для сдачи отчетности. Вариант сдачи отчетности с помощью специализированных утилит предоставляемых органами (ФНС, ПФР, ФСС, Росстат, ФСРАР) возможен только при использовании Wine@Etersoft, что фактически тоже костыль (ибо нам потребуется ДВЕ лицензии на СКЗИ КриптоПро — для Windows и Linux).
Не секрет что для ОС GNU/Linux существует не так уж и много программ, для ведения бухгалтерии: Ананас (который ныне покоится с миром), украинский Дебет+ (у которого модуль поддержки Российского законодательства не обновлялся уже, Ктулу знает сколько) и 1С бухгалтерия. Имеются в виду Нативные приложения. Из всех вышеперечисленных только 1С на момент написания статьи входит в государственный реестр отечественного ПО и содержит механизмы подготовки и сдачи отчетности в электронном виде через спец-операторов электронного документооборота. К слову операторов, поддерживаемых 1С бухгалтерией не много: ЗАО "Калуга-Астрал" (разработчик подсистемы 1С-Отчетность), ООО "Такском", ООО НПФ "Форус" и мифический "Прочий оператор документооборота".
К сожалению сдача отчетности из 1С сопряжена с рядом трудностей, с которыми может столкнуться рядовой (да и опытный) системный администратор. Разумеется мы подробно рассмотрим эти проблемы и способы их решения.
Первая проблема с которой мы сталкиваемся — это СКЗИ. Нет, не их отсутствие, они есть. Для Linux есть несколько сертифицированных СКЗИ (с поддержкой ГОСТ) доступных к установке и используемых в разных подсистемах. На момент написания статьи это следующие СКЗИ, поправьте меня, если я что-то упустил:
CryptoCom
Данная СКЗИ доступна для платформ i686 и amd64, используется в основном в системах интернет-банкинга, в частности системой iBank (используется многими банками, такими как ГазпромБанк, УБРИР, Альфа и д.р.).
CryptoPro CSP
Фактически единственное на настоящий момент комплексное решение для Linux для работы с электронной подписью и шифрованием. Доступна для платформ i686, amd64, armhf (включая android), PowerPC. Это не говоря уже о том что у них есть версии для Solaris (i686, amd64, sparc), AIX, FreeBSD, OSX и iOS. Как ни странно (сарказм), именно КриптоПро официально рекомендуется многими органами государственной власти для взаимодействия и электронного документооборота. Лицензии на КриптоПро часто идут в составе ключа ЭЦП, и в составе договора комплексного обслуживания для сдачи отчетности. Мой выбор был однозначным в пользу этого СКЗИ. К минусам можно отнести относительную сложность установки на системах отличных от RHEL/SLES и встречающиеся недочеты в сборке пакетов ПО (не разрешенные импортируемые символы и экспортируемые функции с разорванными зависимостями). В большинстве случаев эти недочеты не видны пользователю, т.к. данные функции предназначены для работы различных библиотек в составе КриптоПро и автоматически разрешаются при их первом вызове ядром ОС (в адресном пространстве приложения уже загружены нужные библиотеки). Второй минус — отсутствие почтового клиента, если обозреватель CryptoFox представлен, но от поддержки Thunderbird в КриптоПро отказались. Нужно отдать должное, что с их стороны предпринимались активные попытки внести изменения в рабочую версию NSS с целью поддержки ГОСТ, но воз и ныне там. Если бы изменения были приняты, поддержка ГОСТ появилась бы во всех обозревателях и приложениях использующих NSS, таких как Open/LibreOffice, продуктах Mozilla, Nautilus/Nemo, Thunar, XCA и других программах.
По понятным причинам был выбран СКЗИ КриптоПро, и давайте остановимся на нем подробнее.
Во-первых, для платформы Linux отсутствует знакомое многим приложение КриптоАРМ, для подписи документов. Впрочем для создания прикрепленной и открепленной подписи можно воспользоваться утилитами командной строки. Для создания и проверки открепленной цифровой подписи мной были созданы два сценария — sign и verify, соответственно. Текст сценариев приведен ниже, согласен что они несколько костыльные, но писалось на скорую руку, а на тот момент бета-версия CryptoPro 4.0 ведя себя странно, при прямой передаче путей к подписываемым, и выходным файлам.
С версией 3.9 ситуация ещё веселее — 1С её уже не видит, но CryptoFox ещё падает, при чем как старый, так и новый.
Версия 4.0, напротив — не видится 1С, но зато с ней заводится CryptoPro Browser Plugin 2.0, работает вход на госплощадки из CryptoFox (о них разговор отдельный, и если разбирать работу из ОС GNU/Linux с ними — материала хватит на ещё одну статью). Проблема — заставить увидеть 1Ску установленный СКЗИ. Проблема в общем то не такая уж и серьёзная, решается буквально за пятнадцать секунд, но на поиск самого решения ушла целая неделя общения с техподдержкой КриптоПро (и отпинывания меня поддержкой 1С на инструкцию в ИТС). В итоге проблема была решена самостоятельно, и решение в конечном итоге опубликовано на форуме КриптоПро. Методология решения проблемы на будущее:
В 1С бухгалтерии имеется возможность добавить произвольный криптопровайдер. Воспользуемся этим механизмом, добавьте нового криптопровайдера, и назовите его, скажем "КриптоПро CSP 4.0".
- Указываем следующие данные:
Имя программы Crypto-Pro GOST R 34.10-2001 KC1 CSP Тип программы 75 Алгоритм подписи GOST R 34.10-2001 Алгоритм хеширования GOST R 34.11-94 Алгоритм шифрования GOST 28147-89 - Сохраняем криптопровайдер и указываем путь к библиотеке: /opt/cprocsp/lib/amd64/libcapi20.so
Готово, 1С теперь видит установленный криптопровайдер. Казалось бы — всё, можно проступать к добавлению сертификатов и настройке сдачи отчётности, но не тут то было. Маленькая беленькая сибирская лисичка подкралась к нам откуда мы и не ждали — от самих разработчиков 1С. Так исторически сложилось, что подсистему электронного документооборота, 1С-Отчетность, ядро 1С и конфигурации пишут разные люди, и даже разные компании. При создании конфигураций с функцией 1С-Отчетность для 1С 8.3, например "Бухгалтерия предприятия 3.0", разработчики не долго думая перенесли всю подсистему ЭДКО "как есть", без изменений, в результате чего мы получаем парадокс. Сама 1С бухгалтерия видит СКЗИ, видит сертификаты, позволяет их установить, подписать и зашифровать любые документы, но при этом система электронного документооборота (старая версия) в упор не видит ни одного установленного сертификата, и соответственно не может даже получить начальную конфигурацию от оператора документооборота — её попросту нечем расшифровывать. Вернее чем расшифровывать есть, но подсистема ЭДКО использует свой собственный механизм работы с СКЗИ, задействуя внешнюю компоненту (только для Windows) и ничего не знает о существовании встроенных механизмов работы с СКЗИ, которые использует сама 1С в рамках конфигурации.
Тем не менее, подсистема ЭДО (не путать с ЭДКО) с контрагентами видит все актуальные сертификаты и позволяет подключиться к системе электронного документооборота. Но не сдачи отчетности.
Для Linux действует ограничение на прямую работу конфигурации Клиент-ЭДО, с внешней конфигурационной базой, и для этого нужен работающий сервер 1С. Так как базовые версии конфигураций не позволяют использовать клиент-серверный вариант развертывания 1С, интеграция Клиент-ЭДО и бухгалтерии в Linux для таких конфигураций не возможна, будет работать только для полнофункциональных. В большинстве конфигураций можно включить обмен с контрагентами, и он будет работать, несмотря на не работающую 1С-Отчетность.
Если мы откроем конфигуратор и включим режим отладки, мы увидим следующую картину:
Формы 1С-Отчетности используют Общие->ОбщиеМодули->КриптографияЭДКОКлиент, который в свою очередь опирается на работу внешней компоненты Addin.ЭДОNative.CryptS.
Тот же функционал работы с электронной цифровой подписью и шифрованием (без функционала обмена транспортными контейнерами по электронным каналам связи) реализован в Общие->ОбщиеМодули->ЭлектроннаяПодписьКлиент, которая учитывает работу в ОС семейства Linux и корректно загружает как и внешнюю компоненту работы с XMLDSig, так и модуль криптопровайдера. Данная библиотека корректно видит все сертификаты, позволяет осуществлять подпись и шифрование документов, содержит функции для работы как с объектами в памяти так и с файлами на жестком диске. Данная библиотека используется во всех стандартных механизмах работы с ЭЦП внутри 1С, кроме подсистемы 1С-Отчетности (ЭДКО).
То есть для реализации работы подсистемы 1С ЭДКО достаточно переписать либо формы 1С-Отчетности на использование встроенных механизмов, либо перегрузить КриптографияЭДКОКлиент, для использования не внешней компоненты, а переадресовывать вызовы работы с сертификатами, ЭЦП и шифрованием на встроенный клиент работы с СКЗИ.
Общение с техподдержкой 1С дало лишь ответ что они в курсе данной проблемы, но клиентов использующих ОС GNU/Linux слишком мало (потребность не носит массовый характер), но задача у них "записана".
UPD:
Таки удалось завести работу мастера после детального изучения исходников. Пока застрял на расшифровке контейнера от Такском, но сертификаты уже видятся. Работает только на свежей версии КриптоПро 4. Завести как указано ниже. Наименование представления роли не играет, но "внутри" 1С-ЭДКО именно так:
Представление | CryptoPro CSP |
Имя программы | Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider |
Тип программы | 75 |
Алгоритм подписи | GOST R 34.10-2001 |
Алгоритм хеширования | GOST R 34.11-94 |
Алгоритм шифрования | GOST 28147-89 |
Обязательными при проверке являются поля Имя программы и Тип программы. Имя программы относится к режиму совместимости с версией криптопровайдера 2.0, в бета версии 4.0 наименование отсутствовало.
Основная проблема скрыта тут: Общие->Общие модули->КриптографияЭДКОСлужебныйКлиент.ПолучитьКриптопровайдеры
Для Linux убрать единичку. Или добавить проверку для версии КриптоПро 3.9 и выше:
Общие->Общие модули->КриптографияЭДКОКлиентСервер.ПолучитьКриптопровайдеры.КриптопровайдерCryptoPro
Имя: Crypto-Pro GOST R 34.10-2001 KC1 CSP
для клиента, или
Имя: Crypto-Pro GOST R 34.10-2001 KC2 CSP
для сервера.
Читайте также: