Коротко о главном
Ошибка при подписании документа — это не всегда проблема с самой подписью. Вы можете иметь идеальный сертификат с открытым доступом, но система вернёт отказ из-за чего-то совсем другого: забыли пароль к контейнеру, истёк сертификат, документ занят другой программой, файл слишком большой, в криптопровайдере конфликт, нет закрытого ключа. На каждую ошибку свой код, и каждый код требует своего решения. Порядок диагностики: сначала проверяем сам документ, потом контейнер, потом носитель.
Эта статья не о том, что компьютер не видит подпись (это другая история, см. диагностику видимости сертификата) и не о том, что истекла лицензия на КриптоПро CSP. Здесь — о том, почему система видит подпись, но не даёт ею подписать.
В этой статье
- Почему подпись есть, но её нельзя использовать для подписания
- Девять сценариев отказа: от пароля до носителя
- Как расшифровать код ошибки и понять, что произошло
- Таблица диагностики: ошибка → причина → решение
- Когда помогает переимпорт сертификата, а когда нужен УЦ
- Проверка перед отправкой: на что смотреть перед попыткой подписания
- Что делать, если ошибка не совпадает ни с одной из опубликованных
Как устроено подписание: три уровня, три точки отказа
Когда вы нажимаете «подписать документ», система проходит через три проверки.
Уровень 1: проверка документа. Может ли система вообще подписать этот файл? Он открыт в другой программе? Не слишком ли он большой? Поддерживаемый ли это формат? Забыли ли вы его сохранить, и это память, а не файл на диске?
Уровень 2: проверка сертификата и ключа. Есть ли закрытый ключ? Не истёк ли сертификат? Совпадает ли сертификат с тем, что заявили в приложении?
Уровень 3: проверка доступа к ключу. Знаете ли вы пароль? Не заблокирован ли контейнер? Видит ли система носитель? Вместо ошибки «ключ потерялся» часто приходит менее очевидная: «операция не разрешена» или просто зависает процесс.
Сломалось на любом уровне — и вы получаете ошибку. Но во фразе ошибки и в её коде обычно закодирована информация о том, на каком именно уровне произошёл отказ.
Сценарий 1: Нет закрытого ключа у сертификата
Закрытый ключ — это вторая половина пары, без которой подписать ничего не получится. Сертификат без ключа — просто красивая бумажка, её можно проверить, но подписать ею невозможно. Если при подписании система пишет «Ключ не найден», «Private key is missing», «Нет закрытого ключа» или возвращает код 0x8009001b — это означает, что закрытый ключ либо никогда не был импортирован, либо потерялся при каком-то этапе работы.
Причины: Неправильный импорт сертификата — вы импортировали только открытый ключ (.cer), без закрытого (.key). Потеря файла с ключом. Носитель переформатирован или стёр. При переносе на новый компьютер ключ не скопировался.
Что делать:
- Откройте КриптоПро CSP и посмотрите на свой сертификат. В его свойствах должна быть строка «Закрытый ключ: да» или «Has Private Key: Yes». Если написано «нет» — это ваша проблема.
- Если у вас есть исходный файл .pfx (защищённый пакет с обоими ключами), переимпортируйте его. При импорте КриптоПро CSP должен создать контейнер с обоими ключами.
- Если осталась только копия .cer без .key, восстановить ключ невозможно. Обратитесь в удостоверяющий центр с просьбой переобновить подпись — он имеет право выпустить новый сертификат с новой парой ключей.
- Если носитель повреждён, попробуйте подключить его к другому компьютеру — может быть, дело в драйверах. Если не помогает, носитель придётся заменить.
Сценарий 2: Забыли или неверный пароль контейнера
Пароль контейнера — это пароль к закрытому ключу, и его можно ввести неправильно. Система пишет: «Неверный пароль», «Wrong password», «Access denied», «Операция не разрешена» или ошибка типа 0x80090029. Причём система может молчать и просто зависнуть, вместо того чтобы сказать вслух про пароль.
Причины: Опечатка в пароле. Отличие символов: похожие буквы (о/0, л/1), раскладка клавиатуры на латинице вместо кириллицы. Пароль был переустановлен, а вы используете старый. Контейнер заблокирован после нескольких неверных попыток.
Что делать:
- Введите пароль ещё раз, очень аккуратно. Убедитесь, что раскладка правильная (если пароль на русском, клавиатура должна быть на русском). Попробуйте в простом редакторе, чтобы видеть каждый вводимый символ, потом скопируйте и вставьте в КриптоПро.
- Если контейнер требует пароль каждый раз, вы можете сделать так, чтобы КриптоПро не спрашивал пароль каждый раз (доступно не для всех типов контейнеров).
- Если контейнер заблокирован после нескольких неверных попыток, система выдаст особую ошибку «Контейнер заблокирован». Здесь помогает только переимпорт: удалите текущий контейнер из хранилища и переимпортируйте файл .pfx заново.
- Если пароль совсем потерян, и вы не знаете, какой именно он был, восстановить его невозможно. Ни КриптоПро, ни УЦ не хранят пароли. Придётся переоформить подпись в УЦ или попробовать стандартные пароли и ПИН-коды носителя, если это Рутокен или другой защищённый носитель.
Сценарий 3: Истёк срок действия сертификата или лицензии КриптоПро
Это две разные ошибки. Сертификат может действовать, а лицензия на КриптоПро истечь — и программа откажет. Или наоборот: лицензия в порядке, но сертификат просрочен. Система пишет: «Сертификат просрочен», «Certificate expired», «Истекла лицензия» или ошибка с кодом 0x80090329.
Причины: Сертификат выдаётся на ограниченный срок (обычно 1 или 3 года), и по его окончании нужно продлить в удостоверяющем центре. Демо-период КриптоПро истёк. Встроенная лицензия в сертификате закончилась вместе с его сроком. Компьютер отстал на время — неправильно установлены дата и время.
Что делать:
- Проверьте дату и время на компьютере. Откройте часы в нижнем правом углу (Windows). Если дата дальше в прошлое, чем дата истечения сертификата, система его посчитает просрочённым, хотя он еще «в будущем» не просрочен. Установите правильную дату.
- Откройте КриптоПро CSP и посмотрите в свойствах сертификата дату в поле «Действителен до». Если она раньше сегодняшней даты, сертификат действительно просрочен.
- Если сертификат просрочен, проверьте в договоре или счёте от УЦ, была ли там встроенная лицензия. Если была — обратитесь в УЦ, чтобы продлить подпись. Это не восстановление старого, а выпуск нового сертификата на следующий год.
- Если сертификат действует, но КриптоПро отказывает, проверьте статус лицензии в программе (Справка → О программе). Если лицензия истекла, введите новый серийный номер или обратитесь в УЦ. На время решения проблемы используйте онлайн-сервис работы с подписью.
Сценарий 4: Документ открыт в другой программе
Операционная система не даст вам изменить файл, который сейчас открыт. Если документ лежит в Word, Excel, Adobe, Outlook или любой другой программе, КриптоПро и другие средства подписания на него не повлияют. Система пишет: «Файл занят другой программой», «File is locked», «Access denied» или просто молчит и зависает.
Причины: Документ открыт в редакторе. Файл находится в облачной синхронизации (Яндекс.Диск, Google Drive, Dropbox), которая в данный момент загружает или скачивает его. Антивирус заблокировал файл на время проверки. Файл — это shortcut или символическая ссылка, а не реальный документ.
Что делать:
- Закройте документ везде, где он открыт. Word, Excel, Adobe — всё закрыть. Если вы только что изменили документ, убедитесь, что вы его сохранили.
- Если это облачное хранилище, завершите синхронизацию. Дождитесь, пока значок папки синхронизации перестанет мигать (обычно внизу справа в трее).
- Переместите файл в обычную папку (например, рабочий стол или Документы), а не в облако. Подпишите там, а потом перенесите назад.
- Если антивирус заблокировал, дождитесь конца проверки или временно отключите антивирус (не очень рекомендуется, но может помочь для диагностики).
- Если это shortcut (ярлык), откройте через него документ, отредактируйте, сохраните, закройте. Потом подписывайте оригинальный файл, а не ярлык.
Сценарий 5: Файл слишком большой
Большинство криптопровайдеров и приложений имеют практические ограничения на размер файла, который они могут подписать за один раз. Если файл превышает эту границу, система отказывает или зависает. Системное сообщение может быть расплывчатым: «Недостаточно памяти», «Out of memory», «Операция отменена» или просто молчаливый завис на несколько минут.
Причины: Документ размером больше 1–2 ГБ. Архив с тысячами файлов. Видео или другой медиаконтент. Подписание происходит на компьютере с малым объёмом оперативной памяти (менее 2 ГБ свободной памяти). КриптоПро или приложение работает в 32-битном режиме, а не в 64-битном.
Что делать:
- Проверьте размер файла. Щёлкните правой кнопкой на файл → Свойства → Размер. Если больше 500 МБ — попробуйте сжать или разделить на части.
- Если это архив, распакуйте его и подпишите отдельные файлы, затем переупакуйте. Если это документ, попробуйте уменьшить его: удалите ненужные изображения, сожмите картинки, сохраните в более компактном формате.
- Закройте другие программы, чтобы освободить оперативную память. Особенно браузеры, которые едят память.
- Проверьте, установлена ли 64-битная версия КриптоПро и 64-битная операционная система. Начиная с Windows 8.1, стандартная 64-битная система. Если у вас 32-битная, рассмотрите обновление ОС.
- Используйте командную строку для подписания: некоторые криптопровайдеры работают быстрее и экономнее с памятью через утилиты командной строки, чем через графический интерфейс.
Сценарий 6: Несовместимый или повреждённый формат документа
КриптоПро может подписывать PDF, но не может подписывать DOCX сырую. Некоторые программы работают с конкретными форматами и отказываются с другими. Кроме того, файл может быть повреждён на уровне формата — заголовок потерялся, структура нарушена. Система пишет: «Неподдерживаемый формат», «Unsupported file type», «Файл повреждён» или «Не удалось открыть документ».
Причины: Вы пытаетесь подписать документ не в том формате, который поддерживает ваше приложение. DOCX нужно заранее экспортировать в PDF. Файл был повреждён при передаче по сети. При копировании потеряны первые байты файла. Вы переименовали файл, но не изменили его формат (например, переименовали .exe в .txt — система будет читать как текст).
Что делать:
- Проверьте расширение файла: щёлкните правой кнопкой → Переименовать. Расширение должно соответствовать реальному содержимому. Если это Word, расширение должно быть .docx или .doc, если PDF — .pdf.
- Откройте файл в соответствующей программе (Word для .docx, Adobe для .pdf) и убедитесь, что файл не повреждён. Если программа отказывается открывать, скажем «Файл повреждён» — это подтверждение.
- Если файл был передан по сети, переслите его заново. Если он был скачан — скачайте снова.
- Если это Word-документ, экспортируйте его в PDF (Файл → Экспорт как PDF → Сохранить) и пробуйте подписывать PDF.
- Если приложение (например, система документооборота) требует конкретный формат, убедитесь, что вы используете именно этот. Обратитесь к документации приложения, какие форматы оно поддерживает.
Сценарий 7: Проблемы с доступом к носителю или драйверам
Если подпись хранится на защищённом токене (Рутокен, JaCarta), система должна видеть этот токен через драйверы. Если драйверы не установлены, не работают или конфликтуют, подписать с этого токена не получится. Система пишет: «Токен не инициализирован», «Token not found», «Сбой при обращении к носителю» или ошибка типа 0x8009100e.
Причины: Драйверы токена не установлены или устаревшие. Токен извлекли из USB-порта посередине операции. Порт USB неисправен или несовместим. Конфликт между несколькими криптопровайдерами, установленными на одном компьютере. На виртуальной машине USB не перенаправлен гостевой ОС.
Что делать:
- Вставьте токен в USB-порт снова. Если это ноутбук, попробуйте другой порт (на ноутбуках разные порты могут питаться по-разному).
- Убедитесь, что установлены правильные драйверы токена. Откройте Диспетчер устройств и посмотрите, видит ли система токен без ошибок (красного треугольника).
- Если драйверы установлены, но токен не виден, переустановите драйверы: удалите устройство из Диспетчера устройств, перезагрузитесь, снова установите драйверы.
- Если на компьютере установлено несколько криптопровайдеров, проверьте, какой из них должен работать с вашим токеном. Иногда они конфликтуют. Приоритет можно настроить в системе через реестр или в самом КриптоПро.
- Если это виртуальная машина (VirtualBox, VMware, Hyper-V), включите перенаправление USB-портов в настройках ВМ. По умолчанию ВМ не видит физические USB-устройства.
Сценарий 8: Конфликт криптопровайдеров или неподдерживаемый алгоритм
Подпись может быть создана одним криптопровайдером (например, КриптоПро CSP), но приложение ожидает другого (ViPNet CSP). Или алгоритм подписи устарел, и система его не поддерживает. Система пишет: «Сертификат найден в другом провайдере», «Unsupported signature algorithm», «Операция не поддерживается» или ошибка типа 0x8004110f.
Причины: На компьютере установлено несколько криптопровайдеров, и сертификат находится не в том, который использует приложение. Сертификат создан с использованием старого алгоритма (ГОСТ 89), а приложение требует новый (ГОСТ 2012). Браузер или приложение требует конкретную версию провайдера, которая у вас не установлена.
Что делать:
- Определите, какой криптопровайдер требует ваше приложение. Обычно это написано в его документации или руководстве.
- Откройте каждый установленный криптопровайдер (КриптоПро, ViPNet и т. п.) и проверьте, видит ли он ваш сертификат. Если сертификат видно в одном, но не в другом, система может попытаться использовать не тот.
- Переимпортируйте сертификат в нужный провайдер. Для этого возьмите исходный файл .pfx, откройте провайдер, найдите функцию импорта и добавьте сертификат туда.
- Проверьте, поддерживает ли ваше приложение ГОСТ 89 или требует ГОСТ 2012. Если требует новый алгоритм, а ваш сертификат на старом, нужно переоформить подпись в УЦ.
- Если это браузер, убедитесь, что установлен плагин, соответствующий вашему криптопровайдеру. Для КриптоПро нужен КриптоПро ЭЦП Browser plug-in, для ViPNet — плагин ViPNet.
Сценарий 9: Сбой при обращении к сертификату или системные ошибки
Иногда система выдаёт загадочные коды типа 0x80090001, 0x8009001b, 0x8009100c или просто «Неизвестная ошибка». Это обычно означает, что процесс подписания начался, но на каком-то промежуточном этапе потерялась связь: с носителем, с сервером проверки срока, с базой списков отозванных сертификатов (CRL).
Причины: Проблемы с сетью: компьютер потерял соединение с интернетом. Сервер КЛП (контроля целостности лицензии) недоступен. Кэш КриптоПро повреждён. Файл реестра Windows повреждён. На носителе повредился контейнер из-за неправильного извлечения.
Что делать:
- Проверьте интернет-соединение. Откройте браузер и перейдите на сайт. Если интернета нет, дождитесь восстановления соединения. Некоторые системы требуют проверку сертификата через интернет.
- Очистите кэш КриптоПро. Откройте программу → Параметры (Settings) → Найдите опцию очистки кэша. Перезагрузитесь и попробуйте снова.
- Переустановите КриптоПро CSP. Это удалит его из реестра, но не повредит сохранённые на токене сертификаты. Скачайте установщик с сайта КриптоПро, удалите текущую версию через Программы и компоненты, переустановите.
- Если ошибка содержит номер (0x...), поищите этот номер в базе ошибок КриптоПро на их сайте или на сайте вашего УЦ. Каждый код соответствует конкретной проблеме.
- Если ничего не помогает, соберите информацию (скриншоты ошибок, номер версии КриптоПро, тип сертификата, тип носителя) и обратитесь в техподдержку УЦ, который выдал подпись. Они видят эти ошибки каждый день и знают нестандартные решения.
Таблица диагностики: ошибка → причина → решение
| Сообщение или код ошибки | Вероятная причина | Диагностика | Решение |
|---|---|---|---|
| «Ключ не найден», 0x8009001b | Отсутствует закрытый ключ | Откройте КриптоПро, посмотрите свойства сертификата — написано «Закрытый ключ: нет» | Переимпортируйте файл .pfx с обоими ключами; если нет такого файла, обратитесь в УЦ |
| «Неверный пароль», 0x80090029, зависание | Неправильный пароль к контейнеру | Введите пароль вручную в простом редакторе, чтобы видеть символы; проверьте раскладку клавиатуры | Введите пароль очень аккуратно; если контейнер заблокирован, переимпортируйте; если пароль потерян, обновляйте подпись в УЦ |
| «Сертификат просрочен», 0x80090329 | Истёк срок действия сертификата | В КриптоПро посмотрите дату в поле «Действителен до»; проверьте дату и время компьютера | Проверьте системное время; если оно неправильно, исправьте; если сертификат действительно просрочен, продлите в УЦ |
| «Истекла лицензия» | Истёк пробный период или годовая лицензия КриптоПро | Откройте КриптоПро → Справка → О программе, посмотрите статус лицензии | Введите новый серийный номер лицензии; если встроенная лицензия, обновите подпись в УЦ |
| «Файл занят другой программой», «Access denied» | Документ открыт или синхронизируется | Посмотрите в трее (внизу справа), открыт ли документ в другой программе; проверьте значок синхронизации облака | Закройте документ везде; завершите облачную синхронизацию; переместите в локальную папку |
| «Недостаточно памяти», «Out of memory» | Файл слишком большой или мало оперативной памяти | Посмотрите размер файла (Свойства); проверьте загрузку памяти (Диспетчер задач) | Сжимайте или разделяйте файл; закройте другие программы; используйте утилиты КриптоПро из командной строки |
| «Неподдерживаемый формат», «Файл повреждён» | Неправильный формат или повреждённый файл | Откройте файл в соответствующей программе; проверьте расширение файла | Экспортируйте в поддерживаемый формат (например, PDF); переслите файл заново если он был повреждён |
| «Токен не инициализирован», 0x8009100e | Проблемы с токеном или его драйверами | Переподключите токен; откройте Диспетчер устройств и посмотрите, видит ли система его без ошибок | Переустановите драйверы; попробуйте другой USB-порт; перезагрузитесь; если ВМ, включите перенаправление USB |
| «Сертификат найден в другом провайдере», 0x8004110f | Конфликт криптопровайдеров или неподдерживаемый алгоритм | Откройте каждый криптопровайдер отдельно, проверьте, видит ли он сертификат | Переимпортируйте в нужный провайдер; убедитесь, что установлен правильный браузерный плагин |
| Неизвестная ошибка, код 0x80090001 и похожие | Системная ошибка, потеря связи, повреждённый кэш | Проверьте интернет-соединение; попробуйте очистить кэш КриптоПро | Очистите кэш в КриптоПро; перезагрузитесь; если не поможет, переустановите КриптоПро; обратитесь в УЦ с кодом ошибки |
Часто задаваемые вопросы
Подпись видна в системе, но подписать не дает, код ошибки не совпадает с этой таблицей? Специалисты нашего удостоверяющего центра помогут разобраться в причине и настроить рабочее место — выберите свой город, и мы настроим всё за вас.
Итог
Ошибка при подписании — это не повод паниковать и не причина выбрасывать подпись. В девяти из десяти случаев это либо опечатка в пароле, либо неправильное расширение файла, либо открытый документ. Каждая ошибка имеет логичное объяснение, и каждое объяснение имеет решение.
Порядок диагностики: сначала проверьте сам документ (размер, формат, открыт ли), потом сертификат и ключ (видна ли подпись в КриптоПро, не истекла ли), потом доступ (пароль, носитель, драйверы). Если сдвинулись на одном из уровней — нашли причину. Если ошибка остаётся загадочной, сохраните код, опишите, что делали, и обратитесь в техподдержку удостоверяющего центра. Они знают, что это значит и как это чинить.