Lync 2013 – Cumulative Update – CERT_E_UNTRUSTEDROOT

Lync 2013, Cumulative Update 7 – nach Reboot noch alles klar, nach einem späteren Frontend Servicerestart plötzlich Event ID 12303/LS Server (The protocol stack reported a critical error: code 800B0109 (CERT_E_UNTRUSTEDROOT). The service has to stop.) und 14649/LS Protocol Stack

A serious problem related to certificates is preventing Lync Server from functioning.

Unable to use the default outgoing certificate.
Error 0x800B0109(CERT_E_UNTRUSTEDROOT).
The certificate may have been deleted or may be invalid, or permissions are not set correctly.
Ensure that a valid certificate is present in the local computer certificate store. Also ensure that the server has sufficient privileges to access the store.

Cause: The Lync Server failed to initialize with the configured certificate.
Resolution:
Review and correct the certificate configuration, then start the service again.

  • Certificates Snap In meint es ist alle da – Root Zert, Intermediate Zert, Zert an sich – alles in den korrekten Stores
  • certutil -verify -urlfetch liefert keinerlei Fehler, CRL Prüfung also auch ok
  • Rechte auf private Keys passen (NETWORK SERVICE)
  • Assign mit Lync Deployment hilft auch nicht

Erst nachdem ich alle Zertifikate außer dem Root CA Zert (das “eigentliche” und alle Intermediates) neu importiert hatte ist das Gewerk plötzlich fehlerfrei los gelaufen….

App-V Totalreset/cleanup ohne Neuinstallation

App-V ist relative empfindlich was Dateisystem, ACLs und Registry angeht – es passiert leider viel zu oft dass gar nix mehr geht und die spannendsten Fehlermeldung und vor allem Codes (App-V hat ja seine eigenen Regeln (und ist sehr eigen dabei…)).

Folgende Vorgangsweise hat sich für einen Totalreset ohne Neuinstallation recht gut bewährt:

MACHINE

Get-appvclientpackage -all|remove-appvclientpackage
Stop-Service appvclient

handle | find "C:\ProgramData\App-V" => kill process
Gardelete /dir:c:\programdata\app-v /subdirectories

Registry:
HKLM\SOFTWARE\Microsoft\AppV\Client\Packages\*
HKLM\SOFTWARE\Microsoft\AppV\Client\Streaming\Packages\*
HKLM\SOFTWARE\Microsoft\AppV\Client\Virtualization\LocalVFSSecuredUsers\* (ohne S-1-5-18)
HKLM\SOFTWARE\Microsoft\AppV\MAV\Packages\*

Usercleanup (s.u.)

Start-Service appvclient

USER

gardelete /dir:c:\users\akhedvgar\appdata\roaming\microsoft\appv /subdirectories
gardelete /dir:c:\users\akhedvgar\appdata\local\microsoft\appv /subdirectories

HKCU\SOFTWARE\Microsoft\AppV (komplett)
HKCU\SOFTWARE\Classes\AppV (komplett)

Shortcuts löschen
	• %USERPROFILE%\Desktop
	• %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu

.NET TcpClient() und DirectAccess

Die .NET Klasse TcpClient() kann scheinbar nur IPv4 oder IPv6 – nicht beides. Und wenn man nichts dazu sagt wird defaultmäßig IPv4 genommen. Sitzt man aber auf einem DirectAccess Client werden die Unternehmensresourcen auf IPv6 Adressen aufgelöst und das was im Unternehmen einwandfrei pfeift (weil IPv4) funktioniert von außen (DirectAccess) überhaupt nicht, TcpClient.Connect() wirft eine nette Exception:

System.Net.Sockets.SocketException (0x80004005): A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

Der richtige Weg (zumindestens funktioniert er) ist sich je nach Sachlage anzupassen:

IPHostEntry oHost = null;
TcpClient oClient = null;
string sHost = "host.company.com";
int nPort = 4711;

oHost = Dns.GetHostEntry(sHost);
if (oHost == null || oHost.AddressList == null || oHost.AddressList.Length == 0)
      throw new Exception("DNS resolution for '" + sHost + "' failed");

oClient = new TcpClient(oHost.AddressList[0].AddressFamily);
oClient.Connect(oHost.AddressList[0], nPort);

Super Micro IPMI Zertifikat

Da Super Micro (oder wer für das IPMI auch immer verantwortlich ist) die übergebenen Files nicht wirklich prüft und dann einfach weder HTTP noch HTTPS hoch bekommt hier die 2 Befehle die man von einem PFX weg braucht um das Cert und das Private Key File zu bekommen:

openssl pkcs12 -in my.pfx -nokeys -out my_cert.pem
openssl pkcs12 -in my.pfx -nocerts -nodes -out my_key.pem

Wenn mans doch verkackt hat kann man mit IPMITOOL von jedem Linux weg die Config (seltsamerweise aber nicht die LAN-Config) auf Factory Settings zurück setzen:

ipmitool -H meinhost -U meinuser -P meinpasswort raw 0x3c 0x40

WMI isolieren und töten

Microsoft hält ja große Stücke auf WMI – Cluster, Hyper-V, Server Manager, Storage Spaces und viele neue prominente Produkte funktionieren ohne WMI exakt überhaupt nicht  mehr. Wenn dann WMI (vielleicht nur bei mir aber irgendwie glaube ich nicht dran) wieder mal verreckt sich aber nicht stoppen lässt ist guter Rat unbezahlbar weil WMI per Default ein shared Service ist und noch dazu in einer Gruppe mit gefühlt 800 anderen Diensten, d.h. den SVCHOST Prozess töten kann man nicht ohne den Rechner in den Abgrund zu schicken (was z.B. bei einem hochproduktiven Hyper-V Clustermember irgendwie nicht so prickelnd ist – da WMI aber im Eck ist kann man weder auf die Cluster- noch auf die Hyper-V Funktionalität zurückgreifen und z.B. die VMs wegmigrieren….).

Man kann Dienste aber auch isolieren (own statt shared process) – das war ja schon bekannt, bei WMI läuft das aber anders weil da muss man mit WINMGMT /STANDALONEHOST die notwendigen Änderungen vornehmen und dann den Dienst neu starten (oder halt auf Reboot warten weil Restart ist so eine Sache :-D).

Damit ist WMI mal isoliert aber wie findet man es unter den 300 SVCHOSTS – vor allem weil z.B. TASKLIST /SVC auch WMI braucht um zu funktionieren und u.U. ist ein interaktives Login auf dem Rechner nicht mehr möglich weil eine Group Policy einen WMI Filter hat (oder 1000 andere Gründe, wie gesagt WMI is everywhere)?

Sysinternals hat wieder mal das rettende Tool vor vielen Jahren für eigentlich andere Sachen gebaut (man kann sich die Sachen sicher auch anders über die Win32 API besorgen aber das ist halt fix/fertig und funktioniert soweit ichs beurteilen kann überall): ListDLLs.

Mit z.B. LISTDLLS | FINDSTR "pid Command" bekommt man eine Liste aller Prozesse und deren Commandline, u.a. eine Commandline die mit "-k winmgmt” endet – und das ist unser WMI Prozess (die Gruppe winmgmt entsteht durch das /STANDALONEHOST, im Original ist das eine Gruppe die 1000 andere Dienste auch haben!).

Lync 2013 mit TMG 2010 über DirectAccess

Wer Lync 2013 auf DirectAccess Clients über den/die “normalen” Internet-facing Lync Edge Server fahren will (was bei Audio/Video/Sprache angesagt ist weil sonst alles doppelt verschlüsselt wird und Jitter, Lags & Co. ausufern) muss die ganzen URLs (sip, dialin, meet, webcon, av, discover, _sip._tls, _sip._internaltls) in der DirectAccess Konfiguration aus dem Tunnel ausschließen – das ist bekannt und wohl dokumentiert (auch wenn die Fülle an Namen schon Potential für spaßige Effekte hat).

Eher unbekannt sind aber 2 zusätzliche Tatsachen:

1) Lync-Discovery fährt über HTTPS auf lyncdiscover.mydomain.com und je nach Proxyconfig geht das im DA-Umfeld über den Proxy. Ich habe auch gesehen dass Lync Client irgendwo ins Internet hin will (irgend eine 23er Adresse) und da natürlich über Proxy gehen will/muss.

2) TMG liefert per default (in einer single Node Config) bei http://myproxy.mydomain.com/array.dll?Get.Routing.Script) in der MakeProxies() Funktion die IPv4 Adresse des TMG Hosts aus.

Diese zwei Umstände führen dazu dass der Lync-Client über die IPv4 Adresse des Proxies auf Lync-Discovery machen will und daran scheitert – die Effekte sind je nach weiterer Lync- und DA-Konfiguration ebenso manigfaltig wie spannend (und unter Garantie zeigt keiner davon in die richtige Richtung).

Also: Script aus TMG holen, ändern, wo anders speichern (Webserver) und Browser manuell oder via Policy dorthin schielen lassen und schon macht der Lync Client auch das was er soll.

Windows Management Framework 4.0 und .NET 4.5.x

Möge es jemanden die 3 schmerzhaften Stunden die ich deswegen ver*zensur*en habe ersparen: Das Setup von Windows Management Framework 4.0 (=PowerShell 4) hat ein sehr unschönes Problem – aufgetreten auf einer Image-VM für Terminalserver. Wenn auf der Kiste kein .NET 4.5 (ohne .1 oder .2 oder was noch immer da kommt) drauf war und via WSUS dann gleich 4.5.1 kommt läuft das Setup von WMF 4.0 durch, will keinen Reboot aber PowerShell 4 ist auch nicht installiert.

Will man den KB über WUSA entfernen meint es es ist nicht installiert, will man es nochmal installieren meint er es ist schon installiert (!!). D.h. die Kiste ist mehr oder weniger im Eimer was PowerShell 4 angeht.

Installiert man hingegen .NET 4.5 (ohne hinten was dran, aber Vorsicht falls das mit hinten dran noch drauf ist muss das VORHER runter) pfeift alles einwandfrei….

KB2984972 tötet App-V

Wie ich erst heute festgestellt habe hat KB2984972 (Update for RDC 7.1 to support restricted administration logons on Windows 7 and Windows Server 2008 R2 (!!!!)) vom Oktober Patchday nicht nur neue Features gebracht sondern so nebenbei auf manchen App-V Clients jeglichen Start einer App-V Application unmöglich gemacht. Die Lösung für das Problem steht auch in o.a. KB-Artikel (bzw. im offiziellen App-V Blog):

reg add HKLM\Software\Microsoft\AppV\Subsystem\ObjExclusions /v 93 /t REG_SZ /d TermSrvReadyEvent

Commvault Pruning und Free Disk Space Anzeige beschleunigen

Da beim Troubleshooting die Defaultzeiten für das echte Löschen der vom Data Aging für prunable befundenen Diskbereiche sowie das Update des Free Disk Space bei den MagLibs entwas zu lang sind (30 und 60 Minuten) kann man die per Parameter (live!) etwas beschleunigen – natürlich nur fürs Troubleshooting weil das die Systemlast am CommServe doch arg anhebt.

Die Zeit zwischen den echten Löschaktionen kann man über den Reiter Additional Settings vom CommServe mit Parameter “MMpruneProcessIntervalMin” steuern:

Simpana2

 

Die Zeit zwischen den Checks wie es mit dem Disk Space auf den MagLibs aussieht über das Control Panel / Media Management, Reiter Service Configuration, Parameter “Interval (Minutes) between disk space updates“:

Simpana1