Как обновить сертификаты ЭП из локального ЦС в 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.
В ЦВД мы помогаем настроить автоматическое обновление сертификатов, включая интеграцию с локальным ЦС. Если у вас — аналогичная задача — обратитесь к нашим экспертам.
— Бесплатная консультация по сценариям вашей интеграции
— Демонстрация решения в течение 24 часов