Как установить сертификат электронной подписи (.cer) в 1С при отсутствии контейнера КриптоПро и где искать закрытый ключ?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Приветствуем вас в мире электронной подписи и КриптоПро! Мы понимаем, что настройка криптографического программного обеспечения может быть непростой задачей, особенно когда терминология кажется запутанной. Давайте вместе разберемся с распространенной проблемой: когда у вас есть файл сертификата (.cer), но КриптоПро не видит никаких контейнеров. Мы проанализируем ситуацию, выясним причины и предложим пошаговые решения, чтобы ваша электронная подпись заработала корректно в 1С.

Различаем открытый сертификат и закрытый ключ (контейнер)

Начнем с самого фундаментального понятия, которое часто вызывает путаницу: разница между сертификатом и контейнером закрытого ключа. Это ключевой момент для понимания всей дальнейшей работы.

Сертификат (.cer) – это, по сути, ваша электронная визитная карточка. Это публичная, или открытая, часть вашей электронной подписи. Сертификат содержит информацию о вас (владельце подписи), сроке его действия, удостоверяющем центре, который его выдал, и вашем открытом ключе. Открытый ключ используется для проверки подлинности вашей подписи, но сам по себе он не позволяет вам подписывать документы. Вы можете свободно передавать файл .cer кому угодно, чтобы они могли проверить вашу подпись. Это как брелок к ключу от двери: он показывает, чей это брелок, к какой двери подходит и кто его сделал, но саму дверь он не открывает.

Контейнер закрытого ключа – это самая секретная и критически важная часть вашей электронной подписи. Именно в нем хранится ваш уникальный, секретный закрытый ключ. Закрытый ключ генерируется один раз при выпуске электронной подписи и должен храниться в защищенном месте, недоступном для посторонних. Именно этот ключ используется для формирования электронной подписи под документами. Без закрытого ключа вы не сможете подписать ни один документ, даже если у вас есть все корневые сертификаты и сам файл .cer. Это и есть тот самый «ключ с зазубринами», который позволяет вам открыть дверь. Когда в КриптоПро вы не видите «контейнеров», это означает, что система не находит этот самый «ключ с зазубринами».

Таким образом, файл .cer, который вы скачали из СБИС, является лишь открытой частью. Он не содержит закрытого ключа, и из него невозможно «сделать» или «добавить» контейнер. Ваша задача — найти существующий контейнер закрытого ключа, который был создан при выпуске подписи, и обеспечить его доступность для работы вашей обработки 1С.

Выясняем, где хранится контейнер закрытого ключа

Если ваша электронная подпись уже успешно работает в браузере на сервере (например, вы можете подписывать документы в личном кабинете СБИС через подключение по RDP), это является отличным индикатором! Это однозначно означает, что соответствующий контейнер закрытого ключа определенно присутствует на этом сервере и доступен для той учетной записи, под которой вы входите в СБИС.

Давайте рассмотрим наиболее распространенные места хранения контейнеров закрытых ключей. Понимание этих мест поможет нам локализовать ваш контейнер:

  1. В реестре Windows. Это наиболее частый способ хранения контейнера закрытого ключа на сервере или рабочей станции. Однако здесь есть очень важный нюанс: контейнеры в реестре привязаны к конкретной учетной записи пользователя Windows, под которой они были созданы или установлены. Если контейнер создан под учетной записью "User1", то учетная запись "User2" (или системные учетные записи, под которыми может работать 1С) его автоматически не увидит. Именно это часто является причиной того, что КриптоПро "не видит" контейнер, хотя он и существует.
  2. На токене (защищенном USB-носителе). Это могут быть устройства, внешне похожие на обычные флешки, но имеющие встроенные криптографические функции (например, Рутокен, JaCarta, eToken). В этом случае закрытый ключ физически хранится на самом устройстве и не может быть скопирован с него (особенно для неэкспортируемых ключей). Для работы с таким контейнером токен должен быть постоянно подключен к серверу, и на сервере должны быть установлены соответствующие драйверы для этого токена. Браузеры обычно умеют работать с локальными ключами на токенах, если драйверы установлены.
  3. На обычной флешке или другом съемном диске. Иногда контейнеры могут быть скопированы на обычную USB-флешку или другой съемный носитель. В этом случае контейнер представляет собой папку, имя которой обычно заканчивается на `.000` (например, `22222222.000`). Для работы с таким контейнером флешка должна быть подключена к серверу, и КриптоПро должен быть указан путь к этому каталогу.

Учитывая, что ваша подпись работает через RDP в браузере, мы почти наверняка имеем дело с контейнером в реестре под вашей пользовательской учетной записью, либо с постоянно подключенным токеном, который доступен этому пользователю. Проблема, скорее всего, заключается в том, что обработка 1С запускается от другой учетной записи (например, от системной учетной записи или другого пользователя RDP), которая не имеет доступа к этому контейнеру.

Пошаговая инструкция по поиску и копированию контейнера

Разберем конкретные действия, которые помогут нам найти и при необходимости скопировать контейнер, чтобы он стал доступен для вашей обработки 1С.

Шаг 1: Идентифицируем учетную запись и находим контейнер

Наша первая задача – убедиться, что контейнер действительно существует и обнаружить его. Для этого мы должны войти на сервер под той учетной записью, которая уже успешно использует электронную подпись (например, для входа в личный кабинет СБИС через браузер).

  1. Войдите на сервер RDP под той же учетной записью, под которой вы успешно подписываете документы в СБИС через браузер. Это критически важный шаг, так как контейнеры в реестре привязаны к конкретным пользователям. Если вы войдете под администратором или другой учетной записью, вы можете не увидеть контейнер, даже если он есть.
  2. Откройте программу «КриптоПро CSP». Вы можете найти ее через меню «Пуск» или выполнив поиск по названию. Убедитесь, что это именно программное обеспечение КриптоПро, а не другое криптографическое средство.
  3. Перейдите на вкладку «Сервис». В интерфейсе КриптоПро CSP обычно есть несколько вкладок: «Общие», «Оборудование», «Безопасность», «Сервис» и «Настройки». Нас интересует вкладка «Сервис».
  4. Нажмите кнопку «Просмотреть сертификаты в контейнере». Эта кнопка предназначена для того, чтобы показать вам, какие сертификаты связаны с доступными контейнерами закрытых ключей.
  5. В открывшемся окне нажмите кнопку «Обзор». После нажатия «Просмотреть сертификаты в контейнере» появится новое окно. В нем будет кнопка «Обзор», которая открывает список всех контейнеров, доступных для текущей учетной записи пользователя в КриптоПро. В этом списке должны появиться все найденные контейнеры.

Анализируем результаты:

Шаг 2: Копируем найденный контейнер для обеспечения доступности

Если на предыдущем шаге вы успешно обнаружили контейнер закрытого ключа, теперь мы можем скопировать его. Это позволит сделать ключ доступным для других пользователей на сервере или для системных процессов, под которыми может запускаться ваша обработка 1С. Это особенно актуально, если ваш оригинальный ключ хранится на токене или только в реестре под одним пользователем, а вам нужен доступ для нескольких.

  1. В программе КриптоПро CSP, снова на вкладке «Сервис», найдите и нажмите кнопку «Скопировать» (или «Скопировать контейнер»). Эта функция позволяет создать копию существующего контейнера.
  2. В появившемся окне, нажмите «Обзор». Выберите из списка тот контейнер, который вы нашли на Шаге 1. Нажмите «ОК».
  3. На следующем шаге система предложит вам задать новое имя для копии контейнера. Мы настоятельно рекомендуем задать уникальное и понятное имя, чтобы избежать путаницы. Например, добавьте к оригинальному имени суффикс типа "_для_1С" или "_общедоступный".
  4. Далее система запросит выбрать носитель для хранения нового контейнера. В вашем случае, для серверной работы и доступности для различных пользователей, настоятельно рекомендуем выбрать «Реестр». Хранение в реестре обеспечивает удобство использования и доступность в рамках операционной системы.
  5. Может потребоваться задать пароль для нового контейнера. Это необязательный шаг, но рекомендуется установить надежный пароль для повышения безопасности, особенно если контейнер будет доступен нескольким пользователям. Запишите этот пароль в надежном месте. Если не задать пароль, доступ к контейнеру будет осуществляться без запроса, что может быть удобно, но менее безопасно.

Важно: Эту процедуру копирования контейнера необходимо будет проделать для каждой учетной записи пользователя Windows на сервере, под которой должна функционировать обработка 1С, использующая электронную подпись. Если операцию требуется выполнить для большого количества сотрудников, можно автоматизировать повторяющиеся действия пользователя в интерфейсе Windows с помощью программных роботов. Если обработка 1С запускается от системной учетной записи, потребуется дополнительная настройка или консультация с системным администратором для обеспечения доступа.

Что делать, если ключ неэкспортируемый?

В последние годы, особенно с 2022 года, удостоверяющие центры ФНС и другие аккредитованные УЦ стали выдавать преимущественно неэкспортируемые ключи. Это важное изменение, которое напрямую влияет на возможность копирования контейнера.

Что означает «неэкспортируемый ключ»? Это означает, что закрытый ключ был сгенерирован непосредственно на защищенном носителе (токене) и конструктивно или программно защищен от копирования с этого носителя. То есть, его невозможно вытащить с токена и скопировать в реестр или на обычную флешку. Это сделано для повышения безопасности, чтобы исключить возможность кражи или несанкционированного копирования закрытого ключа.

Если у вас именно такой случай, то функция «Скопировать» в КриптоПро CSP будет недоступна или завершится ошибкой. В этой ситуации копирование контейнера невозможно. Что же тогда делать?

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

  1. Токен должен быть постоянно подключен к серверу. Отключение токена приведет к потере доступа к закрытому ключу.
  2. Драйверы токена должны быть корректно установлены на сервере. Без них операционная система и КриптоПро не смогут взаимодействовать с токеном.
  3. Необходимо настроить доступ к токену для всех учетных записей. В зависимости от типа токена и настроек сервера, может потребоваться настроить права доступа или установить специальное программное обеспечение, чтобы разные пользователи могли использовать токен. В некоторых случаях это может означать, что токен доступен только при определенных условиях (например, при логине конкретного пользователя), что может вызвать проблемы для фоновых обработок 1С.

Решение этой задачи обычно относится к компетенции системных администраторов, так как требует глубокого понимания серверной инфраструктуры, прав доступа и особенностей работы с аппаратными криптографическими средствами. Если вы столкнулись с неэкспортируемым ключом, обратитесь к вашему системному администратору для обеспечения корректного доступа.

Заключительные рекомендации и взаимодействие с 1С

После того как вы нашли или успешно скопировали контейнер закрытого ключа (и он стал доступен для той учетной записи, под которой работает ваша обработка 1С), можно переходить к следующему этапу – «установке» сертификата (.cer) и его использованию в 1С.

Фактически, когда вы «устанавливаете» .cer файл, вы просто добавляете открытую часть ключа в хранилище сертификатов Windows. Если в системе уже есть соответствующий закрытый ключ (контейнер), КриптоПро автоматически сопоставит его с этим сертификатом. Это означает, что когда ваша обработка 1С попытается использовать сертификат для подписи, она сможет найти и открытую, и закрытую часть. Для проверки работы с сертификатом можно использовать обработку для подписания произвольных файлов средствами 1С.

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

  1. Хранилище сертификатов: Обычно 1С работает с сертификатами, установленными в системное хранилище сертификатов Windows (обычно это хранилище "Личные" для текущего пользователя или "Компьютер"). Убедитесь, что ваш .cer файл установлен в соответствующее хранилище после того, как контейнер станет доступен.
  2. Объекты 1С для работы с криптографией: В платформе 1С, начиная с версии 8.3, есть встроенные средства для работы с электронной подписью. Это могут быть объекты из библиотеки Криптография или методы глобального контекста, связанные с работой с сертификатами. Наиболее часто используются классы, такие как СертификатКлючаЭлектроннойПодписи, МенеджерЭлектроннойПодписи, МенеджерКриптографии и другие. Они позволяют программно выбирать сертификат, обращаться к его закрытому ключу (через КриптоПро CSP) и формировать электронную подпись.

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


// Пример упрощенного кода в 1С для создания подписи
// Этот код предполагает, что сертификат с указанным отпечатком
// установлен в хранилище и к нему есть доступный контейнер закрытого ключа.

Функция ПодписатьДанные(ДанныеДляПодписи, ОтпечатокСертификата) Экспорт
    
    Перем Сертификат;
    Перем МенеджерПодписи;
    Перем Подпись;

    Попытка
        // 1. Создаем объект для работы с сертификатом
        Сертификат = Новый СертификатКлючаЭлектроннойПодписи();
        
        // 2. Выбираем сертификат по его отпечатку (хешу)
        // Отпечаток - это уникальный идентификатор сертификата.
        // Его можно найти в свойствах сертификата через оснастку Windows.
        Сертификат.ВыбратьПоОтпечатку(ОтпечатокСертификата);

        // 3. Создаем менеджер для формирования электронной подписи
        МенеджерПодписи = Новый МенеджерЭлектроннойПодписи();
        
        // 4. Формируем подпись
        // ДанныеДляПодписи - это строка или двоичные данные, которые нужно подписать.
        Подпись = МенеджерПодписи.СоздатьПодпись(ДанныеДляПодписи, Сертификат);

        Возврат Подпись; // Возвращаем объект подписи
    Исключение
        Сообщить("Ошибка при создании электронной подписи: " + ОписаниеОшибки());
        Возврат Неопределено; // В случае ошибки возвращаем Неопределено
    КонецПопытки;
    
КонецФункции

// Пример использования функции:
// МойОтпечатокСертификата = "Здесь указываем отпечаток вашего сертификата без пробелов";
// МоиДанныеДляПодписи = "Некий текст или двоичные данные, которые нужно подписать";
// РезультатПодписи = ПодписатьДанные(МоиДанныеДляПодписи, МойОтпечатокСертификата);
// Если РезультатПодписи <> Неопределено Тогда
//     Сообщить("Документ успешно подписан.");
//     // Далее можно сохранить РезультатПодписи или передать его для дальнейшей обработки
// Иначе
//     Сообщить("Не удалось подписать документ.");
// КонецЕсли;

Не забывайте, что для корректной работы электронной подписи всегда требуется установить корневые и промежуточные сертификаты удостоверяющего центра. Вы уже сделали это по инструкции, что является абсолютно правильным и необходимым шагом. Без них система не сможет проверить цепочку доверия вашего сертификата.

Если после выполнения всех этих шагов проблема сохраняется, мы рекомендуем проверить следующие моменты:

Мы прошли долгий путь от базового непонимания до конкретных шагов по решению вашей задачи. Надеемся, что этот подробный разбор поможет вам успешно настроить работу электронной подписи в 1С. Помните, что каждый шаг важен, и терпение – ваш лучший союзник в таких вопросах!

← На главную