Ошибка при подписании документа: разбор частых причин

Коротко о главном

Ошибка при подписании документа — это не всегда проблема с самой подписью. Вы можете иметь идеальный сертификат с открытым доступом, но система вернёт отказ из-за чего-то совсем другого: забыли пароль к контейнеру, истёк сертификат, документ занят другой программой, файл слишком большой, в криптопровайдере конфликт, нет закрытого ключа. На каждую ошибку свой код, и каждый код требует своего решения. Порядок диагностики: сначала проверяем сам документ, потом контейнер, потом носитель.

Эта статья не о том, что компьютер не видит подпись (это другая история, см. диагностику видимости сертификата) и не о том, что истекла лицензия на КриптоПро CSP. Здесь — о том, почему система видит подпись, но не даёт ею подписать.

В этой статье

  • Почему подпись есть, но её нельзя использовать для подписания
  • Девять сценариев отказа: от пароля до носителя
  • Как расшифровать код ошибки и понять, что произошло
  • Таблица диагностики: ошибка → причина → решение
  • Когда помогает переимпорт сертификата, а когда нужен УЦ
  • Проверка перед отправкой: на что смотреть перед попыткой подписания
  • Что делать, если ошибка не совпадает ни с одной из опубликованных

Как устроено подписание: три уровня, три точки отказа

Когда вы нажимаете «подписать документ», система проходит через три проверки.

Уровень 1: проверка документа. Может ли система вообще подписать этот файл? Он открыт в другой программе? Не слишком ли он большой? Поддерживаемый ли это формат? Забыли ли вы его сохранить, и это память, а не файл на диске?

Уровень 2: проверка сертификата и ключа. Есть ли закрытый ключ? Не истёк ли сертификат? Совпадает ли сертификат с тем, что заявили в приложении?

Уровень 3: проверка доступа к ключу. Знаете ли вы пароль? Не заблокирован ли контейнер? Видит ли система носитель? Вместо ошибки «ключ потерялся» часто приходит менее очевидная: «операция не разрешена» или просто зависает процесс.

Сломалось на любом уровне — и вы получаете ошибку. Но во фразе ошибки и в её коде обычно закодирована информация о том, на каком именно уровне произошёл отказ.

Сценарий 1: Нет закрытого ключа у сертификата

Закрытый ключ — это вторая половина пары, без которой подписать ничего не получится. Сертификат без ключа — просто красивая бумажка, её можно проверить, но подписать ею невозможно. Если при подписании система пишет «Ключ не найден», «Private key is missing», «Нет закрытого ключа» или возвращает код 0x8009001b — это означает, что закрытый ключ либо никогда не был импортирован, либо потерялся при каком-то этапе работы.

Причины: Неправильный импорт сертификата — вы импортировали только открытый ключ (.cer), без закрытого (.key). Потеря файла с ключом. Носитель переформатирован или стёр. При переносе на новый компьютер ключ не скопировался.

Что делать:

  1. Откройте КриптоПро CSP и посмотрите на свой сертификат. В его свойствах должна быть строка «Закрытый ключ: да» или «Has Private Key: Yes». Если написано «нет» — это ваша проблема.
  2. Если у вас есть исходный файл .pfx (защищённый пакет с обоими ключами), переимпортируйте его. При импорте КриптоПро CSP должен создать контейнер с обоими ключами.
  3. Если осталась только копия .cer без .key, восстановить ключ невозможно. Обратитесь в удостоверяющий центр с просьбой переобновить подпись — он имеет право выпустить новый сертификат с новой парой ключей.
  4. Если носитель повреждён, попробуйте подключить его к другому компьютеру — может быть, дело в драйверах. Если не помогает, носитель придётся заменить.
Артём Соколов
Мнение эксперта
Артём Соколов
Специалист по внедрению ЭДО
Лайфхак: если вы получили подпись от УЦ и вам выдали файл .pfx и отдельно письмо с паролем к пакету — сохраните оба в безопасном месте. При переустановке Windows, смене компьютера или переносе на флешку первое, что понадобится, — это именно .pfx файл. Если его потеряете, без УЦ не обойтись.

Сценарий 2: Забыли или неверный пароль контейнера

Пароль контейнера — это пароль к закрытому ключу, и его можно ввести неправильно. Система пишет: «Неверный пароль», «Wrong password», «Access denied», «Операция не разрешена» или ошибка типа 0x80090029. Причём система может молчать и просто зависнуть, вместо того чтобы сказать вслух про пароль.

Причины: Опечатка в пароле. Отличие символов: похожие буквы (о/0, л/1), раскладка клавиатуры на латинице вместо кириллицы. Пароль был переустановлен, а вы используете старый. Контейнер заблокирован после нескольких неверных попыток.

Что делать:

  1. Введите пароль ещё раз, очень аккуратно. Убедитесь, что раскладка правильная (если пароль на русском, клавиатура должна быть на русском). Попробуйте в простом редакторе, чтобы видеть каждый вводимый символ, потом скопируйте и вставьте в КриптоПро.
  2. Если контейнер требует пароль каждый раз, вы можете сделать так, чтобы КриптоПро не спрашивал пароль каждый раз (доступно не для всех типов контейнеров).
  3. Если контейнер заблокирован после нескольких неверных попыток, система выдаст особую ошибку «Контейнер заблокирован». Здесь помогает только переимпорт: удалите текущий контейнер из хранилища и переимпортируйте файл .pfx заново.
  4. Если пароль совсем потерян, и вы не знаете, какой именно он был, восстановить его невозможно. Ни КриптоПро, ни УЦ не хранят пароли. Придётся переоформить подпись в УЦ или попробовать стандартные пароли и ПИН-коды носителя, если это Рутокен или другой защищённый носитель.

Сценарий 3: Истёк срок действия сертификата или лицензии КриптоПро

Это две разные ошибки. Сертификат может действовать, а лицензия на КриптоПро истечь — и программа откажет. Или наоборот: лицензия в порядке, но сертификат просрочен. Система пишет: «Сертификат просрочен», «Certificate expired», «Истекла лицензия» или ошибка с кодом 0x80090329.

Причины: Сертификат выдаётся на ограниченный срок (обычно 1 или 3 года), и по его окончании нужно продлить в удостоверяющем центре. Демо-период КриптоПро истёк. Встроенная лицензия в сертификате закончилась вместе с его сроком. Компьютер отстал на время — неправильно установлены дата и время.

Что делать:

  1. Проверьте дату и время на компьютере. Откройте часы в нижнем правом углу (Windows). Если дата дальше в прошлое, чем дата истечения сертификата, система его посчитает просрочённым, хотя он еще «в будущем» не просрочен. Установите правильную дату.
  2. Откройте КриптоПро CSP и посмотрите в свойствах сертификата дату в поле «Действителен до». Если она раньше сегодняшней даты, сертификат действительно просрочен.
  3. Если сертификат просрочен, проверьте в договоре или счёте от УЦ, была ли там встроенная лицензия. Если была — обратитесь в УЦ, чтобы продлить подпись. Это не восстановление старого, а выпуск нового сертификата на следующий год.
  4. Если сертификат действует, но КриптоПро отказывает, проверьте статус лицензии в программе (Справка → О программе). Если лицензия истекла, введите новый серийный номер или обратитесь в УЦ. На время решения проблемы используйте онлайн-сервис работы с подписью.
Наталья Ковалёва
Мнение эксперта
Наталья Ковалёва
Главный бухгалтер
Предупреждение от бывалого: если вы не трогали компьютер, а дата вдруг сместилась, виноват батарейка в материнской плате. После замены или восстановления услуг питания она разряжается, и система забывает дату. Если подпись стала «просроченной» из ниоткуда, сначала проверьте часы, а не драйверы.

Сценарий 4: Документ открыт в другой программе

Операционная система не даст вам изменить файл, который сейчас открыт. Если документ лежит в Word, Excel, Adobe, Outlook или любой другой программе, КриптоПро и другие средства подписания на него не повлияют. Система пишет: «Файл занят другой программой», «File is locked», «Access denied» или просто молчит и зависает.

Причины: Документ открыт в редакторе. Файл находится в облачной синхронизации (Яндекс.Диск, Google Drive, Dropbox), которая в данный момент загружает или скачивает его. Антивирус заблокировал файл на время проверки. Файл — это shortcut или символическая ссылка, а не реальный документ.

Что делать:

  1. Закройте документ везде, где он открыт. Word, Excel, Adobe — всё закрыть. Если вы только что изменили документ, убедитесь, что вы его сохранили.
  2. Если это облачное хранилище, завершите синхронизацию. Дождитесь, пока значок папки синхронизации перестанет мигать (обычно внизу справа в трее).
  3. Переместите файл в обычную папку (например, рабочий стол или Документы), а не в облако. Подпишите там, а потом перенесите назад.
  4. Если антивирус заблокировал, дождитесь конца проверки или временно отключите антивирус (не очень рекомендуется, но может помочь для диагностики).
  5. Если это shortcut (ярлык), откройте через него документ, отредактируйте, сохраните, закройте. Потом подписывайте оригинальный файл, а не ярлык.

Сценарий 5: Файл слишком большой

Большинство криптопровайдеров и приложений имеют практические ограничения на размер файла, который они могут подписать за один раз. Если файл превышает эту границу, система отказывает или зависает. Системное сообщение может быть расплывчатым: «Недостаточно памяти», «Out of memory», «Операция отменена» или просто молчаливый завис на несколько минут.

Причины: Документ размером больше 1–2 ГБ. Архив с тысячами файлов. Видео или другой медиаконтент. Подписание происходит на компьютере с малым объёмом оперативной памяти (менее 2 ГБ свободной памяти). КриптоПро или приложение работает в 32-битном режиме, а не в 64-битном.

Что делать:

  1. Проверьте размер файла. Щёлкните правой кнопкой на файл → Свойства → Размер. Если больше 500 МБ — попробуйте сжать или разделить на части.
  2. Если это архив, распакуйте его и подпишите отдельные файлы, затем переупакуйте. Если это документ, попробуйте уменьшить его: удалите ненужные изображения, сожмите картинки, сохраните в более компактном формате.
  3. Закройте другие программы, чтобы освободить оперативную память. Особенно браузеры, которые едят память.
  4. Проверьте, установлена ли 64-битная версия КриптоПро и 64-битная операционная система. Начиная с Windows 8.1, стандартная 64-битная система. Если у вас 32-битная, рассмотрите обновление ОС.
  5. Используйте командную строку для подписания: некоторые криптопровайдеры работают быстрее и экономнее с памятью через утилиты командной строки, чем через графический интерфейс.

Сценарий 6: Несовместимый или повреждённый формат документа

КриптоПро может подписывать PDF, но не может подписывать DOCX сырую. Некоторые программы работают с конкретными форматами и отказываются с другими. Кроме того, файл может быть повреждён на уровне формата — заголовок потерялся, структура нарушена. Система пишет: «Неподдерживаемый формат», «Unsupported file type», «Файл повреждён» или «Не удалось открыть документ».

Причины: Вы пытаетесь подписать документ не в том формате, который поддерживает ваше приложение. DOCX нужно заранее экспортировать в PDF. Файл был повреждён при передаче по сети. При копировании потеряны первые байты файла. Вы переименовали файл, но не изменили его формат (например, переименовали .exe в .txt — система будет читать как текст).

Что делать:

  1. Проверьте расширение файла: щёлкните правой кнопкой → Переименовать. Расширение должно соответствовать реальному содержимому. Если это Word, расширение должно быть .docx или .doc, если PDF — .pdf.
  2. Откройте файл в соответствующей программе (Word для .docx, Adobe для .pdf) и убедитесь, что файл не повреждён. Если программа отказывается открывать, скажем «Файл повреждён» — это подтверждение.
  3. Если файл был передан по сети, переслите его заново. Если он был скачан — скачайте снова.
  4. Если это Word-документ, экспортируйте его в PDF (Файл → Экспорт как PDF → Сохранить) и пробуйте подписывать PDF.
  5. Если приложение (например, система документооборота) требует конкретный формат, убедитесь, что вы используете именно этот. Обратитесь к документации приложения, какие форматы оно поддерживает.

Сценарий 7: Проблемы с доступом к носителю или драйверам

Если подпись хранится на защищённом токене (Рутокен, JaCarta), система должна видеть этот токен через драйверы. Если драйверы не установлены, не работают или конфликтуют, подписать с этого токена не получится. Система пишет: «Токен не инициализирован», «Token not found», «Сбой при обращении к носителю» или ошибка типа 0x8009100e.

Причины: Драйверы токена не установлены или устаревшие. Токен извлекли из USB-порта посередине операции. Порт USB неисправен или несовместим. Конфликт между несколькими криптопровайдерами, установленными на одном компьютере. На виртуальной машине USB не перенаправлен гостевой ОС.

Что делать:

  1. Вставьте токен в USB-порт снова. Если это ноутбук, попробуйте другой порт (на ноутбуках разные порты могут питаться по-разному).
  2. Убедитесь, что установлены правильные драйверы токена. Откройте Диспетчер устройств и посмотрите, видит ли система токен без ошибок (красного треугольника).
  3. Если драйверы установлены, но токен не виден, переустановите драйверы: удалите устройство из Диспетчера устройств, перезагрузитесь, снова установите драйверы.
  4. Если на компьютере установлено несколько криптопровайдеров, проверьте, какой из них должен работать с вашим токеном. Иногда они конфликтуют. Приоритет можно настроить в системе через реестр или в самом КриптоПро.
  5. Если это виртуальная машина (VirtualBox, VMware, Hyper-V), включите перенаправление USB-портов в настройках ВМ. По умолчанию ВМ не видит физические USB-устройства.

Сценарий 8: Конфликт криптопровайдеров или неподдерживаемый алгоритм

Подпись может быть создана одним криптопровайдером (например, КриптоПро CSP), но приложение ожидает другого (ViPNet CSP). Или алгоритм подписи устарел, и система его не поддерживает. Система пишет: «Сертификат найден в другом провайдере», «Unsupported signature algorithm», «Операция не поддерживается» или ошибка типа 0x8004110f.

Причины: На компьютере установлено несколько криптопровайдеров, и сертификат находится не в том, который использует приложение. Сертификат создан с использованием старого алгоритма (ГОСТ 89), а приложение требует новый (ГОСТ 2012). Браузер или приложение требует конкретную версию провайдера, которая у вас не установлена.

Что делать:

  1. Определите, какой криптопровайдер требует ваше приложение. Обычно это написано в его документации или руководстве.
  2. Откройте каждый установленный криптопровайдер (КриптоПро, ViPNet и т. п.) и проверьте, видит ли он ваш сертификат. Если сертификат видно в одном, но не в другом, система может попытаться использовать не тот.
  3. Переимпортируйте сертификат в нужный провайдер. Для этого возьмите исходный файл .pfx, откройте провайдер, найдите функцию импорта и добавьте сертификат туда.
  4. Проверьте, поддерживает ли ваше приложение ГОСТ 89 или требует ГОСТ 2012. Если требует новый алгоритм, а ваш сертификат на старом, нужно переоформить подпись в УЦ.
  5. Если это браузер, убедитесь, что установлен плагин, соответствующий вашему криптопровайдеру. Для КриптоПро нужен КриптоПро ЭЦП Browser plug-in, для ViPNet — плагин ViPNet.

Сценарий 9: Сбой при обращении к сертификату или системные ошибки

Иногда система выдаёт загадочные коды типа 0x80090001, 0x8009001b, 0x8009100c или просто «Неизвестная ошибка». Это обычно означает, что процесс подписания начался, но на каком-то промежуточном этапе потерялась связь: с носителем, с сервером проверки срока, с базой списков отозванных сертификатов (CRL).

Причины: Проблемы с сетью: компьютер потерял соединение с интернетом. Сервер КЛП (контроля целостности лицензии) недоступен. Кэш КриптоПро повреждён. Файл реестра Windows повреждён. На носителе повредился контейнер из-за неправильного извлечения.

Что делать:

  1. Проверьте интернет-соединение. Откройте браузер и перейдите на сайт. Если интернета нет, дождитесь восстановления соединения. Некоторые системы требуют проверку сертификата через интернет.
  2. Очистите кэш КриптоПро. Откройте программу → Параметры (Settings) → Найдите опцию очистки кэша. Перезагрузитесь и попробуйте снова.
  3. Переустановите КриптоПро CSP. Это удалит его из реестра, но не повредит сохранённые на токене сертификаты. Скачайте установщик с сайта КриптоПро, удалите текущую версию через Программы и компоненты, переустановите.
  4. Если ошибка содержит номер (0x...), поищите этот номер в базе ошибок КриптоПро на их сайте или на сайте вашего УЦ. Каждый код соответствует конкретной проблеме.
  5. Если ничего не помогает, соберите информацию (скриншоты ошибок, номер версии КриптоПро, тип сертификата, тип носителя) и обратитесь в техподдержку УЦ, который выдал подпись. Они видят эти ошибки каждый день и знают нестандартные решения.

Таблица диагностики: ошибка → причина → решение

Сообщение или код ошибки Вероятная причина Диагностика Решение
«Ключ не найден», 0x8009001b Отсутствует закрытый ключ Откройте КриптоПро, посмотрите свойства сертификата — написано «Закрытый ключ: нет» Переимпортируйте файл .pfx с обоими ключами; если нет такого файла, обратитесь в УЦ
«Неверный пароль», 0x80090029, зависание Неправильный пароль к контейнеру Введите пароль вручную в простом редакторе, чтобы видеть символы; проверьте раскладку клавиатуры Введите пароль очень аккуратно; если контейнер заблокирован, переимпортируйте; если пароль потерян, обновляйте подпись в УЦ
«Сертификат просрочен», 0x80090329 Истёк срок действия сертификата В КриптоПро посмотрите дату в поле «Действителен до»; проверьте дату и время компьютера Проверьте системное время; если оно неправильно, исправьте; если сертификат действительно просрочен, продлите в УЦ
«Истекла лицензия» Истёк пробный период или годовая лицензия КриптоПро Откройте КриптоПро → Справка → О программе, посмотрите статус лицензии Введите новый серийный номер лицензии; если встроенная лицензия, обновите подпись в УЦ
«Файл занят другой программой», «Access denied» Документ открыт или синхронизируется Посмотрите в трее (внизу справа), открыт ли документ в другой программе; проверьте значок синхронизации облака Закройте документ везде; завершите облачную синхронизацию; переместите в локальную папку
«Недостаточно памяти», «Out of memory» Файл слишком большой или мало оперативной памяти Посмотрите размер файла (Свойства); проверьте загрузку памяти (Диспетчер задач) Сжимайте или разделяйте файл; закройте другие программы; используйте утилиты КриптоПро из командной строки
«Неподдерживаемый формат», «Файл повреждён» Неправильный формат или повреждённый файл Откройте файл в соответствующей программе; проверьте расширение файла Экспортируйте в поддерживаемый формат (например, PDF); переслите файл заново если он был повреждён
«Токен не инициализирован», 0x8009100e Проблемы с токеном или его драйверами Переподключите токен; откройте Диспетчер устройств и посмотрите, видит ли система его без ошибок Переустановите драйверы; попробуйте другой USB-порт; перезагрузитесь; если ВМ, включите перенаправление USB
«Сертификат найден в другом провайдере», 0x8004110f Конфликт криптопровайдеров или неподдерживаемый алгоритм Откройте каждый криптопровайдер отдельно, проверьте, видит ли он сертификат Переимпортируйте в нужный провайдер; убедитесь, что установлен правильный браузерный плагин
Неизвестная ошибка, код 0x80090001 и похожие Системная ошибка, потеря связи, повреждённый кэш Проверьте интернет-соединение; попробуйте очистить кэш КриптоПро Очистите кэш в КриптоПро; перезагрузитесь; если не поможет, переустановите КриптоПро; обратитесь в УЦ с кодом ошибки

Часто задаваемые вопросы

Как я узнаю, что проблема именно в подписи, а не в системе?
Откройте КриптоПро CSP и посмотрите на сертификат: есть ли он в списке, видно ли, что срок не истёк, видно ли, что закрытый ключ присутствует. Затем попробуйте подписать файл прямо в КриптоПро (функция «Подписать» в её меню), а не через приложение. Если в КриптоПро работает, а в приложении не работает, проблема в совместимости приложения, не в подписи.
Подпись видна в КриптоПро, но налоговая система не видит её. Что это значит?
Скорее всего, налоговая система требует конкретный формат подписи или конкретный криптопровайдер, а вы используете другой. Или при подписании использовался не тот сертификат. Попробуйте: 1) убедиться, что используется только один криптопровайдер; 2) проверить в справке системы, какой формат подписи она требует; 3) обратиться в техподдержку налоговой или системы, в которую вы подаёте документы.
Зависает процесс подписания и не появляется окно выбора сертификата. Это нормально?
Нет, это ошибка. Обычно окно появляется за несколько секунд. Если оно не появляется, попробуйте: 1) закройте приложение через Диспетчер задач; 2) перезагрузитесь; 3) очистите кэш КриптоПро; 4) переустановите браузерный плагин. Если и после этого не помогает, обратитесь в техподдержку системы, в которой пытались подписать.
Система пишет код ошибки типа 0x8009..., но я не знаю, что это значит. Где искать расшифровку?
Коды ошибок обычно расшифровываются в документации КриптоПро или на сайте вашего удостоверяющего центра. Поищите номер в интернете: введите в Google «0x8009...» вместе с названием программы, в которой произошла ошибка. Если найти не получится, сохраните полный текст ошибки и обратитесь в техподдержку УЦ с этой информацией.
Я подписал документ, но система сказала, что подпись недействительна. Что произошло?
Это может означать, что: 1) подпись была поставлена, но в формате, который система не поддерживает; 2) произошла ошибка при передаче файла после подписания; 3) сертификат при подписании был недоверенным (истекшим или из неизвестного центра); 4) документ был изменен после подписания. Попробуйте подписать заново, предварительно убедившись, что сертификат действует.
После ошибки подписания можно ли попробовать снова на том же файле?
Да, можно и нужно. Ошибка подписания обычно не повреждает файл. После того как вы разберитесь в причине ошибки и исправите её, просто попробуйте подписать снова. Исключение: если ошибка была в том, что контейнер заблокирован, нужно его сначала разблокировать (переимпортировать).
Могу ли я использовать подпись с флешки на двух компьютерах?
Да, флешку можно переносить между компьютерами. Но на каждом компьютере должны быть установлены одинаковые драйверы и криптопровайдер. При переносе убедитесь, что флешка правильно извлечена (безопасное извлечение, не просто вырвать), и что на новом компьютере установлены необходимые программы.
Подпись видна в системе, но подписать не дает, код ошибки не совпадает с этой таблицей? Специалисты нашего удостоверяющего центра помогут разобраться в причине и настроить рабочее место — выберите свой город, и мы настроим всё за вас.

Итог

Ошибка при подписании — это не повод паниковать и не причина выбрасывать подпись. В девяти из десяти случаев это либо опечатка в пароле, либо неправильное расширение файла, либо открытый документ. Каждая ошибка имеет логичное объяснение, и каждое объяснение имеет решение.

Порядок диагностики: сначала проверьте сам документ (размер, формат, открыт ли), потом сертификат и ключ (видна ли подпись в КриптоПро, не истекла ли), потом доступ (пароль, носитель, драйверы). Если сдвинулись на одном из уровней — нашли причину. Если ошибка остаётся загадочной, сохраните код, опишите, что делали, и обратитесь в техподдержку удостоверяющего центра. Они знают, что это значит и как это чинить.

Читайте также

Электронная подпись врача: УКЭП, МЧД и работа в ЕГИСЗ

Какая подпись нужна врачу: квалифицированная УКЭП для ЕГИСЗ, электронных рецептов и больничных листов. МЧД для подписания от имени организации, оплата в госучреждениях и частных клиниках.

Электронная подпись нотариуса: что нужно знать

ЭЦП нотариуса — квалифицированная подпись, которую выпускает отдельная категория УЦ ФНС. Нотариальные действия в электронном виде, ЕИС нотариата и удостоверение равнозначности документов.

Электронная подпись для адвоката

Электронная подпись адвоката — квалифицированный сертификат с OID адвоката, выпускается в УЦ ФНС. Нужна для подачи в «Мой арбитр», ГАС «Правосудие», КИС АР и адвокатских запросов.

Электронная подпись кадастрового инженера

Какая подпись нужна кадастровому инженеру для подписания технических и межевых планов, требования к формату документов в XML, как получить от УЦ ФНС, личный кабинет инженера.

Электронная подпись арбитражного управляющего

Зачем подпись арбитражному управляющему, требования ФНС, члены СРО, документы в ЕФРСБ, что при исключении из организации, где получить КЭП.

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

Какая электронная подпись нужна ЧОП для получения лицензии охранной деятельности через Госуслуги: реестровая модель, документы от руководителя, ежегодные подтверждения, что происходит при просрочке.