Hallo Leser,
gefühlt ist es eine halbe Ewigkeit her, dass ich zuletzt etwas gebloggt habe ;) Aufgrund anderer Themen ist der Blog dieses Jahr leider etwas zu kurz gekommen. Heute melde ich mich mit einer Übersicht aller notwendigen Schritte zur sicheren Veröffentlichung von Exchange Server 2016 mit ADFS 4.0 / Server 2016.
Desweiteren möchte ich euch eine Übersicht über alle Artikel geben, die sich mit ADFS beschäftigen.
Im ersten Artikel habe ich sehr ausführlich die Installation / Implementierung mit Exchange Server 2013 beschrieben:
Weiter ging es mit der durch das Exchange 2013 Update auf SP1 (CU 4) möglichen Authentifizierung mittels ADFS-Tokens am Exchange:
Exchange 2013 SP1 und ADFS Authentifizierung (Accept ADFS Claims)
Anschließend habe ich den Zugriff auf OWA / ECP mittels Multi-Faktor-Authentifizierung beschrieben:
Darauf aufbauend veröffentlichte ich einen Beitrag darüber, wie internes SSO eingerichtet wird:
Ein Jahr später Zertifikatserneuerung im ADFS:
Es folgte die Möglichkeit der Kennwortänderung über ADFS:
Anschließend habe ich aufgezeigt, wie die Migration des WAP-Servers funktioniert:
Und darauf folgend die des ADFS-Servers:
Festgestellte Probleme mit Android wurden behoben:
Anschließend die Microsoft Authenticator App mit On-Premise-Lösung implementiert ( einfach super :) )
Zu guter Letzt, im April dieses Jahres, drei Jahre nach Veröffentlichung meines ersten Beitrags zu ADFS, noch dieser Artikel:
Exchange Active Sync über ADFS (HTTP Basic / ADFS for Rich Clients)
Neben der Artikelübersicht möchte ich noch alle Befehle / Scripte beifügen, die zur Veröffentlichung von Exchange über ADFS mit Tokens notwendig sind. Die Befehlsübersicht bezieht sich auf den aktuellen Patchstand sowie ADFS 4.0.
ADFS Serviceaccount erstellen und auf ADFS Server installieren
Bevor der Serviceaccount im AD Angelegt wird, sollte eine Gruppe mit allen ADFS-Servern erstellt werden. Diese nach hinzufügen der Gruppe neu starten!
#<--------------Service Account erstellen--------------------------------># Install-WindowsFeature RSAT-AD-PowerShell Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10)) New-ADServiceAccount -Name ADFS-Service -DNSHostName adfs.asichel.com -PrincipalsAllowedToRetrieveManagedPassword "ADFS-Server" #<--------------Service Account installieren (vorher Server neustarten)--------------------------------># Install-ADServiceAccount "ADFS-Service" Test-ADSErviceAccount "ADFS-Service"
ADFS installieren / konfigurieren (ggf. als Farm)
#<--------------ADFS Service installieren--------------------------------># Install-windowsfeature adfs-federation -IncludeManagementTools Install-AdfsFarm ` -CertificateThumbprint:"FA93CB9EE64FFC0B24AC138354D79D0A493B5205" ` -FederationServiceDisplayName:"ADFS Asichel " ` -FederationServiceName:"adfs.asichel.com" ` -GroupServiceAccountIdentifier:"sichel.loc\ADFS-Service`$" #<--------------ADFS Service konfigurieren--------------------------------># Set-AdfsProperties -EnableIdPInitiatedSignonPage $true Set-AdfsProperties -CertificateDuration 720 Update-ADFSCertificate -CertificateType Token-Signing -Urgent Update-ADFSCertificate -CertificateType Token-Decrypting -Urgent #<--------------ggf. Weiteren Server hinzufügen--------------------------------># Add-AdfsFarmNode -GroupServiceAccountIdentifier sichel.loc\ADFS-Service$ -PrimaryComputerName app1 -CertificateThumbprint FA93CB9EE64FFC0B24AC138354D79D0A493B5205
Web Application Proxy (WAP) Installieren
#<--------------WAP Installieren--------------------------------># Install-WindowsFeature Web-Application-Proxy -IncludeManagementTools Install-WebApplicationProxy -CertificateThumbprint "FA93CB9EE64FFC0B24AC138354D79D0A493B5205" -FederationServiceName "adfs.asichel.com"
Token-Signing Certificate für Exchange exportieren
#<--------------AD FS Token-Signing exportieren--------------------------------># $certRefs=Get-AdfsCertificate -CertificateType Token-Signing $certBytes=$certRefs[0].Certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert) [System.IO.File]::WriteAllBytes("c:\install\adfs-token-signing.cer", $certBytes)
Exchange Authentifizierung auf ADFS setzen
#<--------------Exchange anpassen--------------------------------># $uris = @(" https://mail.asichel.com.com/owa/","https://mail.asichel.com/ecp/") $ADFSSigningCert = "DC24B7C2311CF00CAEDEC08AB4C45F4F46DDB1F5" $ADFSUrl= "https://adfs.asichel.com/adfs/ls/" Set-OrganizationConfig -AdfsIssuer $ADFSUrl -AdfsAudienceUris $uris -AdfsSignCertificateThumbprint $ADFSSigningCert Get-EcpVirtualDirectory | Set-EcpVirtualDirectory -AdfsAuthentication $true -BasicAuthentication $false -DigestAuthentication $false -FormsAuthentication $false -WindowsAuthentication $false Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -AdfsAuthentication $true -BasicAuthentication $false -DigestAuthentication $false -FormsAuthentication $false -WindowsAuthentication $false Restart-Service W3SVC,WAS -noforce
ADFS Relaying Party Trusts erstellen
#<--------------AD FS Party Trust erstellen erstellen--------------------------------># $OWA = "https://mail.asichel.com/owa/" $ECP = "https://mail.asichel.com/ecp/" $AusstellerRegel=@' @RuleTemplate = "AllowAllAuthzRule" => issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true"); '@ $AnspruchsRegel=@' @RuleName = "ActiveDirectoryUserSID" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"), query = ";objectSID;{0}", param = c.Value); @RuleName = "ActiveDirectoryGroupSID" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"), query = ";tokenGroups(SID);{0}", param = c.Value); @RuleName = "ActiveDirectoryUPN" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"), query = ";userPrincipalName;{0}", param = c.Value); '@ Add-ADFSRelyingPartyTrust -Name "Outlook on the Web" -Enabled $true -Notes "Vertrauensstellung für $OWA" -WSFedEndpoint $OWA -Identifier $OWA -IssuanceTransformRules $AnspruchsRegel -IssuanceAuthorizationRules $AusstellerRegel Add-ADFSRelyingPartyTrust -Name "Exchange Systemsteuerung" -Enabled $true -Notes "Vertrauensstellung für $ECP" -WSFedEndpoint $ECP -Identifier $ECP -IssuanceTransformRules $AnspruchsRegel -IssuanceAuthorizationRules $AusstellerRegel #Nur für ADFS Server 2016: Add-AdfsNonClaimsAwareRelyingPartyTrust -Name "Active Sync" -Notes "Vertrauensstellung fuer EAS" -Identifier "https://mail.asichel.com/Microsoft-Server-ActiveSync/" -IssuanceAuthorizationRules '=>issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");' Write-host "ADFS Konfiguration ausgeführt."
WAP Veröffentlichungsregeln erstellen
#<--------------WAP Regeln erstellen (veröffentlichen)--------------------------------># $VerbosePreference = "continue" $ExchangeBaseURL = "mail.asichel.com" $ExternalCertTB = "42A88DDF94C0FD651C0AFCF2A2C15A797FBE942B" $ExchangeAutodiscover ="autodiscover.asichel.com" Write-Verbose "Publish Exchange OAB URL" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/OAB/" -ExternalCertificateThumbprint "$ExternalCertTB" -ExternalUrl "https://$ExchangeBaseURL/OAB/" -Name "Exchange OAB" -ExternalPreAuthentication PassThrough Write-Verbose "Publish Exchange Autodiscover" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeAutodiscover/Autodiscover/" -ExternalCertificateThumbprint "$ExternalCertTB" -ExternalUrl "https://$ExchangeAutodiscover/Autodiscover/" -Name "Exchange Autodiscover" -ExternalPreAuthentication PassThrough Write-Verbose "Publish Exchange MAPI" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/mapi/" -ExternalCertificateThumbprint "$ExternalCertTB" -ExternalUrl "https://$ExchangeBaseURL/mapi/" -Name "Exchange MAPI" -ExternalPreAuthentication PassThrough Write-Verbose "Publish Exchange EWS" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/EWS/" -ExternalCertificateThumbprint "$ExternalCertTB" -ExternalUrl "https://$ExchangeBaseURL/EWS/" -Name "Exchange EWS" -ExternalPreAuthentication PassThrough #Write-Verbose "Publish Exchange ActiveSync" #Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/Microsoft-Server-ActiveSync/" -ExternalCertificateThumbprint "$ExternalCertTB" -ExternalUrl "https://$ExchangeBaseURL/Microsoft-Server-ActiveSync/" -Name "Exchange ActiveSync" -ExternalPreAuthentication PassThrough Write-Verbose "Publish EAS for RichClients" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/Microsoft-Server-ActiveSync/" -ExternalCertificateThumbprint $ExternalCertTB -ExternalUrl "https://$ExchangeBaseURL/Microsoft-Server-ActiveSync/" -Name 'Exchange EAS' -ExternalPreAuthentication ADFSforRichClients -ADFSRelyingPartyName 'Active Sync' Write-Verbose "Publish Exchange RPC" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/RPC/" -ExternalCertificateThumbprint "$ExternalCertTB" -ExternalUrl "https://$ExchangeBaseURL/RPC/" -Name "Exchange RPC" -ExternalPreAuthentication PassThrough Write-Verbose "Publish Outlook on the Web (AD FS)" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/owa/" -ExternalCertificateThumbprint $ExternalCertTB -ExternalUrl "https://$ExchangeBaseURL/owa/" -Name "Outlook on the Web" -ExternalPreAuthentication ADFS -ADFSRelyingPartyName "Outlook on the Web" Write-Verbose "Publish Exchange ECP (AD FS)" Add-WebApplicationProxyApplication -BackendServerUrl "https://$ExchangeBaseURL/ecp/" -ExternalCertificateThumbprint $ExternalCertTB -ExternalUrl "https://$ExchangeBaseURL/ecp/" -Name "Exchange Systemsteuerung" -ExternalPreAuthentication ADFS -ADFSRelyingPartyName "Exchange Systemsteuerung"
Damit habe ich alle notwendigen Schritte getan und Exchange Server 2016 ist mit ADFS veröffentlicht!
Administrativen Gruß aus Bielefeld
Andi
PS: Die nächste EUGO steht in den Startlöchern, in Kürze könnt ihr euch auf „http://www.exchangeusergroupowl.de/“ anmelden!
Besten Dank für die Super Anleitung!
Wie sieht dies bezüglich NAT und Firewall Regeln aus?
Reicht 443 und 80 WAN>DMZ?
Hallo Andi,
vielen Dank für den guten Artikel. Irgendwie wird mir eine Sache mit ADFS noch nicht so ganz klar. Welchen Hintergrund hat das Veröffentlichen der Applikation auf dem WAP? Stelle ich dann den DNS Record für Webmail auf den WAP um?
Danke dir
Marco
Hallo Marco,
ja :)
LG Andi
Super,
vielen Dank für die ausführlichen Blogeinträge rundum ADFS!
:-)