Autodiscover und SCP

Die erste Exchange 2007 oder neuer  Installation im Forest veröffentlicht einen "Service Connection Point" im Active Directory und wenn Outlook 2007 oder Neuer eingesetzt wird, dann findet Outlook diesen Eintrag und versucht diesen auch zu nutzen. Diese Seite beschreibt die Hintergründe des "Service Connection Point"

Nach meinem Kenntnisstand ist Outlook der einzige Client, der sich um den Service Connection Point interessiert. Alle anderen Clients nutzen Autodiscover und DNS

Die Server-Seite

Outlook 2007 kennt ein neues Verfahrung, um sich automatisch zu konfigurieren. Dazu muss aber Exchange 2007 die entsprechenden Daten beisteuern. Diese Arbeit übernimmt die Client Access Rolle, welche bei der Installation schon automatisch auf dem IIS ein neues virtuelles Verzeichnis "Autodiscover" anlegt und bereit stellt.

Outlook2007 Autodiscover

Weitere Informationen zu diesem virtuellen Verzeichnis erhalten Sie wieder über die PowerShell: für jedes "Autodiscover Virtual Directory" gibt es einen entsprechenden Eintrag

Get-AutodiscoverVirtualDirectory

Outlook Autodiscover

Wenn Sie genau hinschauen, dann sehen Sie hier sehr wohl Parameter wie "InternalURL" und "ExternalURL". Diese sind per Default "leer" und das ist auch normal. Sie werden nach meinem Wissen gar nicht genutzt, denn die Clients fragen von extern immer nach "autodiscover.<maildomain>". Wenn Sie schon eine Verbindung zum Exchange Server gefunden hätte, dann wäre das Lesen dieser Eigenschaften sicher das am wenigsten sinnvolle Vorgehen:

„So as you can see everything is working fine without setting the InternalURL or ExternalURL on the Autodiscover Virtual Directory.  Now that we have established, and proved by testing, that it is not needed let’s answer the burning question about why it’s actually there.”
Busting The Set-AutodiscoverVirtualDirectory Myth  http://blogs.technet.com/b/rmilne/archive/2013/04/02/busting-the-set-autodiscovervirtualdirectory-myth.aspx

Interessanter ist aber der Eintrag für AutoDiscoverServiceInternalUri". Der hat sehr wohl eine Funktion da dieser Wert auch per LDAP von internen Clients ausgelesen wird. Wenn ein Outlook Client eine Verbindung zu einem Domaincontroller hat, dann nutzt er die hier eingetragene URI, um die weitere Autodiscover-Abfrage auszuführen:

Get-ClientAccessServer | fl
PS1 Client Access
Hier ist besonders die "AutoDiscoverServiceGuid interessant

Hier steht in der Regel der FQDN des Servers selbst drin. Wenn Sie einen Exchange Server installieren und ein Zertifikat für seinen Rechnernamen eingespielt haben, dann passt dies auch. Wenn Sie natürlich die mehrere Exchange Server über einen Loadbalancer erreichbar machen, dann können Sie diesen Wert anpassen.

Seit Exchange 2013 ist jede CAS-Rolle nur noch "Reverse Proxy". Der Client geht zum CAS-Rolle, die dann aber den Postfachserver des Benutzers abfragt. Die Postfachrolle ist also der aktive Teil bei Autodiscover unter Exchange 2013 und neuer.

Autodiscover und SCP

Das ist aber nur der erste Schritt. Damit die Clients überhaupt wissen, wo Sie nach diesem Webservice fragen müssen, veröffentlicht Exchange auch im Active Directory einen so genannten "Service Connection Point. Man kann diese Objekte recht einfach über eine Suche im AD und dem Filter "(objectclass=serviceconnectionpoint)" finden.

Autodiscover

Sie können die Werte mit CSVDE einfach exportieren. (Bitte ihre Active Directory Domain verwenden und die Zeilenumbrüche entfernen)

csvde 
   -r "(&(objectclass=serviceconnectionpoint)
         (|(keywords=77378F46-2C66-4aa9-A6A6-3E7A48B19596)
           (keywords="67661d7F-8FC4-4fa7-BFAC-E1D7794C1F68")
         )
       )"
   -l "dn,serviceBindingInformation,keywords"
   -d "cn=configuration,dc=msxfaq,dc=de"
   -f auto.csv
   -t 3268

Wenn Sie den Filter auf die Keywords weglassen, dann ist die Ausgabe etwas "umfangreicher", weil es natürlich verschiedene SCPs gibt:

DN,serviceBindingInformation,keywords
"CN=ABCHContactService,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",
   http://pvt-contacts.msn.com/abservice/abservice.asmx,
"CN=DomainPartnerManageDelegation,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",
   https://domains.live.com/service/managedelegation.asmx,
"CN=DomainPartnerManageDelegation2,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",
   https://domains.live.com/service/managedelegation2.asmx,
"CN=LiveFederationMetadata,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",
   https://nexus.passport.com/FederationMetadata/2006-12/FederationMetadata.xml,
"CN=LiveGetUserRealm,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",https://login.live.com/GetUserRealm.srf,
"CN=LiveServiceLogin2,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",https://login.live.com/RST2.srf,
"CN=Microsoft Exchange Online,CN=Microsoft Exchange Autodiscover,CN=Services,CN=Configuration,DC=E2010,DC=local",*.outlook.com,D3614C7C-D214-4F1F-BD4C-00D91C67F93F
"CN=W2K8R2E2010,CN=Autodiscover,CN=Protocols,CN=W2K8R2E2010,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,
   CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",
   https://W2K8R2E2010.E2010.local/Autodiscover/Autodiscover.xml,Site=Default-First-Site-Name;77378F46-2C66-4aa9-A6A6-3E7A48B19596
"CN=MsoFederationMetadata,CN=ServiceEndpoints,CN=E2010Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E2010,DC=local",
   https://nexus.microsoftonline-p.com/FederationMetadata/2006-12/FederationMetadata.xml,
"CN=RTC Service,CN=Services,CN=Configuration,DC=E2010,DC=local",,83DF614F-9B36-465a-B861-EDEBD9C28A46;83C29870-1DFC-11D3-A193-0000F87A9099

Interessant ist hier für Autodiscover der "drittletzte" Eintrag, weil er das richtige "Keyword" enthält:

"77378F46-2C66-4aa9-A6A6-3E7A48B19596"  weist auf URLs hin
"67661d7F-8FC4-4fa7-BFAC-E1D7794C1F68"  weist auf Domains hin
"CN=SRV01,CN=Autodiscover,CN=Protocols,CN=SRV01,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=MSXFAQ,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=msxfaq,DC=de",https://srv01.msxfaq.de/Autodiscover/Autodiscover.xml

Bei mir ist natürlich nur ein Server in der Liste enthalten. Aber auch dieser Punkt alleine "reicht" nicht, da aus dem Internet das Active Directory kaum zu erreichen ist. Aus diesem Grund versucht Outlook 2007 auch noch anhängig von der Mailadresse des Benutzers die folgenden URLs zu erreichen. Wenn ich dies also für user@firma.tld machen würde, dann fragt Outlook 2007 nach:

  • https://autodiscover.firma.tld/autodiscover.xml
  • https://autodiscover.firma.tld/autodiscover/autodiscover.xml

Damit dies also funktioniert, muss der Hostname "autodiscover" auflösbar sein.

Ich habe bislang noch nicht gesehen, dass Exchange oder das Setup alleine den entsprechenden Eintrag im DNS anlegt. Hier sind Sie also als Administrator gefordert, einen entsprechenden Eintrag in den jeweiligen DNS-Zonen vorzunehmen.

Zudem muss dieser ein SSL-Zertifikat haben.

Sie müssen nicht unbedingt ein offizielles Zertifikat für Autodiscover einsetzen.
Man kann durch Weglassen des "-generateRequest" auch ein selbstsigniertes Zertifikat erstellen, was intern vollkommen ausreichend ist. (Siehe auch E2K7: Zertifikate)

Autodiscover ist aber nicht nur für Exchange von Belang, sondern kann generell genutzt werden, um Outlook 2007 über eine XML-Datei zu steuern.

Autodiscovery A local xml file on the client für example and a regkey
http://office.microsoft.com/download/afile.aspx?AssetID=AM102105061033
Sehr ausführliches Dokument mit einer Beschreibung, wie Outlook die XML-Datei interpretiert und wie diese Funktion auch fürPOP3, IMAP4 und SMTP ohne Exchange genutzt werden kann, z.B.: durch eine lokale XML-Datei und einem entsprechenden Eintrag in der Registrierung.

Autodiscover ist daher auch  für Internetprovider und Firmen ohne Exchange eine nützliche Funktion.

Autodiscover anpassen

Es steht nirgendwo fest zementiert, dass Namen der Server in ihrer Umgebung nicht verändern dürfen. Teilweise müssen Sie Autodiscover sogar anpassen, um in ihrer Umgebung die Funktion zu gewährleisten. Speziell wenn Sie den Namen des Serverzertifikats auf dem Exchange Server ersetzen, dann kann auch die Verbindung über den Service Connection Point (SCP) gestört sein. Daher gibt es zwei PowerShell Kommandos, mit denen Sie Exchange auf die veränderten Umgebungsbedingungen einstellen können.

Get-ClientAccessServer | fl aut*

AutoDiscoverServiceCN          : SRV01
AutoDiscoverServiceClassName   : ms-Exchange-AutoDiscover-Service
AutoDiscoverServiceInternalUri : https://srv01.msxfaq.de/Autodiscover/Autodiscover.xml
AutoDiscoverServiceGuid        : 78f73746-2c66-a4a9-6aa6-5963e7a48b19
AutoDiscoverSiteScope          : {Paderborn}
  • Set-AutodiscoverVirtualDirectory
    http://technet.microsoft.com/en-us/library/aa998601.aspx
    Hiermit können Sie für jedes der einzelnen virtuellen Autodiscover-Verzeichnisse abweichende URLs für intern und extern konfigurieren. Dies ist wieder relevant, wenn Sie die CASProxy-Funktion anpassen wollen. (Die Werte für "InternalURL" und "ExternalURL" sind normalerweise leer.
Get-AutodiscoverVirtualDirectory | fl

Name                          : Autodiscover (Default Web Site)
InternalAuthenticationMethods : {Basic, Ntlm, WindowsIntegrated}
ExternalAuthenticationMethods : {Basic, Ntlm, WindowsIntegrated}
BasicAuthentication           : True
DigestAuthentication          : False
WindowsAuthentication         : True
MetabasePath                  : IIS://srv01.msxfaq.de/W3SVC/1/ROOT/Autodiscover
Path                          : D:\Program Files\Microsoft\Exchange Server\Clie
                                ntAccess\Autodiscover
Server                        : srv01
InternalURL                   : srv01.msxfaq.de/Autodiscover/Autodiscover.xml
ExternalURL                   : autodiscover.msxfaq.de/Autodiscover/Autodiscover.xml
Identity                      : srv01\Autodiscover (Default Web Site)
OriginatingServer             : srv01.msxfaq.de
IsValid                       : True

Wenn Sie also intern z.B. das Zertifikat auf dem CAS-Server auf "Webmail.firma.de" ausstellen, dann wird eine Autodiscover-Anfrage auf "https://servername.firma.local" natürlich daneben gehen. Dann muss man Intern eben auch den SCP umstellen oder Sie verzichten auf den SCP und nutzen die DNS-Einträge, auf die Outlook zurück fällt, wenn eine Verbindung über den Service Connection Point nicht möglich ist.

Autodiscover und AD-Sites

Auch wenn ein Client intern per LDAP die Service Connection Points abfragen kann, so bedeutet dies in größeren Umgebungen, dass der Client doch einen "entfernten" CAS-Server erwischen würde. Auch dafür hat Microsoft gesorgt, indem einem CAS-Server der Scope mitgegeben werden kann, für den er "zuständig" ist.

Wenn Sie einen CAS-Server installieren, dann ermittelt er selbständig anhand seiner IP-Adresse die AD-Site und trägt diese als Scope ein.

Allerdings passiert dies wohl nur beim Setup. Wer als nachträglich die Sites umbenennt oder den Server in eine andere Site verschiebt, sollte diese Einstellungen korrigieren:

Das geht mit dem "Set-ClientAccessServer"-CMDlet

Set-ClientAccessServer AutoDiscoverSiteScope sitename

Wenn ein CAS-Server auch mehrere Sites abdecken soll, dann können Sie dies hier hinterlegen. Sie erkennen dies auch am Service Connection Point.

Oder natürlich über die Abfrage mit "Get-ClientAcccessServer"

Diese Einstellungen sind nur für Clients relevant, die auch per LDAP den SCP suchen und damit den "naheliegenden" CAS-Server ermitteln wollen.

You can use the Shell to configure site affinity für the Autodiscover service on the Microsoft Exchange Server 2010 Client Access server. When you configure site affinity on the Client Access server, you enable clients using Outlook 2007 and Outlook 2010 to get Autodiscover information from the closest Active Directory site. This provides Autodiscover information to the Outlook clients more quickly than if site affinity hasn't been set
Configure the Autodiscover Service to use Site Affinity http://technet.microsoft.com/en-us/library/aa998575.aspx

Autodiscover mit Drittsystemen

Es muss nicht immer ein Exchange Server sein, der auf eine Anfrage per Autodiscover beantwortet. Outlook "versteht" durchaus auch Antworten für IMAP4 und POP3. Entsprechend können Webhoster z.B. auch mit Apache und PHP eine Antwort liefern.

Weitere Links