vSphere 5 / ESXi5 / View 5 – Alle SSL Zertifikate austauschen

Es gibt mehrere Gründe warum man die selbst-signierten SSL-Zertifikate von VMWare austauschen sollte. Hauptkriterium ist natürlich um Man-in-the-Middle Angriffen vorzubeugen. Außerdem schafft man damit gleichzeitig auch die lästigen Zertifikatsfehler und „roten“ Adresszeilen aus dem weg. Macht also auch optisch was her 😉
Ich beschreibe hier, wie man die folgenden Zertifikate austauschen kann (ich würde die Reihenfolge auch empfehlen):

  1. ESXi Host
  2. vCenter Server (vSphere 5.0)
  3. vSphere Update Manager
  4. View 5 Connection Server

Voraussetzungen:

  1. Zertifizierungsstelle (in meinem Fall die Windows Active Directory CA)
  2. openssl
  3. ESX Server sowie vCenter und View Connection Server müssen zwischendurch neu gestartet werden

 

Schritt 1: Zertifikat erstellen


# Keyfile generieren

openssl genrsa 1024 > rui.key

(Info: Als Root Benutzer ausführen, sonst kann der „random state“ nicht geschrieben werden. Siehe Bild.)
# Zertifikat Request erstellen

openssl req -new -key rui.key > rui.csr


Common Name = FQDN
# Zertifikat Request anzeigen

openssl req -in rui.csr

# Zertifikat erstellen via / https://CASERVER/certsrv
# Zertifikat in Base64 kodierung herunterladen und nochmal via openssl ins x509 Format umwandeln.

openssl x509 -in server.domain.info.cer -out rui-x509.cer

 

Schritt 2: Zertifikat auf ESX Server austauschen

# Zertifikat auf den ESX kopieren
Anschließend per WinSCP auf den ESX-Host verbinden, und die Dateien aktualisieren:

cd /etc/vmware/ssl
mv rui.key rui.key.old
mv rui.crt rui.key.old

Nun die generierte rui-x509.cer als rui.crt sowie das Keyfile hochladen.

# ESX rebooten
Anschließend den ESX neubooten (Empfehlung!) oder ggf. den VPXA-Dienst neustarten:

service vmware-vxpa restart

 

Schritt 3: vCenter Zertifikat austauschen

# Zertifikat erstellen (Schritt 1)
Als erstes wieder ein Zertifikat erstellen. Selber Ablauf wie schon oben oder beim ESX durchgeführt.
Der Pfad für das SSl-Zertifikat des vCenters ist:
Windows 2008: C:\ProgramData\VMware\VMware VirtualCenter\SSL
Windows 2003: C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter\SSL\
# Zusätzlich Zertifikat als .pfx speichern
openssl pkcs12 -export -in rui.crt -inkey rui.key -name rui -passout pass:testpassword -out rui.pfx
Wichtig: Das Passwort auf gar keinen Fall ändern, sonst wird das Zertifikat nicht erkannt!
Zum Austausch gibts es nun 2 Wege, Entweder via zurücksetzen der vCenter Datenbank – oder neu per vCenter Api. Ich beschreibe beide Wege.

Weg 1:

# vCenter Server Dienst stoppen.

net stop vpxd

# Passwort der vCenter Server Datenbank zurücksetzen

"C:\Program Files\VMware\Infrastructure\VirtualCenter Server\vpxd.exe" –p

Das Passwort wird zufällig generiert.
# Starte den vCenter Server Dienst.

net start vpxd

Weg 2:

# Webseite aufrufen

https://vcenterservername/mob/?moid=vpxd-securitymanager&vmodl=1 


# Auf reloadSslCertificate klicken

# Auf „Invoke Method“ klicken

Als Bestätigung muss nun folgendes erscheinen:

# Überprüfen ob das Zertifikat korrekt ist.
Dazu die Webseite bzw. FQDN des vCenters aufrufen.

# Einstellung überprüfen:
Der Haken sollte gesetzt sein.

# ESX mit vCenter neu verbinden.
Damit der vCenter das neue Zertifikat des ESX „aktualisiert“ müssen die ESX-Hosts der Reihe nach neu verbunden werden. Dazu aus dem vCenter entfernen und neu verbinden. (FQDN verwenden!)

Schritt 3: Zertifikat des Update Managers austauschen

# Zertifikat erstellen (Schritt 1)
Als erstes wieder ein Zertifikat erstellen. Selber Ablauf wie schon oben oder beim ESX durchgeführt.
Der Pfad für das SSL Zertifikat des Update Managers ist (unter W2K8R2 64-bit):
C:\Program Files (x86)\VMware\Infrastructure\Update Manager\SSL
# Zusätzlich Zertifikat als .pfx speichern
openssl pkcs12 -export -in rui.crt -inkey rui.key -name rui -passout pass:testpassword -out rui.pfx
# Update Manager Dienst stoppen

net stop vmware-ufad-vci


# Zertifikat austauschen
Nun wieder die erstellen Zertifikat-Dateien austauschen. (rui.crt | rui.key | rui.pfx)
# Update Manager Dienst starten

net start vmware-ufad-vci

Schritt 4: Zertifikat des View Connection Server austauschen

Das Austauschen des View-Zertifikates wird in einem VMWare-KB sehr gut beschrieben. Siehe hier: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1008705
Mittels des keytools kann man sich den Request erstellen und dann ganz normal via AD-CA zertifizieren.
 

Debugging: SSL-Fingerprints im vCenter

Gegebenenfalls bekommt man das ein oder andere mal eine Fehlermeldung, das die Fingerprints nicht übereinstimmen. Dies kommt zum Beispiel, wenn man die ESX-Hosts nicht neu verbindet, wenn sich das Zertifikat geändert hat.
Dies kann man debuggen, indem man sich auf den SQL-Server verbindet und sich alle Fingerprints anzeigen lässt:

SELECT id,EXPECTED_SSL_THUMBPRINT,HOST_SSL_THUMBPRINT FROM dbo.VPX_HOST

Der Erwartete Fingerprint muss mit dem realen Fingerprint übereinstimmen:

Ggf. dann den Expected_SSL_Thumbprint mit dem realen aktualisieren:

UPDATE dbo.VPX_HOST SET EXPECTED_SSL_THUMBPRINT = '7B:93:B8:F9:FE:E2:8E:E4:9A:6E:19XXXXXXX:D:CB:21:03:E7’ WHERE id = '5849’

# Fingerprint vom Zertifikat anzeigen

openssl x509 -fingerprint -noout -md5 -in self-signed-certificate.pem

MD5 oder Sha1 – Alternativ einfach Rechtsklick-Eigenschaften und Zertifikat Details anzeigen lassen.
 
 
 
 

Active Directory etwas persönlicher -> Mit Fotos

Sofern man schon Office 2010 im Einsatz hat, findet man im Outlook und an anderen Stellen immer ein leeres Kontakt-Bild.

Um das aufzupeppen und es etwas persönlicher zu gesalten, kann man nun für jeden AD-User ein Foto hinterlegen.
Schlussendlich sieht es dann so aus:

Was benötigen wir dafür?
Angefanen damit, wird das Bild in den Benutzer-Attributen „thumbnail“ und „jpegPhoto“ abgespeichert. Die Bilder sollten nicht größer als 10kb sein. (Rechnet man mit 1000 Usern: 1000*10KB  werden im Globalen Katalog ca. 10 MB belegt.)
Es gibt 2 Wege das Bild ins AD zu bekommen: 1) Via GUI 2) per Powershell / Console
Für das Bearbeiten von mehreren Benutzern gleichzeitig würde ich die Powershell empfehlen. Ich habe mir folgendes Skript geschrieben, welches Bilder in einem Ordner sucht (Namensgebung: SamAccountName.jpg) und die Bilder ihren Benutzern zuordnet. Beachten, dass muss man für thumbnailPhoto und jpegPhoto machen.

$dir = Get-ChildItem C:\IT\picture\bilder
$list = $Dir | where {$_.extension -eq ".jpg"}
foreach ($file in $list)
{
$username = $file.basename
$photo = [byte[]](Get-Content $file -Encoding byte)
Set-ADUser $file.basename -Replace @{thumbnailPhoto=$photo}
}

 

Hat man nun erstmal alle Bilder drinnen, kann man später vereinzelte User noch per GUI bearbeiten. Dafür gibt es ein super Active-Directory Snapin.
Download:ADPhoto
 
 
 
 
 
 
 
 
 
Wie bekommt man jetzt seine Windows 7 Clients dazu automatisch das Profilbild des Users anzuzeigen? Da ich hier nichts einfach kopieren möchte – schaut euch dieses Howto an.

Windows XP OEM -> Physical to Virtual

Möchte man nun ein paar ältere physikalische Systeme mit einem Windows-XP (OEM) virtualisieren hat es mich schon den ein oder anderen Nerv gekostet…
Problem: Die Aktivierung. Mir ist es noch nicht gelungen ein OEM-Windows innerhalb einer VM erneut zu aktivieren.
Dennoch ist es machbar ohne eine komplette Neuinstallation das System zum Rennen zu bekommen.
Lösung: Windows XP (VL) Version also .iso in die VM-Mounten und davon booten.
Zusätzlich die Vmware SCSI Treiber per (virtuelles) Floppy Laufwerk einbinden. (Siehe: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1006956)
Von CD-Booten, direkt zu begin F6 drücken um den Vmware SCSI Treiber zu laden. Dann Z drücken und diesen auswählen.
Mit Enter geht es dann ganz normal im Menü weiter….
Nach der Erkennung der Windows-Installationen nun das Laufwerk auswählen und mit R eine erneute Installation durchführen.
Dies funktioniert wie eine Reperatur-Installation und ersetzt nur Systemdateien. Danach ist euer System so wie vorher inkl. aller Programme & Dateien. Lediglich die Version hat sich von OEM auf VL geändert.
Gruß
Constey

Vmware Update Manager (Fehler nach SSL-Update)

Nachdem ich heute mal wieder ein paar SSL-Zertifikate aktualisiert hatte, wollte der Update Manager nicht mehr so recht.
Er spuckte folgende Fehlermeldung aus:

update manager vim.fault.invalidlogin

Im Log (C:\ProgramData\VMware\VMware Update Manager\Logs) machte das sich so deutlich:

[05036 warning 'Libs'] SSLVerifyIsEnabled: failed to read registry value. Falling back to default behavior: verification off. LastError = -2146885628

Mh komisch, google hat auch nicht wirklich geholfen – die Registry Einträge die angeblich unter:
HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware Infrastructure\Update Manager liegen sollen existieren nicht….. (Scheint, dass ab Version 5 diese nicht mehr existieren? Verbessert mich ggf.)
Also kurzerhand den Update Manager neu installiert, und dabei bin ich auch direkt auf den Fehler des Problems gestoßen.
Das Zertifikat war logischerweise auf den FQDN ausgestellt. Beim Setup des UPDMGR kann man auswählen wie sich dieser identifizieren soll: a) Durch die IP oder b) durch den FQDN….
Hier hatte ich bei der Installation die IP angegeben, weshalb das Zertifikat logischerweise nicht gültig war.

Nagios: check_qnap

Servus allerseits,
heute war ich auf der Suche nach einem fertigen plugin, welches mein qnap nach den gängigen Infos abfragt. Im Nagios-Port fand ich bereits eine Version von Mad-Eye, die allerdings noch die ein oder andere Macke hatte. Dank der super Community habe ich nun eine fertig, funktionierende Version zusammen gebastelt.
Usage: ./check_qnap <hostname> <community> <part> <warning> <critical>
Parts are:  cpu, diskusage, temp, hdstatus and volstatus (volstatus = Raid Info)
Example: ./check_qnap 127.0.0.1 public diskusage 80 95
Download: check_qnap

#!/bin/bash
if [ ! "$#" == "5" ]; then
echo -e "\nWarning: Wrong command line arguments. \nUsage: ./check_qnap &lt;hostname&gt; &lt;community&gt; &lt;part&gt; &lt;warning&gt; &lt;critical&gt;\n \nParts are:  cpu, diskusage, temp, hdstatus and volstatus (volstatus = Raid Info)\nExample: ./check_qnap 127.0.0.1 public diskusage 80 95\n" &amp;&amp; exit "3"
fi
strHostname=$1
strCommunity=$2
strpart=$3
strWarning=$4
strCritical=$5
# Check ob QNAP erreichbar ist
TEST=$(snmpstatus -v 1 $strHostname -c "$strCommunity" -t 5 -r 0 2&gt;&amp;1)
# echo "Test: $TEST";
if [ "$TEST" == "Timeout: No Response from $strHostname" ]; then
echo "CRITICAL: SNMP to $strHostname is not available";
exit 2;
fi
# DISKUSAGE ---------------------------------------------------------------------------------------------------------------------------------------
if [ "$strpart" == "diskusage" ]; then
disk=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.4.1 | awk '{print $4}' | sed 's/.\(.*\)/\1/')
used=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk '{print $4}' | sed 's/.\(.*\)/\1/')
freedisk=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk '{print $4, $5}' | sed 's/.\(.*\)/\1/')
GBtest=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk '{print $5}' | sed 's/.*\(GB\).*/\1/')
disk=$(echo "scale=0; $disk*100" | bc -l | sed 's/\(.*\).../\1/')
if [ "$GBtest" == "GB" ]; then
used=$(echo "scale=0; $used*100/1000" | bc -l | sed 's/\(.*\).../\1/')
else
used=$(echo "scale=0; $used*100" | bc -l | sed 's/\(.*\).../\1/')
fi
let "PERC=(100-($used*100)/$disk)"
strOutput="Used=$[PERC]% 'free Disk'=$freedisk|'Used'=$[PERC]%;$strWarning;$strCritical;0;100"
if [ $PERC -ge "$strCritical" ]; then
echo "CRITICAL: "$strOutput
exit 2
fi
if [ $PERC -ge "$strWarning" ]; then
echo "WARNING: "$strOutput
exit 1
fi
echo "OK: "$strOutput
exit 0
# CPU ----------------------------------------------------------------------------------------------------------------------------------------------
elif [ "$strpart" == "cpu" ]; then
CPU=$(snmpget -v1 -c "$strCommunity" -mALL $strHostname 1.3.6.1.4.1.24681.1.2.1.0 | awk '{print $4}' | sed 's/.\(.*\)../\1/')
strOutput="CPU=$[CPU]%|'CPU'=$[CPU]%;$strWarning;$strCritical;0;100"
if [ $CPU -ge "$strCritical" ]; then
echo "CRITICAL: "$strOutput
exit 2
fi
if [ $CPU -ge "$strWarning" ]; then
echo "WARNING: "$strOutput
exit 1
fi
echo "OK: "$strOutput
exit 0
# Temperature---------------------------------------------------------------------------------------------------------------------------------------
elif [ "$strpart" == "temp" ]; then
TEMP0=$(snmpget -v1 -c "$strCommunity" -mALL $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.1 | awk '{print $4}' | cut -c2-3)
TEMP1=$(snmpget -v1 -c "$strCommunity" -mALL $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.1 | awk '{print $4}' | cut -c2-3)
if [ "$TEMP0" -ge "42" -o "$TEMP1" -ge "42" ]; then
echo Temperatur zu Hoch!
exit 2
else
let "TEMP=($TEMP0+$TEMP1)/2"
strOutput="Temp=$[TEMP]C|'Temp C'=$[TEMP]C;$strWarning;$strCritical"
if [ $TEMP -ge "$strCritical" ]; then
echo "CRITICAL: "$strOutput
exit 2
fi
if [ $TEMP -ge "$strWarning" ]; then
echo "WARNING: "$strOutput
exit 1
fi
echo "OK: "$strOutput
exit 0
fi
# Volume Status----------------------------------------------------------------------------------------------------------------------------------------
elif [ "$strpart" == "volstatus" ]; then
Vol_Status=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.6.1 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/')
if [ "$Vol_Status" == "Ready" ]; then
echo OK: $Vol_Status
exit 0
elif [ "$Vol_Status" == "Rebuilding..." ]; then
echo "Warning: "$Vol_Status
exit 1
else
echo "CRITICAL: "$Vol_Status
exit 2
fi
# HD Status----------------------------------------------------------------------------------------------------------------------------------------
elif [ "$strpart" == "hdstatus" ]; then
HD0=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.11.1.7.1 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/')
HD1=$(snmpget -v1 -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.2.11.1.7.2 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/')
if [ "$HD0" == "GOOD" -a "$HD1" == "GOOD" ]; then
echo OK
exit 0
else
echo ERROR
exit 2
fi
#----------------------------------------------------------------------------------------------------------------------------------------------------
else
echo -e "\nUnknown Part!" &amp;&amp; exit "3"
fi
exit 0

Gruß
Cons

In die Tiefen von PCOIP

Nachdem mir heute meine RSS-Feed verloren gegangen sind, und ich auf der Suche nach meinen verlorenen Blogs war habe ich etwas sehr geiles gefunden.
Wer schonmal versucht hat die Performance von Zero-Clients bzw. die Schwachstellen zu suchen, hat das pciop_server.log vielleicht schon mal gesehen.
In dieser Masse von Performance-Werten hat man eigentlich keine Chance per Hand etwas raus zu bekommen.
Nunja, über die Vmware-Community bin ich auf „Chuck“ bzw. sein „PCOIP Log View“ gestoßen. -> URL
Damit kann das Logfile sogar direkt per WMI ausgelesen werden und somite Live-Daten anzeigen.
Leider ist sein Tool noch nicht offiziell veröffentlicht, hier aber schon mal ein paar Screenshots vorab.


Das sieht schon mal sehr viel versprechend aus. Hoffen wir, dass das Tool kostenlos ist und bald veröffentlicht wird 😉

Disk Timeout aendern auch für Exchange recommended

Wer den folgenden Reg-Key schon mal gesehen hat, hat entweder viel mit Vmware View zu tun oder kennt sich allgemein etwas besser mit Windows aus 🙂
Bei den verschiedenen Client-VM’s via Vmware View wird recommended den TimeoutValue auf 180 Sek. zu setzen.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk\TimeOutValue

Nun habe ich im gelesen, dass Microsoft ebenfalls die Anpassung für einen Exchange-Server vorsieht. -> Blogpost
Je nach Storage:

ScenarioRecommendation
Direct-Attached Storage
  • Reduce Windows disk TimeOutValue to 20 seconds
  • Refer to hardware manufacturer’s guidance
  • Hardware manufacturer’s guidance takes priority in the event of a clash
SAN-Attached RAID Storage
  • Reduce Windows disk TimeOutValue to 20 seconds
  • Refer to hardware manufacturer’s guidance
  • Hardware manufacturer’s guidance takes priority in the event of a clash
JBOD Storage
  • Increase Windows disk TimeOutValue to 180 seconds
  • Refer to hardware manufacturer’s guidance
  • Hardware manufacturer’s guidance takes priority in the event of a clash

 

Nutzliches Tool für vMware Ubersicht

vKernel Logo
vKernel hat ein neues kostenloses Tool veröffentlicht – vScope. Dieses soll vorallem zur Übersicht dienen, wie man in dem Screenshot auch schon sehen kann.
Relative eindeutige Statusanzeigen durch Grün/Rot/Orange Felder. Ich werde es die Tage mal ausprobieren und noch weiter darüber schreiben.
Auszug von der Hompeage über die Funktionen:

  • Visualize Performance, Capacity & Efficiency Across an Environment
  • Identify VM Performance Issues Across an Environment
  • Spot Host Performance Problems Across an Environment
  • Find Host Capacity Issues Across an Environment
  • Identify VM Resource Efficiency Issues Across an Environment
  • Spot Inefficient Datastores Across an Environment
  • Project environment health onto a data center NOC screen
  • See All VMs, Hosts and Datastores Across Many vCenters and Data Centers

vScope Explorer
Link zur Webseite: http://www.vkernel.com/products/vscope-explorer

Sicherheitswarnung bei "Datei oeffnen" per GPO bzw. Registry deaktivieren

Ohne viel Schmankerl: Seit XP gibt es die Execution Prevention, in anderen Worten eine Dialogbox die beim Aufruf möglicher unsicherer Programme aufpoppt.
Setzt man diese Registry keys per GPO ist man die Meldung los. (Zusätzlich kann man noch die Internet Explorer – Sicherheitseinstellungen bzw. Zonen/Sites konfigurieren)

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Associations]
"DefaultFileTypeRisk"=dword:00001808
"LowRiskFileTypes"=".exe;.lnk"
"ModRiskFileTypes"=".doc;.pdf;.xls;.exe;.lnk"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Associations]
"DefaultFileTypeRisk"=dword:00001808
"LowRiskFileTypes"=".exe;.lnk"
"ModRiskFileTypes"=".doc;.pdf;.xls;.exe;.lnk"

Das ganze ist hier sehr gut beschrieben.