Im Internet gibt es viele Anleitungen, die beschreiben, wie man einen WSUS-Server mit einem SSL-Zertifikat versieht. Jedoch ist dort immer nur die Rede von selbst erstellten Zertifikaten und damit einhergehend auch grundsätzlich von einem internen Namen. Geht man nun strikt nach der Anleitung, verwendet aber stattdessen ein öffentliches Zertifikat, so scheitert es spätestens beim Verbinden der Serverkonsole (MMC) auf die neue Zugriffs-URL.

In diesem Tutorial gehe ich davon aus, dass das Zertifikat bereits im Zertifikatsspeicher des WSUS liegt. Im Anschluss sind folgende Schritte zu tätigen:

Setzen des Zertifikats

  • Wir öffnen den IIS Manager
  • Erweitern die Baumstruktur links auf folgenden Pfad:
    [Servername] -> Sites -> WSUS Administration
  • Während WSUS Administration markiert ist, kann rechts unter Actions auf Bindings… geklickt werden.
  • Nun kann auf das https-Binding doppelgeklickt werden.
  • Unten in der Rubrik SSL certificate kann im DropDown-Menü nun das Zertifikat ausgewählt werden, das zuvor eingespielt wurde.
  • Anschließend können die offenen Fenster mit OK und Close geschlossen werden.

Erzwingen von SSL-Verbindungen

  • Erneut im IIS Manager angekommen erweitern die Baumstruktur links auf folgenden Pfad:
    [Servername] -> Sites -> WSUS Administration (
  • Darunter sind folgende Applications für uns nun von Belang:
    ApiRemoting30
    ClientWebService
    DSSAuthWebService
    ServerSyncWebService
    SimpleAuthWebService
  • Nacheinander markieren wir nun jede dieser Applikationen, um anschließend auf SSL Settings zu gehen und folgende Einstellungen vorzunehmen:
    [X] Require SSL
    Client certificates: (o) Ignore
  • Damit wäre dieser Schritt erledigt. Sollte zum Zeitpunkt der Tätigkeiten der WSUS Manager geöffnet gewesen sein, wird dieser nun meckern.

WSUS für SSL konfigurieren

  • Nun öffnen wir ein Konsolenfenster als Administrator
  • Dort angekommen navigieren wir zu folgendem Pfad: „C:\Program Files\Update Services\Tools“
  • Nun führen wir folgenden Befehl aus: WSUSUtil.exe ConfigureSSL [Zukünftige URL]
    Bsp: WSUSUtil.exe ConfigureSSL wsus.domain.tld

Der Serverkonsole den lokalen Zugriff ermöglichen

Nun kommen wir zum Knackpunkt. Die Serverkonsole kann sich standardmäßig nur auf den internen Namen verbinden. Nach den vorhergehenden Änderungen wäre nun aber eigentlich die URL zum erneuten Verbinden der WSUS Managementkonsole einzugeben. Die Lösung hierfür konnte im TechNet von Microsoft (unten verlinkt) gefunden werden:

  • Wir öffnen den Registry-Editor und navigieren zu folgendem Pfad: „HKLM\System\CurrentControlSet\Controls\Lsa\MSV1_0“
  • Nun rechtsklicken wir auf den Key MSV1_0 und klicken dann auf New -> Multi-String Value. Als Name geben wir BackConnectionHostNames ein.
  • Nach der Anlegung öffnen wir nochmals den Wert, um als Value data die zukünftige URL einzutragen.
  • Anschließend kann das Fenster per Klick auf OK bestätigt und der Registry Editor wieder geschlossen werden.

Die Serverkonsole erneut verbinden

Abschließend können wir auf der Serverkonsole die aktuelle Verbindung auf den „alten“ FQDN schließen und anschließend auf die neue URL verbinden.

Quellen:
Problemlösung mit der externen URL: https://social.technet.microsoft.com/Forums/windowsserver/en-US/84033ed9-f7aa-4676-a68a-01607eb1f160/wsus-not-working-properly-with-ssl?forum=winserverwsus

Benötigt wird:

  • Das Zertifikat im PFX-Format
  • Das Passwort für das Zertifikat
  • Die CA-Chain in Textform
  • OpenSSL (http://www.heise.de/download/product/win32-openssl-47316/download)

Als erstes „zerlegen“ wir das PFX-File in die benötigten Einzelteile. Am einfachsten geht das, in dem man das Zertifikat mit den OpenSSL-Binaries in einen Ordner legt, z.B. C:\OpenSSL-Win64\bin. Danach öffnen wir eine Konsole und navigieren mit Ihr zu diesem Pfad. Alternativ kann man auch in dem Zielordner per Shift-Rechtsklick die „Eingabeaufforderung hier öffnen“.

In dem Ordner angekommen, setzen wir als erstes folgenden Befehl ab ([Cert] durch Dateinamen ersetzen):

openssl pkcs12 -in [Cert].pfx -clcerts -nokeys -out [Cert].cer

Damit haben wir das reine Zertifikat. Mit dem nächsten Befehl…:

openssl pkcs12 -in [Cert].pfx -nocerts -nodes  -out [Cert].key

haben wir dann auch noch das passende Keyfile. Beide Dateien öffnen wir nun am besten mit WordPad oder Notepad++ (Editor kann die Zeilenumbrüche nicht interpretieren). Im Header beider Files stehen ein paar Infos zum Zertifikat (Bag Attributes), die uns aber nicht interessieren. Wir kopieren nun aus dem .cer-File folgenden Inhalt…:

-----BEGIN CERTIFICATE-----
[Zeichenfolge]
-----END CERTIFICATE-----

und fügen diesen in ISPConfig unter Webseiten -> Webseite -> [Seitenname] -> Reiter „SSL“ -> Textbox „SSL-Zertifikat“ ein.

Anschließend nehmen wir das .key-File, öffnen es ebenfalls mit einem Texteditor und kopieren folgenden Block:

-----BEGIN PRIVATE KEY-----
[Zeichenfolge]
-----END PRIVATE KEY-----

in die Textbox „SSL-Key“ rein.

Nun muss nur noch die CA-Chain ebenfalls inklusive der Begin- und End-Markierungen in des Textfeld „SSL-Bundle“ eingefügt werden. Hier kann es auch passieren, dass der Text aus mehreren Begins und Ends besteht:

-----BEGIN CERTIFICATE-----
[Zeichenfolge]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Zeichenfolge]
-----END CERTIFICATE-----

Abschließend muss noch das Feld „SSL-Aktion“ auf Zertifikat speichern gesetzt werden. Die restlichen Felder müssen nicht ausgefüllt werden, diese wären nur für die Beantragung eines Zertifikats wichtig. Nach dem Klick auf Speichern sollte das Zertifikat nach kurzer Zeit sichtbar werden.

Man darf allerdings nicht den Haken „SSL“ bei den allgemeinen Domain-Einstellungen vergessen. Ohne diesen reagiert die Seite nicht auf SSL-Anfragen.

Um den vollen Funktionsumfang aller Exchange-Dienste ausnutzen zu können, müssen alle Namen, sowohl intern als auch extern, mit einem oder mehreren Zertifikaten abgedeckt werden. Nun hat man zwei Möglichkeiten, das ganze zu bewerkstelligen:

  1. Verwendung von zwei unterschiedlichen Zertifikaten: Eins ausgestellt von der internen CA zur Abdeckung aller internen URLs und eins ausgestellt von einem Zertifikatsanbieter Ihrer Wahl zur Abdeckung der externen URLs.
  2. Umstellung der internen URLs auf die externen, um anschließend im internen DNS die öffentlichen URLs zusätzlich zu pflegen, allerdings unter Verwendung von internen IPs. Hier wird dann nur ein Zertifikat benötigt.

Die bisherige dritte Möglichkeit, nämlich sowohl lokale als auch öffentliche URLs in ein Zertifikat zu packen, wird ab dem 1. November 2015 nicht mehr unterstützt. Für mehr Informationen hierzu klicken Sie bitte auf folgenden Link: https://www.icann.org/en/system/files/files/sac-057-en.pdf

Die zweite Möglichkeit werden wir nun durchführen. Hierfür müssen wir allerdings einige Befehle in der Exchange Management Shell absetzen. Diese lauten wie folgt:

Set-ClientAccessServer -Identity <HostName> -AutodiscoverServiceInternalUri https://mail.example.de/autodiscover/autodiscover.xml

Set-WebServicesVirtualDirectory -Identity "<HostName>\EWS (Default Web Site)" -InternalUrl https://mail.example.de/ews/exchange.asmx

Set-OABVirtualDirectory -Identity "<HostName>\oab (Default Web Site)" -InternalUrl https://mail.example.de/oab

Set-ActiveSyncVirtualDirectory -Identity "<HostName>\Microsoft-Server-ActiveSync (Default Web Site)" -InternalUrl https://mail.example.de/Microsoft-Server-ActiveSync

Set-OWAVirtualDirectory -Identity "<HostName>\owa (Default Web Site)" -InternalUrl https://mail.example.de/owa

Set-ECPVirtualDirectory -Identity "<HostName>\ecp (Default Web Site)" -InternalUrl https://mail.example.de/ecp

Optional (kann zuvor über Get-OutlookAnywhere getestet werden):

Set-OutlookAnywhere -Identity "<HostName>\Rpc (Default Web Site)" -InternalHostname  -InternalClientsRequireSsl $true

Im Anschluss daran muss man den IIS Application Pool recyclen, damit die Änderungen wirksam werden. Hierfür muss der IIS Manager geöffnet werden. Darin angekommen, klicken wir unter Application Pools auf den MSExchangeAutodiscoverAppPool und anschließend auf Recycle. Sobald dies erledigt ist, sind die Einstellungen übernommen und die Clients ziehen sich bei der nächsten Autodiscover-Abfrage die neuen URLs.

Um im ADFS 3.0 ein Zertifikat zu erneuern, muss folgendes getan werden:

  1. Über MMC das neue Zertifikat importieren – ACHTUNG: Es sollte ein Zertifikat mit Private Keys sein
  2. Über All Tasks -> Manage Private Keys… folgende Berechtigungen hinzufügen:
    [Service-Account] – READ
    NT SERVICE\adfssrv – READ
    NT SERVICE\drs – READ
  3. Über das ADFS Management -> Service -> Certificates das neue Zertifikat einspielen. Dies geht über Set Service Communications Certificate.
    Sollte das Zertifikat hier nicht auftauchen, so hat es entweder keine Private Keys oder die Berechtigungen fehlen.
  4. Folgenden PowerShell-Befehl absetzen um den Thumbprint des neuen Zertifikats herauszufinden: 
    Get-ChildItem Cert: -Recurse |
         ? { $_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] }
  5. Anschließend diesen Befehl absetzen, um das alte Zertifikat durch das neue zu ersetzen: 
    Import-Module ADFS
    Set-AdfsSslCertificate -Thumbprint [Thumbprint des neuen Zertifikats]