Как подписать документ xml электронной подписью криптопро: Как подписать документ «КриптоАРМ»

Как подписать документ xml электронной подписью криптопро: Как подписать документ «КриптоАРМ»

Как подписать документ excel и xml электронной подписью: пошаговая инструкция

Без ЭЦП или ЭП невозможно проводить электронный оборот документов. Физическим и юридическим лицам электронная подпись позволяет взаимодействовать с официальными органами удаленно. Подписать электронные «бумаги» можно несколькими способами.

Виды ЭЦП

Название, правила применения электронной подписи регулируются Федеральным законом №63. Согласно ему, существует 3 вида ЭП:

С помощью нее можно подтвердить личность владельца аккаунта. Это логин, пароль. Также к простым ЭП относят СМС, содержащие коды для подтверждения личности. Простая ЭЦП не является аналогом бумажной подписи, не несет юридическую ответственность.

Простая подпись

Может использоваться, как документ, имеющий юридическую силу, но только после составления договора о признании всеми подписантами ЭП. Возможно проверить личности авторов документа и произведенные изменения.

Усиленная неквалифицированная подпись

Наиболее «полная» версия. Является аналогом бумажной подписи. Наличие данной ЭП придает документам юридическую силу без дополнительных договоров.

Усиленная квалифицированная подпись

ЭП надежнее бумажной, так как ее невозможно подделать. Поэтому электронная подпись становится популярным и обязательным инструментом при составлении договоров. Например, принимать участие в госзакупках нельзя без ЭП.

Справка! Официально для электронной подписи используется аббревиатура «ЭП». В поисковиках, на сайтах используется старое название «ЭЦП», так как это облегчает поиск необходимой информации об инструменте.

Принцип функционирования ЭП и необходимые инструменты для ее создания

Усиленные ЭП создаются с помощью криптографического шифрования. Для восстановления и идентификации используются 2 ключа: закрытый на токене и открытый. Хранятся на флешке или в защищенном облачном хранилище. После получения токена следует поменять пароль. Для создания ЭП необходимы следующие инструменты:

  1. Документ, подлежащий подписанию, в окончательном варианте. После создания ЭП его нельзя будет изменить.
  2. Настройка компьютера. Подготовить его к установке необходимого ПО.
  3. Ключ или сертификат подписи. Получают его в Удостоверяющем центре и устанавливают на компьютер.
  4. Криптопровайдер для генерирования ЭП. Могут быть в виде плагинов, веб-сервисов, утилит.

ЭП действует определенный срок — обычно 1 год, по истечению которого необходимо заново получить подпись. После создания ЭП документ нельзя изменить. Если он был отредактирован после установки электронной подписи, то все изменения отслеживаются. Также можно определить личности подписантов.

Важно: токен и криптопровайдер должны пройти сертификацию в ФСБ, согласно законам РФ.

ПО для создания ЭП

Для подписания документов существуют как платное ПО, так и бесплатное. Наиболее популярны плагины КриптоПро Office Signature, КриптоАРМ, ViPNet CryptoFile. Для создания подписи в документе Excel или Word с помощью КриптоПро Office Signature проделать шаги:

  • Скачать КриптоПро CSP версии выше 4.0.
  • Установить программу, для этого запустить инсталлятор и выбрать тип установки «Полная».

  • В конце нужно ввести ключ. Если этого не сделать, то активируется демо версия, рассчитанная на 90 дней.

  • Далее развернуть документ, на который устанавливается ЭП. Нажать на нем на пункт «Файл».
  • Затем — «Сведения». В появившемся меню кликнуть по строке «Добавить цифровую подпись (КРИПТО-ПРО)».

  • Откроется вкладка «Подписание». Здесь нужно указать нужный сертификат, нажав на кнопку «Изменить».

  • Появятся доступные сертификаты. Выбрать нужный.

  • Возможно, что придется ввести пароль для токена, если он ранее был установлен.

  • В конце должно появиться окно, оповещающее об успешном создании ЭП.

  • Для проверки можно нажать на «Файл». Вверху появиться надпись «Помечен как окончательный», означающая наличие ЭП. Также можно нажать на значок внизу документа.
  • Справа отобразится владелец ЭП.

После подписания документ нельзя изменять, так как любое редактирование сделает ЭЦП недействительной.

Важно! С 1 января 2019 года электронная подпись должна соответствовать ГОСТ Р 34.10-2012. Только версии 4.0 и выше поддерживают данный стандарт.

Подписать документы xml можно распространенной программой КриптоАрм. Она работает на алгоритме КриптоПро Office Signature, платная. Бесплатная версия действует 14 дней. КриптоАрм позволяет проверить папку с файлами.

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

Если КриптоАрм не установлен, то инсталлировать его так:

  • Скачать программу.
  • После распаковки запустить файл TrustedDesktopBundle с правами администратора.

  • Откроется первое окно установщика. Оставить все без изменений и кликнуть по кнопке «Далее».

  • В окне с лицензионном соглашением кликнуть по «Начать».

  • После установки согласиться с перезагрузкой компьютера.

Если в течении 14 дней не купить лицензионный ключ, то программа не сможет работать с сертификатами по истечении пробного периода. После приобретения лицензии запустить криптопровайдер. Выбрать во вкладке «Помощь» пункт «Установить лицензию»

Ввести код, полученный в письме, в соответствующую строку.

Для «внедрения» ЭЦП в xml файлы проделать несколько действий:

  • Кликнуть по документу правой кнопкой мыши и выбрать «КриптоАрм», затем «Подписать».

  • Откроется мастер создания ЭЦП, нажать на «Далее».

  • Далее можно добавить файлы или папку, для которых нужна ЭЦП.

  • Далее необходимо определиться с типом кодировки. Чаще используется DER, но некоторые организации работают и с BASE Если файлы подлежат архивированию после подписания, то отметить соответствующий пункт. Также можно отправить их по электронной почте.

  • Затем настраивается ЭЦП. Указывается интегрируется подпись с файлами или создается отдельно в виде файла с расширением sig.

  • В следующей вкладке необходимо добавить сертификат, полученный в удостоверяющем центре.

  • В последнем окне проверяются внесенные изменения и подтверждаются нажатием кнопки «Готово». Также можно сохранить данные.

Все выбранные файлы будут подписаны. Купить ПО для внедрения ЭЦП можно в удостоверяющем центре. Специалисты помогут с установкой программы, выдадут сертификаты.

Python 3. Подписать электронной подписью на сайте

Вопрос задан

Изменён 2 месяца назад

Просмотрен 733 раза

Всем привет!

На сайте есть следующая форма:

Если в поле «XML запроса» загружена xml, то при нажатии на кнопку «Подписать» страница обращается к CAdES Browser Plug-in, запускается целый букет js скриптов cpro, происходит подписание xml и отправка POST запроса.

Подскажите, пожалуйста, как на Python 3 реализовать подписание xml из формы? Само подписание в данном случае ведь происходит на стороне клиента?

Как я понимаю на сервере, на котором выполняется скрипт Python должен быть установлен Крипто про. Возможно необходимо использовать библиотеку Pycades?

Возможно проще всего спарсить значение xml из формы в переменную и подписать уже это значение, а потом просто подставить в POST запрос?

Какую библиотеку лучше использовать для подписания подписью, созданную с помощью криптопровайдера Крипто про? Подойдет ли для этого signxml?

Может хотя бы теоретически объясните как такое реализовать, или может примеры подобного у кого есть?

  • python
  • python-3.x
  • цифровая-подпись

1

signxml — то что вам нужно. Вот пример с https://pypi.org/project/signxml/ :

from lxml import etree
from signxml import XMLSigner, XMLVerifier
data_to_sign = "<Test/>"
cert = open("example. pem").read()
key = open("example.key").read()
root = etree.fromstring(data_to_sign)
signed_root = XMLSigner().sign(root, key=key, cert=cert)

Он добавляет в оригинальный xml <Text/> подпись и в результате получается такой xml (привожу сокращенно):

<Test>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
         <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11" />
         <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
         <ds:Reference URI="">
            <ds:Transforms>
               <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
               <ds:Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
            <ds:DigestValue>KP3ncf09YSgkeTt+i4PR+W0AMvUTo7M8gu0z15piPMc=</ds:DigestValue>
         </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue>тут-значение подписи</ds:SignatureValue>
      <ds:KeyInfo>
         <ds:X509Data>
            <ds:X509Certificate>многабукаф</ds:X509Certificate>
         </ds:X509Data>
      </ds:KeyInfo>
   </ds:Signature>
</Test>

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

1

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Подпишите XML, используя чистый Javascript в браузере

спросил

Изменено 6 лет, 9 месяцев назад

Просмотрено 4к раз

Можно ли использовать чистый JavaScript для подписи XML-документов в браузере?

Я считаю, что здесь есть жесткие ограничения безопасности, но, возможно, есть какой-то способ сделать это.

  • javascript
  • xml
  • цифровая подпись

Вот решение на основе Web Crypto — https://github.com/PeculiarVentures/xadesjs

2

Если вы имеете в виду XmlDSig, который включает доступ к локальному хранилищу сертификатов, то я боюсь, что в настоящее время нет никакого способа иметь надежный код Javascript, который мог бы получить доступ к хранилищу сертификатов на стороне клиента и использовать закрытый ключ сертификата .

Сотни разработчиков погибли бы за такую ​​технологию, однако Web Crypto API все еще находится в стадии разработки и не реализован в веб-браузерах.

Для подписи документов на стороне клиента вам по-прежнему нужен мост ОС

  • плагин для браузера — возможно, самый сложный путь, так как написание плагинов для всех возможных браузеров для всех возможных систем может оказаться излишним
  • апплет Java — учитывая, что Chrome только что отказался от поддержки NPAPI (API-плагина), это кажется устаревшим. Mozzila тоже скоро прекратит поддержку.
  • приложение ClickOnce, запускаемое клиентской платформой .NET, которое по-прежнему работает, однако ограничено операционными системами, поддерживающими .NET/ClickOnce

Если вам нужно больше ссылок, Google для «хранилища сертификатов доступа javascript». Пример потоков SO:

Как получить доступ к хранилищу сертификатов Windows в javascript?

Доступ к хранилищу сертификатов браузера с использованием javascript

(эти и другие потоки также поддерживают аргумент о том, что в настоящее время это , а не возможно)

Я ищу такую ​​же функциональность.

На данный момент я нашел https://github.com/yaronn/xml-crypto но еще не пробовал.

Для простой подписи (не XML) с сертификатом x509 я успешно использовал https://github.com/digitalbazaar/forge

5

Если вам нужна подпись в браузере, может быть, вам нужно специализированное решение? Например такой: https://www. cryptopro.ru/products/cades/plugin (Использовать Google Translate).

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

docs/how-to-sign-xml-documents-with-digital-signatures.

md на главной · dotnet/docs · GitHub
title описание мс.дата dev_langs helpviewer_keywords мс.актив

Практическое руководство. Подписание XML-документов с помощью цифровых подписей

Узнайте, как подписывать документы XML с помощью цифровых подписей. Используйте классы в пространстве имен System.Security.Cryptography.Xml в .NET.

14.07.2020

Чшарп

вб

подписи, подпись XML

Класс System.Security.Cryptography.SignedXml

цифровые подписи, XML-подпись

Система.Безопасность.Криптография.Класс RSA

Цифровые подписи XML

XML-подпись

XML-подпись

99692ac1-d8c9-42d7-b1bf-2737b01037e4

Вы можете использовать классы в пространстве имен xref:System. Security.Cryptography.Xml для подписи XML-документа или части XML-документа цифровой подписью. Цифровые подписи XML (XMLDSIG) позволяют убедиться, что данные не были изменены после их подписания. Дополнительные сведения о стандарте XMLDSIG см. в рекомендации Консорциума World Wide Web (W3C) Синтаксис и обработка подписи XML.

[!ПРИМЕЧАНИЕ] Код в этой статье относится к Windows.

Пример кода в этой процедуре демонстрирует, как поставить цифровую подпись на весь XML-документ и прикрепить подпись к документу в элементе < Signature >. В примере создается ключ подписи RSA, ключ добавляется в безопасный контейнер ключей, а затем используется ключ для цифровой подписи XML-документа. Затем ключ можно извлечь для проверки цифровой подписи XML или использовать для подписи другого XML-документа.

Сведения о том, как проверить цифровую подпись XML, созданную с помощью этой процедуры, см. в разделе Практическое руководство. Проверка цифровых подписей XML-документов.

Для цифровой подписи XML-документа

  1. Создайте объект xref:System.Security.Cryptography.CspParameters и укажите имя контейнера ключей.

    [!code-csharpHowToSignXMLDocumentRSA#2] [!code-vbHowToSignXMLDocumentRSA#2]

  2. Создайте асимметричный ключ с помощью класса xref:System.Security.Cryptography.RSACryptoServiceProvider. Ключ автоматически сохраняется в контейнере ключей при передаче объекта xref:System.Security.Cryptography.CspParameters конструктору класса xref:System.Security.Cryptography.RSACryptoServiceProvider. Этот ключ будет использоваться для подписи XML-документа.

    [!code-csharpHowToSignXMLDocumentRSA#3] [!code-vbHowToSignXMLDocumentRSA#3]

  3. Создайте объект xref:System.Xml.XmlDocument, загрузив файл XML с диска. Объект xref:System.Xml.XmlDocument содержит элемент XML для шифрования.

    [!code-csharpHowToSignXMLDocumentRSA#4] [!code-vbHowToSignXMLDocumentRSA#4]

  4. Создайте новый объект xref:System.Security.Cryptography.Xml.SignedXml и передайте ему объект xref:System.Xml.XmlDocument.

    [!code-csharpHowToSignXMLDocumentRSA#5] [!code-vbHowToSignXMLDocumentRSA#5]

  5. Добавьте подписывающий ключ RSA в объект xref:System.Security.Cryptography.Xml.SignedXml.

    [!code-csharpHowToSignXMLDocumentRSA#6] [!code-vbHowToSignXMLDocumentRSA#6]

  6. Создайте объект xref:System.Security.Cryptography.Xml.Reference, описывающий, что подписывать. Чтобы подписать весь документ, задайте для свойства xref:System.Security.Cryptography.Xml.Reference.Uri%2A значение 9.0183 «» .

    [!code-csharpHowToSignXMLDocumentRSA#7] [!code-vbHowToSignXMLDocumentRSA#7]

  7. Добавьте объект xref:System.Security. Cryptography.Xml.XmlDsigEnvelopedSignatureTransform к объекту xref:System.Security.Cryptography.Xml.Reference. Преобразование позволяет верификатору представлять XML-данные тем же способом, что и подписывающая сторона. XML-данные могут быть представлены по-разному, поэтому этот шаг жизненно важен для проверки.

    [!code-csharpHowToSignXMLDocumentRSA#8] [!code-vbHowToSignXMLDocumentRSA#8]

  8. Добавьте объект xref:System.Security.Cryptography.Xml.Reference к объекту xref:System.Security.Cryptography.Xml.SignedXml.

    [!code-csharpHowToSignXMLDocumentRSA#9] [!code-vbHowToSignXMLDocumentRSA#9]

  9. Вычислите подпись, вызвав метод xref:System.Security.Cryptography.Xml.SignedXml.ComputeSignature%2A.

    [!code-csharpHowToSignXMLDocumentRSA#10] [!code-vbHowToSignXMLDocumentRSA#10]

  10. Получите XML-представление подписи (элемент < Signature >) и сохраните его в новый объект xref:System. Xml.XmlElement.

    [!code-csharpHowToSignXMLDocumentRSA#11] [!code-vbHowToSignXMLDocumentRSA#11]

  11. Добавьте элемент в объект xref:System.Xml.XmlDocument.

    [!code-csharpHowToSignXMLDocumentRSA#12] [!code-vbHowToSignXMLDocumentRSA#12]

  12. Сохраните документ.

    [!code-csharpHowToSignXMLDocumentRSA#13] [!code-vbHowToSignXMLDocumentRSA#13]

Пример

В этом примере предполагается, что файл с именем test.xml существует в том же каталоге, что и скомпилированная программа. Вы можете поместить следующий XML-код в файл с именем test.xml и использовать его в этом примере.

 <корень>
    <кредитная карта>
        <номер>19834209
        02.02.2002
    
 

[!code-csharpHowToSignXMLDocumentRSA#1] [!code-vbHowToSignXMLDocumentRSA#1]

Компиляция кода

  • В проект, ориентированный на .

Об авторе

alexxlab administrator

Оставить ответ