Nedávno jsem tu psal o chybě, kterou má v sobě služba Remote Desktop Configuration (sessionenv). Jedná se o souhru s technologíí certificate autoenrollment (česky poněkud podivně automatický zápis certifikátů). Nastává to, když se vám sám prodlouží, nebo přesněji vydá nový, pokračovací (renewal), certifikát pro vzdálenou plochu z nějaké vaší vnitřní certifikační autority (AD CS nejspíš).
Ono to totiž ten původní certifikát zaarchivuje (archived). Dělá to vcelku logicky, protože se jedná o šifrovací (encryption) - tedy nikoliv jen podepisovací - certifikát. U takových ta technologie očekává, že je potřeba privátní (soukromé) klíče uchovávat, tedy archivovat. Což je samozřejmě blbost v případě certifikátu určeného k transportnímu RSA AT_KEYEXCHANGE. Nojo. Jenže.
Jenže ten archivovaný certifikát vám zůstane v úložišti. A služba Remote Desktop Configuration si nevšimne, že je archivovaný - tedy až do doby, kdy skutečně expiruje. Autoenrollment ho totiž vydává dříve, než ten původní vyprší. A RDP server se ho potom snaží nadále používat. Což mu nejde, protože Schannel ty archivované certifikáty nevidí.
Autoenrollment vypnout asi nechcete. Zkrátit dobu vydání dalšího ještě před expirací ani nejde. Takže jediné řešení je mazat automaticky ty archivované.
Samozřejmě nechcete mazat všechny. Asi jen ty, které obsahují EKU ServerAuthentication. U ostatních bychom si možná privátní klíče rádi přecejenom nechali. A ideálně bych si to omezil i na jméno toho certifikátu pomocí parametru DnsName. Parametr Force tam být musí, aby Get-ChildItem (dir) vracelo právě i ty archivované certifikáty (archived certificates).
dir Cert:\LocalMachine\My -Eku 1.3.6.1.5.5.7.3.1 -DnsName gps-data1.gopas.virtual -Force | ? { $_.Archived } | Remove-Item
Pokud to chcete naplánovat, doporučuji pomocí baťáčku.