Ошибка «Invalid algorithm specified» при генерации сертификатов в Windows

Недавно столкнулся с такой ошибкой на хосте с Windows Server 2019 после установки СКЗИ «Валидата CSP». Ошибка была при работа двух сервисов: Remote Desktop Services и Veeam Agent Backup. В логах Veeam например были такие сообщения:

Info Generating certificate. FriendlyName: [Manager to Agent channel encryption], Subject: [CN=VeeamDataMover connection certificate], ValidFrom: [02.08.2026 15:14:24], ValidTo: [02.09.2026 15:14:24]
Error Win32 exception (-2146893816) occurred on 1 attempt to create a certificate. Attempts left: 2
Error Invalid algorithm specified (System.ComponentModel.Win32Exception)
Error at Veeam.Backup.Common.WinAPIWrappers.CertContext.CertCreateSelfSignCertificate(CryptContext context, X500DistinguishedName subjectName, CertCreateSelfSignCertificateFlags flags, CryptKeyProvInfo keyProvInfo, CryptAlgorithmIdentifier signatureAlgorithm, DateTime startTime, DateTime endTime, X509ExtensionCollection extensions)
Error at Veeam.Backup.Common.SCertificateHelper.CreateSelfSignCertificateInternal(CryptContext context, String friendlyName, String subject, DateTime from, DateTime to, X509ExtensionCollection extensions)
Error at Veeam.Backup.Common.SCertificateHelper.CreateShortLivingSelfSignCertificate(String name, String friendlyName, Int32 certificateValidityPeriodMonths, X509ExtensionCollection extentions)
Error at Veeam.Backup.Common.SAgentTlsCertificateFactory.GenerateTlsCertificateRetryable(String friendlyName, Int32 attemptCounter)

В процессе поиска проблемы обнаружены были ветки реестра:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\1.2.840.113549.1.1.11!4]
"Name"="sha256RSA"
"Algid"=dword:0000800c
"Flags"=dword:00000001
"ExtraInfo"=hex:00,24,00,00
"CNGAlgid"="SHA256"
"CNGExtraAlgid"="RSA"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\1.2.840.113549.1.1.12!4]
"Name"="sha384RSA"
"Algid"=dword:0000800d
"Flags"=dword:00000001
"ExtraInfo"=hex:00,24,00,00
"CNGAlgid"="SHA384"
"CNGExtraAlgid"="RSA"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\1.2.840.113549.1.1.13!4]
"Name"="sha512RSA"
"Algid"=dword:0000800e
"Flags"=dword:00000001
"ExtraInfo"=hex:00,24,00,00
"CNGAlgid"="SHA512"
"CNGExtraAlgid"="RSA"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\2.16.840.1.101.3.4.2.1!1]
"Name"="SHA256"
"Algid"=dword:0000800c
"CNGAlgid"="SHA256"
"Flags"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\2.16.840.1.101.3.4.2.2!1]
"Name"="SHA384"
"Algid"=dword:0000800d
"CNGAlgid"="SHA384"
"Flags"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptDllFindOIDInfo\2.16.840.1.101.3.4.2.3!1]
"Name"="SHA512"
"Algid"=dword:0000800e
"CNGAlgid"="SHA512"
"Flags"=dword:00000001

После удаления этих веток и перезагрузки сервера бекап Veeam-агентом заработал и служба RDS выпустила сертификат.

Info Generating certificate. FriendlyName: [Manager to Agent channel encryption], Subject: [CN=VeeamDataMover connection certificate], ValidFrom: [03.08.2026 12:44:35], ValidTo: [03.09.2026 12:44:35]
Info [LeaseKeeper] Created. LeaseId: [f3a7bced-1a15-4da0-8761-6d56cc5c5abd], TTL: [100sec], ignoreExceptions: [False]
Info [CTransportSvcAgentManager] Agent has been started, ID 'b461be0b-45ad-4cea-ad0a-f4391beeb2d6', addresses '[::1]:2501;127.0.0.1:2501;192.168.67.11:2501', PID '10316'

Замена STS сертификата на vCenter

Менял я недавно vCenter сертификат с названием «STS Signing Certificate». Делал этот через веб-интерфейс клиента .
После нажатия на «Actions» — «Refresh with vCenter certificate» сертификат в интерфейсе успешно обновился, но появилось уведомление о необходимости всех систем. Я на всякий случай перезагрузил весь vCenter.  Сертификат как видно на скриншоте выдался на 8 лет до 2033 года. После этого я зашел по ssh на vCenter и запустил скрипт vCert.sh , с помощью которого проверил статус сертификатов.  В отчете  работы скрипта показывалось несколько ошибок. Путем некоторых манипуляций я перевыпустил еще раз «STS Signing Certificate». При такой манипуляции скрипт выпустил сертификат уже только на 2 года, при этом некоторые ошибки все еще висели:
«Checking VMDir certificate» и «Check STS VECS store configuration»

Для решения проблемы с «Checking VMDir certificate» я для начала выгрузил  отчет, который может сгенерировать скрипт vCert. В нем нашел такой сертификат:
Service Principal (Solution User) Certificates
Service Principal: WebClient_2014.05.19_021659
Issuer: O=VMware, Inc., OU=LogBrowser_2014.05.19_021659, CN=VMWARE/emailAddress=support@vmware.com
Subject: O=VMware, Inc., OU=LogBrowser_2014.05.19_021659, CN=VMware default certificate/emailAddress=support@vmware.com
Not Before: May 18 09:18:50 2014 GMT
Not After : May 16 09:18:57 2024 GMT
SHA1 Fingerprint : C6:7A:73:97:5C:CB:42:AC:48:55:72:0B:5E:8D:C7:5E:7B:0B:D9:FD
Signature Algorithm: sha256WithRSAEncryption
Subject Key Identifier:
Key Usage:
|_Digital Signature
|_Key Encipherment
|_Data Encipherment
Extended Key Usage:
|_TLS Web Server Authentication
Subject Alternative Name entries:
|_DNS:VMWARE
Other Information:
|_Is a Certificate Authority: No
|_Issuing CA in VMware Directory/VECS: No

Из-за него и возникала эта ошибка. Для его удаления я зашел в пункты меню 3 и затем 10, где скрипт vCert ругался на неиспользуемый сертификат (смотри скриншот ниже).  Я его удалил и после этого ошибка «Checking VMDir certificate» пропала

С ошибкой «Check STS VECS store configuration LEGACY» побороться оказалось также просто,  необходимо выполнить  команды
sed -i 's/STS_INTERNAL_SSL_CERT/MACHINE_SSL_CERT/' /usr/lib/vmware-sso/vmware-sts/conf/server.xml
/usr/lib/vmware-vmafd/bin/vecs-cli store delete --name STS_INTERNAL_SSL_CERT

и затем рестартовать одну из служб

service-control --restart vmware-stsd