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