Откуда 1С:Предприятие берёт сертификаты на Windows, Linux и сервере

· 10 мин

Содержание

Собственного хранилища сертификатов у платформы 1С:Предприятие 8.3 нет. Сертификаты электронной подписи 1С берёт из хранилища операционной системы или криптопровайдера: в Windows это хранилище Личное текущего пользователя (certmgr.msc), в Linux — хранилище КриптоПро uMy. В самой базе, в справочнике сертификатов, лежит только открытая часть и привязка к пользователю.

Для HTTPS-соединений картина другая. Какие корневые сертификаты доверенные, решает код конфигурации: он указывает платформе, брать их из Windows, из ОС или из файла. Поэтому, когда 1С «не видит» сертификат, первым делом выясните, какой это сертификат и под каким пользователем идёт поиск.

Какие сертификаты нужны 1С и где лежит каждый

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

Что за сертификатДля чегоГде хранится
🔑 Сертификат ЭП (КЭП, НЭП) с закрытым ключомПодпись отчётов, ЭДО, маркировка, ЕГАИСОткрытая часть — в хранилище Личное ОС; ключ — в контейнере (реестр, токен, флешка, HDIMAGE)
🏛 Корневые и промежуточные сертификаты УЦПостроение цепочки доверия для ЭПДоверенные корневые центры сертификации и Промежуточные центры сертификации
🌐 Сертификаты для TLS (HTTPS)Обмен с сайтами, API, веб-сервисамиХранилище ОС, файл PEM или системный bundle Linux
📇 Запись сертификата в базеСвязь «сертификат — пользователь — организация»Справочник сертификатов ключей электронной подписи и шифрования в информационной базе

Главное правило: закрытый ключ никогда не хранится в базе 1С. Если ключа нет на компьютере, где выполняется подписание, 1С подписать не сможет, даже если сертификат «есть в программе».

Хранилище сертификатов Windows: что видит 1С

На Windows клиент 1С обращается к хранилищу того пользователя, под которым запущен сеанс. На терминальном сервере это значит: у каждого бухгалтера своё Личное хранилище, и установка сертификата одному не даёт его другому.

Как открыть хранилище

  1. Нажмите Win+R.
  2. Для хранилища текущего пользователя введите certmgr.msc.
  3. Для хранилища компьютера — certlm.msc (нужны права администратора).
  4. Откройте Личное → Сертификаты. Там должны быть сертификаты подписи с иконкой ключа.

Корневые сертификаты УЦ смотрите в ветке Доверенные корневые центры сертификации, промежуточные — в Промежуточные центры сертификации.

Из командной строки то же самое показывает certutil:

:: личное хранилище текущего пользователя
certutil -user -store My

:: личное хранилище компьютера
certutil -store My

:: корневые сертификаты компьютера
certutil -store Root

Где физически лежит ключ

С КриптоПро CSP контейнер может быть на токене (Рутокен, JaCarta), на флешке или в реестре. Ключи со считывателя «Реестр» в 64-битной Windows лежат в ветке HKLM\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\<SID>\Keys, где SID — идентификатор пользователя.

Если сертификат в Личное есть, но значок ключа отсутствует, значит, связь с контейнером потеряна. Восстанавливается она в КриптоПро CSP: вкладка Сервис → Просмотреть сертификаты в контейнере, выбрать контейнер, нажать «Установить».

Перенесли базу на новый компьютер — сертификаты не переедут вместе с ней. Контейнер копируется отдельно средствами КриптоПро, а сертификат потом заново устанавливается в Личное.

Где сертификаты в самой программе 1С

В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) список сертификатов ведётся в настройках электронной подписи. Это не хранилище в полном смысле, а реестр: какой сертификат кому принадлежит и для какой организации используется.

КонфигурацияПуть
Бухгалтерия 3.0Администрирование → Общие настройки → Электронная подпись и шифрование → Настройки электронной подписи и шифрования
ЗУП 3.1Администрирование → Общие настройки → Электронная подпись и шифрование → Настройки электронной подписи и шифрования
УТ 11НСИ и администрирование → Администрирование → Общие настройки → Электронная подпись и шифрование

В открывшейся форме три вкладки, которые нужны чаще всего:

  • 📇 Сертификаты — список добавленных сертификатов. Кнопка «Добавить» предлагает выбрать сертификат из Личное хранилища ОС.
  • ⚙️ Программы — какой криптопровайдер использует 1С (КриптоПро CSP, ViPNet CSP), путь к библиотеке на Linux.
  • 🖥 Настройки — где выполнять подписание и проверку: на клиенте или на сервере.

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

Удаление сертификата из справочника не удаляет его из Windows и не трогает ключ. И наоборот: удалили сертификат в certmgr.msc — в справочнике запись останется, но подписывать она уже не сможет.

Хранилище сертификатов в Linux: КриптоПро и системные CA

В Linux у клиента 1С нет доступа к certmgr.msc, и сертификаты ЭП живут в хранилищах КриптоПро CSP для Linux. Утилита certmgr лежит в /opt/cprocsp/bin/amd64/.

Хранилища КриптоПро

ХранилищеЧто в нёмКто может менять
uMyЛичные сертификаты пользователяСам пользователь
uRootДоверенные корневые пользователяСам пользователь
uCAПромежуточные пользователяСам пользователь
mRoot, mCAКорневые и промежуточные для всего компьютераroot

Контейнеры с ключами на диске (считыватель HDIMAGE) лежат в /var/opt/cprocsp/keys/<имя_пользователя>/.

Основные команды:

# список личных сертификатов
/opt/cprocsp/bin/amd64/certmgr -list -store uMy

# установить сертификат из контейнера в личное хранилище
/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont '\\.\HDIMAGE\имя_контейнера'

# установить корневой сертификат УЦ для всего компьютера
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file root.cer

В настройках электронной подписи 1С на вкладке «Программы» для Linux укажите путь к библиотеке КриптоПро: /opt/cprocsp/lib/amd64/libcapi20.so.

Системные корневые сертификаты для HTTPS

Для TLS-соединений через OpenSSL нужен системный набор корневых сертификатов. Добавить свой корневой сертификат:

  • 🐧 Debian, Ubuntu, Astra: положить файл с расширением .crt в /usr/local/share/ca-certificates/ и выполнить sudo update-ca-certificates. Итоговый bundle — /etc/ssl/certs/ca-certificates.crt.
  • 🎩 RHEL, РЕД ОС, ALT (с пакетом ca-trust): положить файл в /etc/pki/ca-trust/source/anchors/ и выполнить sudo update-ca-trust.

Сервер 1С и консоль кластера: под чьей учёткой искать

Самая частая ловушка — подписание или проверка на сервере 1С. В этом случае работает не клиент, а рабочий процесс rphost. Он запущен от служебной учётной записи, обычно USR1CV8 в Windows или usr1cv8 в Linux, и смотрит в хранилище именно этого пользователя.

Что проверить через консоль

  1. Откройте консоль администрирования серверов 1С.
  2. Разверните Кластеры → <ваш кластер> → Рабочие серверы.
  3. Выпишите все рабочие серверы. Подписание на сервере может выполниться на любом из них, поэтому КриптоПро и сертификат нужны на каждом.
  4. В services.msc (Windows) найдите службу «Агент сервера 1С:Предприятия» и посмотрите на вкладке «Вход в систему», от какого пользователя она работает.

Как дать сертификат служебной учётке

  • Windows. Либо установите сертификат в хранилище компьютера (certlm.msc) с доступным службе контейнером, либо войдите под служебным пользователем (runas /user:USR1CV8 mmc) и установите сертификат в его Личное.
  • Linux. Выполните установку от имени пользователя сервера:
sudo -u usr1cv8 /opt/cprocsp/bin/amd64/certmgr -inst -store uMy -cont '\\.\HDIMAGE\имя_контейнера'

Контейнер при этом должен лежать в /var/opt/cprocsp/keys/usr1cv8/.

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

Как конфигурация выбирает сертификаты для HTTPS

Для веб-запросов хранилище задаёт сам код. Объект ЗащищенноеСоединениеOpenSSL принимает два параметра: клиентский сертификат и источник корневых сертификатов.

Источник корневых сертификатовОткуда берутся
СертификатыУдостоверяющихЦентровWindowsХранилище Windows (Доверенные корневые центры сертификации)
СертификатыУдостоверяющихЦентровФайлФайл PEM, путь передаётся в конструктор
СертификатыУдостоверяющихЦентровОСХранилище ОС, есть в современных версиях платформы
Не указанСертификат сервера не проверяется вовсе

Пример соединения с проверкой по хранилищу Windows:

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровWindows);
Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , 30, ЗащищенноеСоединение);

На Linux тот же код с файлом:

КорневыеСертификаты = Новый СертификатыУдостоверяющихЦентровФайл("/etc/ssl/certs/ca-certificates.crt");
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, КорневыеСертификаты);

Клиентский сертификат (когда сервис требует авторизацию по сертификату) передаётся первым параметром: Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Выбирать) или Новый СертификатКлиентаФайл(ПутьКФайлу, Пароль) для файла PFX.

Сайт с российским сертификатом от НУЦ Минцифры не откроется, пока его корневой сертификат не добавлен в хранилище: в Доверенные корневые центры сертификации на Windows или в системный набор на Linux.

Ошибки сертификатов в 1С: диагностика и журналы

Разбирайте проблему по шагам: есть ли сертификат в хранилище нужного пользователя → видит ли его 1С → строится ли цепочка до корня → доступен ли ключ.

Диагностика: выберите симптом

Где смотреть подробности

  • 📜 Журнал регистрации: Администрирование → Обслуживание → Журнал регистрации. Отберите события по пользователю и времени ошибки: там видно полный текст исключения.
  • 🧾 Технологический журнал — если ошибка возникает на сервере и до пользователя доходит неполной. Создайте файл logcfg.xml в каталоге conf платформы (C:\Program Files\1cv8\conf\ или /opt/1cv8/conf/) и включите сбор событий EXCP:
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1c_techlog" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

Технологический журнал быстро растёт. Включайте его на время воспроизведения ошибки и удаляйте logcfg.xml сразу после.

  • 🔍 Openssl для проверки сайта со стороны сервера: openssl s_client -connect api.example.ru:443 -showcerts покажет цепочку, которую отдаёт сервер, и на каком сертификате обрывается доверие.

Обновление сертификатов без простоев: проверка сроков и скрипты

Квалифицированный сертификат ЭП обычно выпускают на 12–15 месяцев. Просроченный сертификат в 1С выглядит как «сломанная подпись» в день сдачи отчётности, поэтому сроки лучше проверять заранее.

Скрипт проверки на Windows

PowerShell выведет сертификаты из Личное, которые истекают в ближайшие 30 дней:

Get-ChildItem Cert:\CurrentUser\My |
  Where-Object { $_.NotAfter -lt (Get-Date).AddDays(30) } |
  Select-Object Subject, NotAfter, Thumbprint

Для хранилища компьютера замените CurrentUser на LocalMachine. Скрипт можно повесить в планировщик заданий и отправлять результат на почту администратору.

Проверка на Linux

Срок файлового сертификата показывает OpenSSL:

openssl x509 -enddate -noout -in /usr/local/share/ca-certificates/myca.crt

Для сертификатов КриптоПро смотрите строку Not valid after в выводе certmgr -list -store uMy. Ту же команду удобно запускать по cron от имени usr1cv8 на рабочих серверах кластера.

Порядок замены сертификата ЭП

Замена сертификата ЭП в 1С
Выполнено: 0 / 6

Корневые сертификаты для HTTPS на Windows обновляются через Центр обновления. На сервере без интернета их придётся завозить вручную, иначе обмены начнут падать после смены сертификата у сайта-партнёра.

Частые вопросы

Можно ли хранить сертификат прямо в базе 1С, чтобы он был у всех пользователей?
Нет. В базе хранится только открытая часть сертификата. Ключ остаётся в контейнере КриптоПро на компьютере или токене. Общий доступ дают облачная подпись оператора или подписание на сервере.
Почему в файловой базе подписание на сервере работает так же, как на клиенте?
В файловом варианте серверная часть выполняется в процессе клиента на том же компьютере. Поэтому и хранилище используется то же — текущего пользователя Windows.
Нужно ли устанавливать сертификат в хранилище компьютера?
Только если подписание идёт на сервере 1С или одним сертификатом пользуются несколько учётных записей Windows. Для обычной работы бухгалтера достаточно хранилища Личное его пользователя.
Как узнать, каким хранилищем пользуется обмен по HTTPS в конфигурации?
Найдите в коде создание ЗащищенноеСоединениеOpenSSL и посмотрите второй параметр. В типовых конфигурациях на БСП он формируется общей функцией, и для неё нужна ОС с актуальными корневыми сертификатами.
Что делать, если токен вставлен, а 1С пишет, что сертификат не найден?
Проверьте, видит ли контейнер сам КриптоПро CSP. Если видит, переустановите сертификат из контейнера в Личное и перезапустите сеанс 1С.