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:

Server 2012 R2: Webanwendungsproxy mit Exchange 2013

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:

Multi-Faktor-Authentifizierung für Exchange OWA & ECP

Darauf aufbauend veröffentlichte ich einen Beitrag darüber, wie internes SSO eingerichtet wird:

ADFS SSO Exchange 2013 SP1 (intern)

Ein Jahr später Zertifikatserneuerung im ADFS:

ADFS, Exchange & WAP – 1 Jahr nach der Installation

Es folgte die Möglichkeit der Kennwortänderung über ADFS:

Server 2012 R2: Passwortänderung über ADFS

Anschließend habe ich aufgezeigt, wie die Migration des WAP-Servers funktioniert:

WAP: Migration auf Server 2016 Teil1 (WAP-Server)

Und darauf folgend die des ADFS-Servers:

WAP: Migration auf Server 2016 Teil 2 (ADFS-Migration)

Festgestellte Probleme mit Android wurden behoben:

Web Application Proxy, Android & SNI Support

Anschließend die Microsoft Authenticator App mit On-Premise-Lösung implementiert ( einfach super :) )

MFA mit Microsoft Authenticator App für Outlook Web App

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.

 Haltet den Fingerabdruck eures verwendeten Zertifikats bereit ;)

 

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)
Das Zertifikat muss auf allen Exchange Servern in „Vertrauenswürdige Stammzertifizierungsstellen“ importiert werden!

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!