ЦВД
Главная
Блог
Как обновить сертификаты ЭП из локального ЦС в Directum RX
10 апреля 2024 г. 5 мин

Как обновить сертификаты ЭП из локального ЦС в Directum RX

Обновление сертификатов электронной подписи (ЭП) — регулярная задача при сопровождении Directum RX. Особенно остро она встаёт, когда сертификаты выдаются локальным центром сертификации (ЦС), а не внешним УЦ.
Как обновить сертификаты ЭП из локального ЦС в Directum RX

В этом материале — наш опыт автоматизированного обновления сертификатов из локального ЦС для сотен сотрудников, включая решение двух самых коварных проблем:


— Невидимые символы при копировании отпечатков.
— Несовместимость SHA256 с устаревшими серверами.


Задача: массовое обновление сертификатов без ручного ввода

Клиент использует внутренний ЦС для выпуска сертификатов ЭП. Срок действия — 1 год. Каждый год — массовое обновление для сотен пользователей.

Ручной ввод сертификатов в Directum RX — трудоёмкий и подверженный ошибкам процесс. Нам нужно было:


— Автоматизировать импорт сертификатов.
— Избежать ошибок при настройке сервисов.
— Обеспечить совместимость с серверами на старых ОС.


Шаг 1: Получение сертификатов из локального ЦС

Сертификаты можно получить несколькими способами:


— Через веб-интерфейс ЦС.
— Через оснастку certmgr.msc (для личных сертификатов).
— Программно — с помощью PowerShell.


Рекомендуемый способ — PowerShell:


# Получить сертификат по отпечатку

$cert = Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object { $_.Thumbprint -eq "A1B2C3D4..." }


# Экспортировать в файл .cer (только открытый ключ)

Export-Certificate -Cert $cert -FilePath "C:\certs\user.cer"


# Или в .pfx (с закрытым ключом, если разрешён экспорт)

Export-PfxCertificate -Cert $cert -FilePath "C:\certs\user.pfx" -Password (ConvertTo-SecureString -String "password" -Force)


Шаг 2: Автоматический импорт в Directum RX

Для массового обновления мы разработали скрипт на C#, который импортирует сертификаты в Directum RX через API.


var newCert = Sungero.CoreEntities.Certificates.Create();

newCert.Owner = Sungero.CoreEntities.Users.As(employee);

newCert.X509Certificate = certificateData; // массив байт .cer или .pfx

newCert.Issuer = certificateInfo.Issuer;

newCert.Subject = certificateInfo.Subject;

newCert.Thumbprint = certificateInfo.Thumbprint;

newCert.NotBefore = certificateInfo.NotBefore.FromUtcTime();

newCert.NotAfter = certificateInfo.NotAfter.FromUtcTime();

newCert.Description = "Обновлён из локального ЦС";

newCert.Save();


Преимущества:


— Не нужно заходить под каждым пользователем.
— Все сертификаты обновляются централизованно.
— Можно запланировать выполнение перед окончанием срока действия.


Проблема 1: Невидимые символы в отпечатке сертификата

Одна из самых коварных ошибок — невидимые символы, которые копируются вместе с отпечатком при копировании из оснастки certmgr.msc.

Симптомы:


— Сервисы не запускаются.
— Ошибка: «Сертификат не найден», хотя отпечаток вроде бы верный.


Решение:


— Скопируйте отпечаток в Блокнот.

— Удалите все пробелы и лишние символы.

— Проверьте длину — должно быть 40 символов (HEX).

— Используйте чистую строку в конфигурационных файлах (appsettings.json, web.config).


Совет: Напишите простой валидатор:


bool IsValidThumbprint(string thumbprint)

{

return !string.IsNullOrWhiteSpace(thumbprint)

&& thumbprint.Length == 40

&& System.Text.RegularExpressions.Regex.IsMatch(thumbprint, @"^[A-F0-9]{40}$");

}


Проблема 2: Ошибка SHA256 на старых серверах

Новые сертификаты используют алгоритм хеширования SHA256, но на серверах с Windows Server 2012 R2 и ниже он не поддерживается по умолчанию.

Симптомы:


— Ошибка при установке .pfx-файла.

— Сервисы подписания не запускаются.

— В логах: «The hash algorithm is not supported».


Решение:


— Установите обновление KB4474419.

— Перезагрузите сервер.

— Только после этого импортируйте сертификат.


Альтернатива (если обновление нельзя установить):


— Импортируйте сертификат на современной ОС (Windows 10/11, Server 2016+).

— Экспортируйте его обратно с шифрованием 3DES-SHA1:


Export-PfxCertificate -Cert $cert -FilePath "C:\certs\legacy.pfx" -Password $pwd -Csp "Microsoft Enhanced RSA and AES Cryptographic Provider" -KeyExportPolicy Exportable


При экспорте система спросит, какое шифрование использовать — выберите 3DES-SHA1.

Важно: Не создавайте .pfx с SHA256, если он будет использоваться на старых серверах.


Шаг 3: Обновление отпечатков в сервисах

После обновления сертификатов необходимо обновить отпечатки в конфигурационных файлах всех сервисов:


— MessageBroker.exe.config
— SignatureService.exe.config
— StorageService.exe.config
— appsettings.json в Web-API


Что проверить:


— Все отпечатки очищены от невидимых символов.
— Используется https в адресах.
— Сертификат доверенный и установлен в хранилище Local Machine.


Итог: чек-лист обновления сертификатов ЭП


Получены новые сертификаты из локального ЦС


— Отпечатки очищены от невидимых символов

— На старых серверах установлено KB4474419

— При необходимости — сертификаты экспортированы в 3DES-SHA1

— Сертификаты импортированы в Directum RX (вручную или через скрипт)

— Отпечатки обновлены во всех сервисах

— Сервисы перезапущены и проверены на работоспособность


Заключение

Обновление сертификатов ЭП — процесс, который можно и нужно автоматизировать. Особенно при работе с локальным ЦС и большим количеством пользователей.


Ключевые моменты успеха:


— Внимание к деталям — даже один невидимый символ может сломать систему.
— Совместимость с инфраструктурой — помните о старых серверах.
— Централизованное управление — используйте скрипты и API Directum RX.


В ЦВД мы помогаем настроить автоматическое обновление сертификатов, включая интеграцию с локальным ЦС. Если у вас — аналогичная задача — обратитесь к нашим экспертам.

Делаем бизнес эффективнее с 2008-го года
— Получите персональный расчёт стоимости и план внедрения за 1 рабочий день
— Бесплатная консультация по сценариям вашей интеграции
— Демонстрация решения в течение 24 часов