Как выгрузить закрытый ключ сертификата ЭЦП из реестра
Обновлено: 21.11.2024
В этом разделе описывается, как добавлять цифровые подписи к сообщениям SOAP, отправляемым веб-службами и веб-клиентами InterSystems IRIS.
Обычно вы выполняете и шифрование, и подпись. В этом разделе для простоты описывается только подписание. Информацию о сочетании шифрования и подписи см. в теме “Сочетание шифрования и подписи.”
Скопировать ссылку на этот раздел Обзор цифровых подписей
Вы используете цифровые подписи для обнаружения изменения сообщения или просто для проверки того, что определенная часть сообщения действительно была создана указанным объектом. Как и традиционная подпись, написанная вручную, цифровая подпись — это дополнение к документу, которое может быть создано только создателем этого документа и которое нелегко подделать.
Поддержка InterSystems IRIS для цифровых подписей в сообщениях SOAP основана на WS-Security 1.1. В свою очередь, WS-Security следует спецификации подписи XML. Согласно последней спецификации, чтобы подписать документ XML:
Функция дайджеста используется для вычисления хешированного значения одной или нескольких частей документа.
Вы объединяете значения дайджеста.
Вы используете свой закрытый ключ для шифрования объединенного дайджеста. (Это вычисление, которое можете выполнить только вы.)
Вы создаете элемент, который включает следующую информацию:
Ссылки на подписанные части (для указания частей сообщения, к которым применяется эта подпись).
Зашифрованное значение дайджеста.
Информация, позволяющая получателю идентифицировать открытый ключ для расшифровки зашифрованного значения дайджеста.
Эта информация может содержаться в элементе или в элементе может быть прямая ссылка на двоичный токен безопасности, содержащий сертификат X.509 или подписанное утверждение SAML. В последнем случае токен безопасности должен быть добавлен в сообщение перед добавлением элемента.
Эта информация также позволяет получателю подтвердить, что вы являетесь владельцем пары открытого и закрытого ключей.
Тема “Использование токенов производных ключей для шифрования и подписи” описывает альтернативный способ добавления цифровых подписей к сообщениям SOAP. Детали самих сообщений различаются, но общий процесс один и тот же и следует спецификации подписи XML: вы создаете дайджест подписанных частей, шифруете дайджест и включаете элемент с информацией, которая позволяет получателю проверить подпись и расшифровать зашифрованный дайджест.
Скопировать ссылку на этот раздел Добавление цифровой подписи
Чтобы подписать сообщение SOAP цифровой подписью, вы можете использовать базовую процедуру здесь или варианты, описанные в следующих частях темы.
Во-первых, на следующем рисунке показан процесс:
В деталях процесс выглядит следующим образом:
При необходимости включите включаемый файл %soap.inc, в котором определены макросы, которые вам могут понадобиться.
Если вы хотите подписать какие-либо элементы заголовка безопасности, создайте эти элементы заголовка безопасности. Например:
Создайте экземпляр %SYS.X509Credentials , как описано в разделе “Получение наборов учетных данных программным способом.” Этот набор учетных данных InterSystems IRIS должен содержать ваш собственный сертификат, и вы должны указать пароль закрытого ключа, если он еще не загружен. Например:
Создайте двоичный токен безопасности, содержащий сертификат, связанный с этим набором учетных данных. Для этого вызовите метод класса CreateX509Token() %SOAP.Security.BinarySecurityToken . Например:
Этот метод возвращает экземпляр %SOAP.Security.BinarySecurityToken, который представляет элемент заголовка.
Добавьте этот токен в элемент заголовка WS-Security. Для этого вызовите метод AddSecurityElement() свойства SecurityOut вашего веб-клиента или веб-службы. В качестве аргумента метода используйте только что созданный токен. Например:
Создайте элемент на основе двоичного токена безопасности. Для этого вызовите метод класса CreateX509() %XML.Security.Signature . Например:
Этот метод возвращает экземпляр %XML.Security.Signature, который представляет элемент заголовка. Элемент применяется к набору частей сообщения по умолчанию; вы можете указать другой набор частей.
статус указывает, был ли метод успешным.
Добавьте цифровую подпись в элемент заголовка WS-Security. Для этого вызовите метод AddSecurityElement() свойства SecurityOut вашего веб-клиента или веб-службы.В качестве аргумента укажите объект подписи, созданный на предыдущем шаге. Например:
Скопировать ссылку на этот раздел Пример
В этом примере показана веб-служба, которая подписывает свои ответные сообщения.
Чтобы этот пример работал в вашей среде, сначала сделайте следующее:
Создайте сертификат для сервера.
Загрузите этот сертификат в InterSystems IRIS на стороне сервера, создав учетные данные с именем servercred . При этом также загрузите файл закрытого ключа и укажите его пароль (чтобы веб-служба не должна была предоставлять этот пароль при подписании своего ответного сообщения).
Веб-служба ссылается на набор учетных данных InterSystems IRIS с точно таким же именем.
Скопировать ссылку на этот раздел Другие способы использования сертификата с подписью
В базовой процедуре, описанной в предыдущем разделе, вы используете содержащий сертификат в сериализованном формате с кодировкой base-64. Вместо включения сертификата вы можете использовать информацию, идентифицирующую сертификат. Или вы можете включить сертификат в подписанное утверждение SAML. В этом разделе обсуждаются эти варианты.
Скопировать ссылку на этот раздел Вариант: использование информации, идентифицирующей сертификат
Вместо того, чтобы включать сертификат в сообщение, вы можете включить информацию, идентифицирующую сертификат. Получатель использует эту информацию для извлечения сертификата из соответствующего расположения. Для этого выполните действия, описанные в предыдущем разделе, со следующими изменениями:
Пропустите шаги 4 и 5. То есть не добавляйте .
На шаге 6 (создание подписи) используйте учетные данные, установленные на шаге 1 (а не двоичный токен безопасности), в качестве первого аргумента для CreateX509() . Например:
Для третьего аргумента ( referenceOption ) вы можете указать, как элемент использует сертификат.
Если вы указываете набор учетных данных в качестве первого аргумента (как мы делаем в этом варианте), по умолчанию для referenceOption используется $$$SOAPWSReferenceThumbprint . При необходимости укажите значение, как описано в разделе “Справочные параметры для учетных данных X.509.” Вы можете использовать любое значение, кроме $$$SOAPWSReferenceDirect .
Скопировать ссылку на этот раздел Пример
Этот пример является разновидностью предыдущего примера в этом разделе.
В этом случае веб-служба отправляет ответные сообщения следующего вида:
Скопировать ссылку на этот раздел Вариант: использование подписанного утверждения SAML
Чтобы добавить цифровую подпись, использующую сертификат, в подписанное утверждение SAML, выполните следующие действия:
При необходимости включите включаемый файл %soap.inc, в котором определены макросы, которые вам могут понадобиться.
Если вы хотите подписать какие-либо элементы заголовка безопасности, создайте эти элементы заголовка безопасности. Например:
Создайте элемент. Когда вы это сделаете, используйте подписанное утверждение SAML в качестве первого аргумента метода класса CreateX509(). Например:
Добавьте цифровую подпись в элемент заголовка WS-Security. Для этого вызовите метод AddSecurityElement() свойства SecurityOut вашего веб-клиента или веб-службы. В качестве аргумента укажите объект подписи, созданный на предыдущем шаге. Например:
Скопировать ссылку на этот раздел Применение цифровой подписи к определенным частям сообщения
По умолчанию, когда вы создаете и добавляете цифровую подпись к элементу заголовка WS-Security, подпись применяется к телу SOAP, элементу в заголовке (если он есть) и любым элементам заголовка WS-Addressing.< /p>
Чтобы указать части, к которым применяется подпись, используйте любую из процедур, описанных ранее, с одним вариантом: при создании подписи используйте второй аргумент ( signalOptions ), чтобы указать части сообщения для подписи. Укажите этот аргумент как двоичную комбинацию любого из следующих макросов (которые содержатся в файле %soap.inc):
$$$SOAPWSIncludeDefault (что равно $$$SOAPWSIncludeSoapBody + $$$SOAPWSIncludeTimestamp + $$$SOAPWSIncludeAddressing )
Подпись на основе сертификата, как и обычная собственноручная подпись, идентифицирует лицо, подписывающее документ. В отличие от собственноручной подписи, подпись на основе сертификата трудно подделать, поскольку она содержит зашифрованную информацию, уникальную для подписавшего. Его можно легко проверить, и он сообщает получателям, был ли документ изменен после того, как подписывающая сторона первоначально подписала документ.
Чтобы подписать документ подписью на основе сертификата, необходимо получить цифровое удостоверение или создать самоподписанное цифровое удостоверение в Acrobat или Adobe Reader. Цифровой идентификатор содержит закрытый ключ и сертификат с открытым ключом и многое другое. Закрытый ключ используется для создания подписи на основе сертификата. Сертификат представляет собой учетные данные, которые автоматически применяются к подписанному документу. Подпись проверяется, когда получатели открывают документ.
При применении подписи на основе сертификата Acrobat использует алгоритм хеширования для создания дайджеста сообщения, который шифруется с помощью вашего закрытого ключа. Acrobat встраивает дайджест зашифрованного сообщения в PDF-файл, сведения о сертификате, изображение подписи и версию документа на момент его подписания.
Подпись на основе сертификата в формате PDF
Панель «Подпись» > «Работа с сертификатами» позволяет применять два типа подписей на основе сертификатов. Вы можете сертифицировать документ, подтвердить его содержание или утвердить документ с помощью параметра «Подписать с сертификатом».
Параметры сертификации обеспечивают более высокий уровень контроля над документами, чем функция "Подписать с сертификатом". Для документов, требующих сертификации, вы должны заверить документы, прежде чем другие подпишут их. Если документ уже подписан, параметры Certify отключены. Когда вы заверяете документ, вы можете контролировать типы изменений, которые могут вносить другие люди. Вы можете сертифицировать с отображением подписи или без нее.
Подписать сертификатом
Когда вы подписываете сертификатом, подпись считается подписью утверждения.
Подписи, сделанные с помощью параметров "Сертифицировать" или "Подписать с сертификатом", соответствуют стандартам защиты данных, установленным Европейским институтом стандартов в области телекоммуникаций (ETSI). Кроме того, оба типа подписи соответствуют стандарту расширенной электронной подписи PDF (PAdES). Acrobat и Reader позволяют изменить формат подписи по умолчанию на формат CAdES. Этот параметр соответствует части 3 стандарта PAdES. Возможность отметок времени и встроенная поддержка долгосрочной проверки подписей (представленная в Acrobat 9.1) соответствуют части 4 стандарта PAdES. Формат подписи по умолчанию при соответствующей настройке соответствует части 2 стандарта PAdES. Вы можете изменить метод или формат подписи по умолчанию на панели «Подписи» диалогового окна «Настройки». В разделе "Создание и внешний вид" нажмите "Еще".
Вы можете ускорить процесс подписания и оптимизировать свои результаты, предварительно выполнив следующие приготовления.
В некоторых ситуациях для подписи необходимо использовать определенные цифровые идентификаторы. Например, корпорация или государственное учреждение может потребовать от физических лиц использовать только цифровые удостоверения личности, выданные этим учреждением, для подписи официальных документов. Узнайте о политике цифровой подписи вашей организации, чтобы определить подходящий источник вашего цифрового удостоверения.
Получите цифровое удостоверение в своей организации, купите цифровое удостоверение (партнеры по обеспечению безопасности см. на веб-сайте Adobe) или создайте самозаверяющее удостоверение. См. раздел Создание самоподписанного цифрового удостоверения. Вы не можете применить подпись на основе сертификата без цифрового идентификатора.
- Установите метод подписи по умолчанию.
- Создайте внешний вид подписи на основе сертификата. (См. раздел Создание внешнего вида подписи.)
- Используйте режим предварительного просмотра документа, чтобы подавить любой динамический контент, который может изменить внешний вид документа и заставить вас подписать неподходящий документ. Сведения об использовании режима предварительного просмотра документа см. в разделе Вход в режим предварительного просмотра документа.
- Перед подписанием просмотрите все страницы документа. Документы могут содержать поля для подписи на нескольких страницах.
- Настройте приложение для подписи. И авторы, и подписавшие должны настроить среду своего приложения. (См. раздел Настройка параметров подписи.)
Подробнее обо всех параметрах настройки корпоративных параметров см. в Руководстве по цифровым подписям.
- Выберите тип подписи. Узнайте о подписях утверждения и сертификации, чтобы определить тип, который следует выбрать для подписи документа. (См. Типы подписей.)
Настройка параметров подписи
Настройка рабочих процессов подписи с использованием начальных значений
Вы определяете внешний вид своей подписи на основе сертификата, выбирая параметры на панели «Подписи» диалогового окна «Настройки». Например, вы можете включить изображение своей рукописной подписи, логотип компании или фотографию. Вы также можете создавать разные подписи для разных целей. Для некоторых можно указать более высокий уровень детализации.
Подпись также может включать информацию, которая помогает другим проверить вашу подпись, например причину подписания, контактную информацию и т. д.
Форматы подписи
А. Текстовая подпись Б. Графическая подпись
(Необязательно) Если вы хотите включить изображение своей рукописной подписи в подпись на основе сертификата, отсканируйте свою подпись и сохраните ее как файл изображения. Поместите изображение в отдельный документ и преобразуйте документ в PDF.
Нажмите правой кнопкой мыши на поле подписи и выберите "Подписать документ" или "Сертифицировать видимой подписью".
Вы также можете создать внешний вид, используя настройки подписи: «Правка» > «Установки» > «Подписи» (Windows) или Acrobat > «Установки» > «Подписи» (Mac OS).
В меню "Внешний вид" диалогового окна "Подпись" выберите "Создать новый внешний вид".
В диалоговом окне «Настройка внешнего вида подписи» введите имя создаваемой подписи. Когда вы подписываете, вы выбираете подпись по этому имени. Поэтому используйте короткий описательный заголовок.
Отображает только значок по умолчанию и другую информацию, указанную в разделе "Настроить текст".
Отображает изображение с вашей подписью на основе сертификата. Выберите этот параметр, чтобы включить изображение вашей рукописной подписи. Чтобы импортировать файл изображения, нажмите «Файл», нажмите «Обзор» и выберите файл изображения.
Отображает только значок подписи по умолчанию и ваше имя в том виде, в каком оно отображается в файле вашего цифрового удостоверения.
Для настройки текста выберите параметры, которые должны отображаться в подписи. Отличительное имя показывает атрибуты пользователя, определенные в вашем цифровом удостоверении личности, включая ваше имя, организацию и страну.
В свойствах текста укажите направление письма и тип используемых цифр, а затем нажмите кнопку "ОК". См. также раздел Включить языки с письмом справа налево.
(Необязательно) Если в диалоговом окне есть раздел «Дополнительная информация о подписи», укажите причину подписания документа, место и вашу контактную информацию. Эти параметры доступны только в том случае, если вы установили их в качестве своих предпочтений в диалоговом окне «Настройки создания и внешнего вида» («Правка» > «Установки» > «Подписи» > «Создание и внешний вид» > «Дополнительно»).
роуминговый идентификатор — это цифровой идентификатор, который хранится на сервере и может быть доступен подписчику. Для доступа к перемещаемому идентификатору и учетной записи организации, предоставляющей перемещаемые цифровые идентификаторы, необходимо подключение к Интернету.
Цифровая подпись используется для подтверждения личности создателя цифровой информации. Цифровые подписи основаны на цифровых сертификатах. Цифровые сертификаты — это средства проверки подлинности, выданные доверенной третьей стороной, известной как центр сертификации (ЦС). Цифровые подписи помогают установить следующие меры аутентификации:
- Подлинность
- Целостность
- Неотказуемость
Как я могу подписать свое приложение цифровой подписью?
На странице "Цифровая подпись" вы можете подписать свое приложение. Добавляя цифровую подпись к программам установки и продуктам в Advanced Installer, вы повысите доверие пользователей к вам и вашей компании и будете уверены в своем программном обеспечении.
Почему цифровая подпись SHA-2 не распознается?
Это может произойти на компьютере с ОС ниже Windows 7 -> XP/Vista и если приложение подписано цифровой подписью SHA-2. Это происходит потому, что цифровая подпись SHA-2 распознается только в Windows 7.
Почему цифровая подпись не распознается SmartScreen или Internet Explorer?
Начиная с 1 января 2016 года корпорация Майкрософт проводит обязательное обновление системы цифровых подписей с SHA-1 до SHA-2, чтобы справиться со снижением безопасности цифровых подписей SHA-1.
Все приложения, подписанные с помощью сертификатов SHA-1, будут по-прежнему приниматься до 1 января 2017 года. В приглашении UAC по-прежнему будет отображаться правильная информация о поставщике, но браузер, например Internet Explorer, предупредит пользователей о недопустимой подписи. Кроме того, Windows SmartScreen не распознает подпись SHA-1 и попытается запретить пользователям запускать ее.
Какой URL службы меток времени следует выбрать при подписании приложения сертификатом SHA-2?
Поскольку не все поставщики ЦС поддерживают временную метку SHA-2 для цифровой подписи SHA-2, вы все равно можете использовать временную метку SHA-1. Однако все приложения, подписанные с помощью подписи SHA-2 и метки времени SHA-1, будут приниматься до 1 января 2017 года. После этой даты вы должны использовать метку времени SHA-2 для подписи SHA-2.
Почему я получаю случайное имя для пакета с цифровой подписью?
Информация, отображаемая в диалоговом окне безопасности (подсказка UAC), собирается из цифровой подписи пакета. В этом конкретном случае, если вы установите поле «Описание» на странице цифровой подписи, будет отображаться правильное имя пакета.
Почему SmartScreen предотвращает запуск подписанной установки и сообщает о ней как о нераспознанном приложении?
Похоже, что SmartScreen Protection показывает указанное выше сообщение, когда вы пытаетесь запустить только что выпущенную программу или приложение, репутация которого еще не заработала.Репутация устанавливается алгоритмами службы SmartScreen® на основе того, как приложение используется пользователями Windows и Internet Explorer.
Это также может произойти, если пакет установки подписан сертификатом на основе SHA1 и имеет отметку времени после 1 января 2016 года.
Почему во время установки пакета с цифровой подписью появляется сообщение «Неизвестный издатель»?
Эта проблема возникает только в том случае, если для подписи пакета используется SignTool.exe из Windows SDK версии 7.0 или более поздней версии и включен параметр "Файл с диска". на странице цифровой подписи расширенного установщика — проект установщика. Пакет будет отображаться как подписанный, но при ближайшем рассмотрении сертификат, использованный в процессе подписания, будет признан недействительным. По этой причине во время установки в Windows Vista или более поздней версии будет отображаться сообщение «Неизвестный издатель».
В качестве решения Microsoft рекомендует импортировать сертификат в системное хранилище и автоматически использовать его отсюда каждый раз при цифровой подписи пакета вместо ручного выбора файла сертификата. В этом случае следует использовать параметр "Автоматически получать сертификат из системного хранилища" на странице цифровой подписи Advanced Installer. Другое решение, не рекомендованное Microsoft, заключается в использовании SignTool.exe из более старой версии Windows SDK вместе с параметром "Файл с диска", включенным в Advanced Installer Digital. Страница подписи.
Почему во время удаления пакета с цифровой подписью появляется сообщение «Неизвестный издатель»?
При установке пакета Windows кэширует файл MSI, помещая его в папку Windows\installer. В ходе этого процесса вся ненужная информация (включая цифровую подпись) удаляется, чтобы уменьшить размер файла. Когда удаление запускается из «Установка и удаление программ» или с помощью ярлыка «Удалить», установщик Windows использует кэшированный файл MSI. Поскольку этот файл не имеет цифровой подписи, будет показано сообщение «Неизвестный издатель». Решение этой проблемы состоит в том, чтобы убедиться, что пользователь может удалить пакет, только запустив исходный файл.
Почему я получаю сообщение «Несоответствие цифровой подписи между загрузчиком EXE и базой данных MSI»?
Эта ошибка возникает, когда подпись из .CAB или .MSI не совпадает с подписью из .EXE. Это проверка безопасности аутентификации, которая автоматически выполняется программой-ускорителем .EXE при включенном расширенном пользовательском интерфейсе.
Если вам нужно подписать установочный пакет вне Расширенного установщика, вы можете выбрать установку EXE с ресурсами рядом с ним в качестве типа пакета и подписать как .MSI, так и .EXE.
Почему во время установки я получаю сообщение об ошибке «Disk1.cab имеет недопустимую цифровую подпись»?
Есть несколько причин, по которым вы можете получить эту ошибку:
- Когда на целевом компьютере нет подключения к Интернету, а установщик Windows не может проверить цифровую подпись в сети. Поскольку установка Windows не может связаться с поставщиком сертификатов, который может проверить сертификат безопасности установщика, во время установки появится сообщение об этой ошибке. Эта ошибка иногда исчезает, если вы переключаетесь на использование другого URL-адреса с отметкой времени.
- Когда невозможно вычислить цифровую подпись. Обычно это происходит, когда вы используете сертификат SHA256 или алгоритм подписи SHA256 в качестве алгоритма дайджеста во время подписания. Пакеты установки, подписанные с помощью сертификата SHA256 или алгоритма дайджеста, не будут иметь свою цифровую подпись, распознаваемую в операционных системах XP и Vista. Существует официальная проблема Windows, связанная с ошибкой вычисления сертификатов SHA256 в операционных системах Vista. Таким образом, если ваш установочный пакет по-прежнему нацелен на операционные системы Windows XP и Windows Vista, рекомендуется отключить параметр «Подписывать только для современной операционной системы (Windows 7 или новее)» на странице цифровой подписи — проект установщика.
- Если файл CAB имеет большой размер. В Windows XP и Windows Server 2003 имеется ошибка операционной системы, заключающаяся в том, что операционная система не может вычислить цифровую подпись больших установочных файлов. Таким образом, если ваш установочный пакет по-прежнему нацелен на операционные системы Windows XP и Windows Server 2003, в качестве обходного пути вы можете упаковать свои установочные файлы в несколько CAB-файлов меньшего размера (например, 64 МБ) с помощью нашей опции "Несколько томов".
Почему после нажатия кнопки [ Установить ] появляется сообщение «Вы уверены, что хотите отменить установку»?
Когда вы создаете установочный пакет EXE с ресурсами внутри, наш загрузчик EXE проверяет во время установки свою подпись и встроенную подпись MSI. Если есть несоответствие подписи между EXE и его встроенным файлом MSI или цифровая подпись не может быть вычислена, то указанная выше ошибка будет вызвана во время установки после нажатия кнопки [Установить].
Несоответствие подписи может появиться, если пакет установки EXE подписан вне Advanced Installer. Поскольку MSI встроен в EXE, будет подписан только EXE и, следовательно, MSI останется неподписанным. Это вызовет конфликт во время установки.
Кроме того, бывают ситуации, когда невозможно вычислить цифровую подпись. Обычно это происходит, когда вы используете сертификат SHA256 или алгоритм подписи SHA256 в качестве алгоритма дайджеста во время подписания. Пакеты установки, подписанные с помощью сертификата SHA256 или дайджест-алгоритма, не будут иметь цифровой подписи, распознаваемой в операционных системах XP и Vista, поэтому установка завершится ошибкой. Существует официальная проблема Windows, связанная с ошибкой вычисления сертификатов SHA256 в операционных системах Vista. Таким образом, если ваш установочный пакет по-прежнему нацелен на операционные системы Windows XP и Windows Vista, рекомендуется отключить параметр «Подписывать только для современной операционной системы (Windows 7 или новее)» на странице цифровой подписи — проект установщика.
Почему установка завершается без уведомления после нажатия кнопки [ Установить ]?
Начиная с расширенного установщика 13.0, если у вас включен расширенный пользовательский интерфейс и вы создали тип установки EXE, не подписывая его со страницы цифровой подписи — проект установщика, установка может завершиться сразу после нажатия кнопки [Установить] без какого-либо запроса или диалог ошибки. Это случай многих разработчиков, которые создают установщик EXE, не имея доступа к цифровому сертификату. Затем, когда кто-то подписывает EXE вручную за пределами проекта Advanced Installer, MSI внутри не подписывается. По сути, такое поведение возникает при запуске подписанного EXE-файла с неподписанным MSI внутри него.
Обходной путь заключается в использовании любого (фиктивного/тестового) сертификата для подписи EXE-файла из проекта расширенного установщика во время сборки. Это также подпишет MSI внутри него, и после подписания EXE с правильной подписью фиктивная подпись MSI будет сохранена. Если и EXE, и MSI внутри него подписаны, такого поведения больше не будет.
Почему я получаю сообщение "Была предпринята попытка загрузить программу с неверным форматом". сообщение об ошибке при создании подписанного пакета?
Это может произойти при создании тестового инсталляционного пакета и добавлении пустого файла (его размер 0 КБ) в тестовый проект. Ошибка сборки должна быть исправлена, если пустой файл будет удален из проекта и добавлен действительный.
Почему я получаю ошибку SignTool -2147467259/0x80004005 во время сборки?
Эта ошибка появляется, когда вы пытаетесь добавить в пакет недопустимый PE-файл (например, EXE, DLL и т. д.), а сертификат двоичного файла поврежден. Это означает, что исполняемый файл считает, что он существует, но на самом деле либо отсутствует, либо поврежден. SignTool не позволит вам добавить исполняемый файл со сломанной подписью.
Почему я получаю ошибку 0x800700C1 SignTool во время сборки?
Эта ошибка произошла из-за того, что один или несколько ваших двоичных файлов уже подписаны и имеют недопустимую цифровую подпись. SignTool не может отменить подпись файла, поэтому перед использованием инструмента необходимо сначала удалить его предыдущую подпись. Отличный способ сделать это представлен Мартином Кунком в его сообщении в блоге SignTool.exe вернул ошибку 0x800700C1.
Почему подписание завершается с ошибкой: "Сбой цифровой подписи файла. Сообщение об ошибке: "?
Это может произойти при использовании «SignTool.exe» для подписи пакета, если при установке Windows 10 SDK была выбрана только функция «Инструменты подписи Windows SDK для настольных приложений». Решение состоит в том, чтобы также установить функцию «Windows SDK для управляемых приложений UWP».
Как я могу использовать свой собственный инструмент подписи для подписи файлов перед их упаковкой (DLL, EXE), а затем установщика?
Для этого вы можете использовать поддержку событий сборки. Чтобы подписать файлы перед упаковкой, требуется событие предварительной сборки.
Чтобы подписать полученный пакет .MSI, требуется событие после сборки. Если результирующий пакет установки представляет собой пакет установки .EXE, требуются два события после сборки:
- Используйте событие после сборки, чтобы подписать пакет MSI и CAB-файлы. Кроме того, убедитесь, что вы включили параметр «Выполнить это перед упаковкой EXE» в диалоговом окне редактирования событий;
- Используйте другое событие после сборки, чтобы записать пакет установки .EXE.
Почему имя издателя отображается в процессе установки, но когда я пытаюсь установить его на другом компьютере, оно отображается как неизвестное?
Убедитесь, что ваш сертификат существует в списке участников программы корневых сертификатов Windows. Чтобы устранить эту проблему, следуйте инструкциям по импорту сертификата и добавьте свой сертификат в хранилище сертификатов на целевых компьютерах.
Почему я получаю сообщение "Ошибка SignTool: недопустимые параметры: /fd"?
Вы используете старую версию SignTool SDK, которая не поддерживает шифрование SHA256.Чтобы решить эту проблему, вы можете установить последнюю версию Windows Standalone SDK или использовать Advanced Installer SignTool, выбрав «Файл» > «Настройки» > «Внешние инструменты» > «Цифровые подписи» и сняв флажок «Использовать внешний инструмент».
Почему сертификаты расширенной проверки (с USB-токеном) требуют ввода пароля несколько раз в процессе подписания?
При использовании сертификата USB-токена в процессе сборки несколько раз будет запрашиваться пароль USB. При каждой подписи установочных файлов (установочные файлы, CAB-архив, пакет MSI/EXE и т. д.) будет появляться запрос.
Единственный способ избежать запроса пароля для нескольких сертификатов во время сборки — связаться с поставщиком сертификата и проверить, есть ли у него параметр Запрос одного пароля на сеанс, который вы можете включить для своего USB-токена. р>
Например, вы можете использовать параметр «Включить единый вход» в SafeNet Authentication Client, программном обеспечении для управления аутентификацией.
Почему я получаю сообщение "Указанный сервер временной метки либо недоступен, либо вернул неверный ответ". ошибка при сборке подписанного пакета?
Эта ошибка может возникнуть, если вы используете недействительный URL-адрес сервера меток времени.
Что такое пакетная цифровая подпись и как ее использовать?
Файлы, содержащиеся в проекте, могут быть подписаны перед помещением их в окончательный пакет.
По умолчанию эти файлы подписываются один за другим.
Существует также необязательная пакетная подпись, которая включает одновременную подпись нескольких файлов (в одном и том же вызове SignTool) для повышения скорости. Недостаток этого метода в том, что во время подписания Advanced Installer может перестать отвечать на запросы.
Пакетную подпись можно активировать с помощью следующей записи реестра DWORD:
Если эта запись существует и ее значение равно "1", будет использоваться пакетная подпись. В противном случае будет использоваться пошаговая подпись.
Даже если используется пакетная подпись, необходимо выполнить несколько операций подписи. Например, для фиктивного тестового файла выполняются три операции подписи для проверки выбранного цифрового сертификата (например, срок его действия не истек, он относится к типу Microsoft Authenticode — его можно использовать для подписи файлов MSI и CAB). Затем выполняется одна операция подписи для всех файлов (массовая подпись), включенных на страницу «Файлы и папки», одна операция подписи для CAB-файла, одна для файла MSI и одна для установочного файла EXE (в случае установочных пакетов EXE) .
Почему я получаю сообщение «Ошибка Win32 [2148073497]: набор ключей не определен». ошибка во время операции сборки?
Это происходит, когда поставщик криптографических услуг (CSP) недействителен
Почему я получаю сообщение об ошибке «Ошибка Win32 [2148073494]: набор ключей не существует» во время операции сборки?
Это происходит, когда контейнер закрытого ключа (PKC) недействителен.
Как заполняется список поставщиков криптографических услуг (CSP)?
Список всех доступных поставщиков криптографических услуг (CSP) можно проверить, выполнив команду certutil -csplist:
Для цифровой подписи можно использовать только провайдеров типа PROV_RSA_FULL. Они установлены по умолчанию.
Если eToken подключен (и установлен), вы также увидите его CSP (например, eToken Base Cryptographic Provider) в списке.
Как заполняется список контейнеров закрытых ключей (PKC)?
Можно проверить правильность полей eToken, выполнив команду certutil -csp "CRYPTO_PROVIDER" -key с приведенным ниже примером вывода:
Мое приложение возьмет набор файлов и подпишет их. (Я не пытаюсь подписать сборку.) Существует файл .p12, из которого я получаю закрытый ключ.
Это код, который я пытался использовать, но получаю System.Security.Cryptography.CryptographicException "Указан недопустимый алгоритм". .
Согласно этому ответу, это невозможно (RSACryptoServiceProvider не поддерживает SHA-256), но я надеялся, что это возможно с использованием другой библиотеки, например Bouncy Castle.
это то, что я получил по ссылке в ответе poupou
Проблема в том, что я не получаю тех же результатов, что и с исходным инструментом. Насколько я могу судить по коду, CryptoServiceProvider, выполняющий фактическую подпись, не использует PrivateKey из файла хранилища ключей. Это правильно?
10 ответов 10
RSA + SHA256 может и будет работать.
Ваш более поздний пример может работать не всегда, он должен использовать OID алгоритма хеширования, а не его имя. В соответствии с вашим первым примером это получается из вызова CryptoConfig.MapNameToOID(AlgorithmName), где AlgorithmName — это то, что вы предоставляете (например, «SHA256»).
Сначала вам понадобится сертификат с закрытым ключом. Обычно я читаю свой из хранилища LocalMachine или CurrentUser, используя файл открытого ключа ( .cer ) для идентификации закрытого ключа, а затем перечисляю сертификаты и сопоставляю хэш.
Как бы то ни было, после получения сертификата с закрытым ключом нам необходимо его восстановить. Это может потребоваться из-за того, как сертификат создает свой закрытый ключ, но я не совсем уверен, почему. В любом случае, мы делаем это, сначала экспортируя ключ, а затем повторно импортируя его, используя любой промежуточный формат, который вам нравится, самый простой - xml:
После этого мы можем подписать часть данных следующим образом:
Наконец, проверку можно выполнить непосредственно с помощью открытого ключа сертификата без необходимости восстановления, как мы сделали с закрытым ключом:
Протокол Internet Key Exchange версии 2 (IKEv2) имеет ограниченную поддержку алгоритма цифровой подписи на основе эллиптических кривых (ECDSA). Текущая версия включает поддержку только трех групп эллиптических кривых, и к каждой кривой привязан фиксированный алгоритм хеширования. Этот документ обобщает поддержку подписи IKEv2, поэтому он может поддерживать любой метод подписи, поддерживаемый PKIX, а также добавляет согласование алгоритма хеширования подписи. Это общий механизм, который не ограничивается ECDSA, но также может использоваться с другими алгоритмами подписи.
Этот Интернет-проект представлен в полном соответствии с положениями BCP 78 и BCP 79.
Интернет-черновики — это проекты документов, действительные не более шести месяцев, и в любое время они могут быть обновлены, заменены или устаревшими другими документами. Неуместно использовать Internet-Drafts в качестве справочного материала или цитировать их иначе, чем как "незавершенную работу".
Срок действия этого Интернет-проекта истекает 18 мая 2014 г.
Авторское право (c) 2013 IETF Trust и лица, указанные в качестве авторов документа. Все права защищены.
В этом документе добавлен новый метод аутентификации IKEv2 ([RFC5996]) для поддержки всех видов методов подписи. Текущие методы аутентификации на основе подписи в IKEv2 относятся к алгоритму, т. е. есть один для цифровых подписей RSA, один для цифровых подписей DSS (с использованием SHA-1) и три для разных кривых ECDSA, каждая из которых привязана ровно к одному алгоритму хеширования. Этот дизайн становится громоздким, когда добавляется больше групп ECDSA, поскольку для каждой из них потребуется новый метод аутентификации, и, как и в случае с ECDSA, нет возможности извлечь алгоритм хеширования из подписи, каждый алгоритм ECDSA должен иметь фиксированный алгоритм хеширования. привязан к нему.
С выходом определений SHA-3 видно, что в будущем методы подписи могут использоваться также с SHA-3, а не только с SHA-2. Это означает, что необходим новый механизм согласования алгоритма хеширования для алгоритмов подписи.
В этом документе указаны две вещи: одна из них — один новый метод аутентификации, который включает в себя достаточно информации внутри полезных данных аутентификации, чтобы оттуда можно было извлечь алгоритм хеширования подписи (см. Раздел 3). Другое дело — добавить индикацию поддерживаемых алгоритмов хеширования подписи узлом (см. Раздел 4). Это позволяет партнеру узнать, какие алгоритмы хеширования поддерживаются на другом конце, и использовать один из них (при условии, что он разрешен политикой). На самом деле нет необходимости согласовывать один общий хеш-алгоритм, поскольку при необходимости разные хеш-алгоритмы могут использоваться в разных направлениях.
Новый метод цифровой подписи должен быть достаточно гибким, чтобы включать все текущие методы подписи (RSA, DSA, ECDSA, RSASSA-PSS и т. д.), а также позволять в будущем добавлять новые элементы (ECGDSA, ElGamal и т. д.). Для этого алгоритм подписи указывается так же, как PKIX ([RFC5280]) определяет подпись Сертификата, т. е. перед фактическими данными подписи стоит простой объект ASN.1. Этот объект ASN.1 содержит OID, определяющий алгоритм, и связанные с ним параметры. В обычном случае реализации IKEv2 поддерживают фиксированное количество методов подписи с часто используемыми параметрами, поэтому для реализации допустимо просто рассматривать этот объект ASN.1 как двоичный двоичный объект, который сравнивается с известными значениями, или реализация может анализировать ASN.1 и извлечь оттуда информацию.
Ключевые слова "ДОЛЖЕН", "НЕ ДОЛЖЕН", "ТРЕБУЕТСЯ", "ДОЛЖЕН", "НЕ ДОЛЖЕН", "СЛЕДУЕТ", "НЕ ДОЛЖЕН", "РЕКОМЕНДУЕТСЯ", "МОЖЕТ" и "ДОПОЛНИТЕЛЬНО" в этот документ следует интерпретировать, как описано в [RFC2119].
В этом документе указан новый метод аутентификации "Цифровая подпись". Этот метод можно использовать с любыми типами подписей. Поскольку методы аутентификации не согласовываются в IKEv2, одноранговому узлу разрешено использовать этот метод аутентификации только в том случае, если были отправлены и получены полезные данные уведомления SIGNATURE_HASH_ALGORITHMS.
В этом новом методе аутентификации поле Authentication Data внутри Authentication Payload включает не только значение подписи, но вместо этого значение подписи имеет префикс объекта ASN.1, содержащего алгоритм, используемый для создания подписи. АСН.1 содержит OID идентификации алгоритма, и этот OID идентифицирует как алгоритм подписи, так и хэш, используемый при вычислении подписи. В дополнение к OID есть необязательные параметры, которые могут понадобиться для таких алгоритмов, как RSASSA-PSS.
Используемый здесь ASN.1 — это тот же ASN.1, который используется в AlgorithmIdentifier PKIX (раздел 4.1.1.2 [RFC5280]), закодированный с использованием выделенных правил кодирования (DER) [CCITT.X690.2002]. OID алгоритма внутри ASN.1 определяет алгоритм подписи и хеш-функцию, которые необходимы для проверки подписи. Кривая EC всегда известна узлу, потому что ему необходимо иметь сертификат или открытый ключ другого конца, прежде чем он сможет выполнить проверку подписи, а открытый ключ определяет кривую.
В настоящее время только RSASSA-PSS использует параметры, для всех остальных параметры имеют значение NULL или отсутствуют. Обратите внимание, что для некоторых алгоритмов возможны два возможных кодирования ASN.1, одно с параметрами, равными NULL, и другие, где все параметры опущены. Это связано с тем, что некоторые из этих алгоритмов указаны таким образом. При кодировании реализации ASN.1 следует использовать предпочтительный способ, т. е. если в спецификации алгоритма указано «preferredPresent», то объект параметра должен быть там (т. е. он будет NULL, если параметры не указаны), и если указано «preferredAbsent», тогда весь объект параметров отсутствует.
Полезная нагрузка аутентификации определяется в IKEv2 следующим образом:
Рисунок 1. Формат данных аутентификации.
Рисунок 2. Формат данных аутентификации.
- Метод аутентификации (1 октет). Указывает используемый метод аутентификации.
- Данные аутентификации (переменная длина) — см. раздел 2.15 RFC5996. Для формата «Цифровая подпись» данные аутентификации содержат специальный формат: [X9.62]) ДОЛЖЕН использоваться.
Поддерживаемые хэш-алгоритмы, которые можно использовать для алгоритмов подписи, теперь указываются с помощью новой полезной нагрузки уведомления SIGNATURE_HASH_ALGORITHMS, отправляемой внутри обмена IKE_SA_INIT. Это уведомление также указывает на поддержку нового метода алгоритма подписи, то есть отправка этого уведомления сообщает, что новый метод аутентификации «Цифровая подпись» поддерживается и что следующие хеш-функции поддерживаются отправляющим узлом. Оба конца отправляют свой список поддерживаемых хэш-алгоритмов, и при вычислении подписи одноранговый узел ДОЛЖЕН выбрать один алгоритм, отправленный другим одноранговым узлом. Обратите внимание, что разные алгоритмы могут использоваться в разных направлениях. OID алгоритма, соответствующий выбранному хеш-алгоритму (и алгоритму подписи), используемому при вычислении подписи, отправляется в поле Authentication Data полезной нагрузки аутентификации.
Рисунок 3. Формат полезной нагрузки уведомления.
Идентификатор протокола – 0, размер SPI – 0, тип сообщения уведомления – . Значение Notification Data содержит список идентификаторов 16-битных алгоритмов хеширования из вновь созданных идентификаторов алгоритмов хеширования для реестра IANA IKEv2.
Эта спецификация не позволяет одноранговым узлам указывать типы пар открытого и закрытого ключей, которые у них есть. т.е. как ответчик может выбрать тип пары открытый/закрытый ключ, который поддерживает инициатор. В обычных случаях эту информацию можно найти несколькими способами.
Один из способов узнать, какой ключ инициатор хочет, чтобы ответчик использовал, — это указать его в полезной нагрузке IDr запроса IKE_AUTH инициатора. То есть инициатор указывает, что он хочет, чтобы ответчик использовал определенную пару открытого/закрытого ключа, отправив IDr, который указывает эту информацию. Это означает, что у ответчика должны быть настроены разные удостоверения, и каждое из этих удостоверений должно быть привязано к определенному открытому/закрытому ключу (или типу ключа).
Еще один способ получить эту информацию – использовать полезные данные запроса сертификата, отправленные инициатором. Например, если инициатор указывает в полезной нагрузке запроса сертификата, что он доверяет ЦС, подписанному ключом ECDSA, это также будет означать, что он может обрабатывать подписи ECDSA, поэтому отвечающая сторона может безопасно использовать ключи ECDSA при аутентификации.
Ответчик также может проверить тип ключа, используемый инициатором, и использовать тот же тип ключа, что и инициатор. Это не работает, если инициатор использует общий секрет или аутентификацию EAP, так как в этом случае он не использует открытый ключ. Если инициатор сам использует аутентификацию с открытым ключом, это, скорее всего, лучший способ для отвечающей стороны найти тип, поддерживаемый инициатором.
Если инициатор использует тип открытого ключа, который ответчик не поддерживает, ответчик ответит с ошибкой AUTHENTICATION_FAILED. Если у инициатора есть несколько разных ключей, он может попробовать другой ключ (и, возможно, другой тип ключа), пока не найдет ключ, который принимает другой конец. Инициатор также может использовать полезную нагрузку запроса сертификата, отправленную ответчиком, чтобы решить, какой открытый ключ следует попробовать.В обычном случае, если у инициатора есть несколько открытых ключей, существует конфигурация, которая выбирает один из них для каждого соединения, поэтому правильный ключ определяется конфигурацией.
В таблице 2 «Рекомендации по управлению ключами» ([NIST800-57]) в сочетании с таблицей 3 приведены рекомендации по выбору подходящих хеш-функций для подписи.
Этот новый метод цифровой подписи не привязывает кривую EC к конкретной хэш-функции, как это делалось в старых методах IKEv2 ECDSA. Это означает, что можно использовать 512-битную кривую EC с SHA1, т. е. это позволяет смешивать разные уровни безопасности. Это означает, что безопасность метода аутентификации — это безопасность самого слабого из компонентов (алгоритм подписи, алгоритм хеширования, кривая). Это может немного усложнить анализ безопасности системы. Обратите внимание, что такое смешение безопасности может быть запрещено политикой.
Реестр хеш-алгоритмов не включает MD5 в качестве поддерживаемого хэш-алгоритма, так как он считается недостаточно безопасным для использования в подписи ([WY05]).
Текущий IKEv2 использует RSASSA-PKCS1-v1_5, который имеет некоторые проблемы ([KA08], [ME01]) и не позволяет использовать более новые методы заполнения, такие как RSASSA-PSS. Этот новый метод позволяет использовать другие методы заполнения.
Текущий IKEv2 позволяет использовать обычный DSA только с SHA-1, что означает, что безопасность обычного DSA ограничена безопасностью SHA-1. Этот новый метод позволяет использовать более длинные ключи и более длинные хэши с DSA.
В этом документе создается новый реестр IANA для алгоритмов хеширования IKEv2. Изменения и дополнения в этот реестр подлежат экспертной оценке.
Исходные значения этого реестра:
MD5 не включен в список алгоритмов хэширования, так как он не считается достаточно безопасным для использования хэшей подписи.
Значения 5–1023 зарезервированы для IANA. Значения 1024–65535 предназначены для частного использования сторонами, по взаимному согласию.
Эта спецификация также выделяет одно новое значение IKEv2 Notify Message Types — Status Types для SIGNATURE_HASH_ALGORITHMS.
[RFC2119] | Брэднер С., «Ключевые слова для использования в RFC для указания уровней требований», BCP 14, RFC 2119, март 1997 г. < /td> |
[RFC5280] | Купер Д., Сантессон С., Фаррелл С., Бойен С., Хаусли Р. и В. Полк, «Сертификат инфраструктуры открытых ключей Internet X.509 и профиль списка отзыва сертификатов (CRL)», RFC 5280, май 2008 г. |
[RFC5996] | Кауфман, К., Хоффман, П., Нир, Ю. и П. Эронен, "Протокол обмена ключами в Интернете версии 2 (IKEv2)", RFC 5996, сентябрь 2010 г. |