Dalším klasickým problémem při Web Server Publishing přes TMG (Threat Management Gateway 2010) je publikace Outlook Anywhere (dříve RPCoverHTTP/S). Nejsložitější je rozjet to tak, abyste dosáhli Single Sign On (SSO), aby tedy uživatelé, kteří pracují pod svým doménovým účtem už nemuseli podruhé zadávat heslo při spuštění Outlooku. Je to složité, takže to většinou skončí tím, že se prostě smíříte s tím, že se bude muset zadat heslo.
Ale jde to bez zadávání, mám tu zrovna virtuální prostředí z konference, tak to hurá na to. Rozjedeme to komplet včetně technologie Autodiscover. Upozorňuju, že ani Outlook 2010 neumí tento přístup s čipovou kartou. Soudruzi z jůesej zřejmě trošku zaspali dobu :-)
Pro jistotu malý obrázek našeho scénáře:
Hned na začátek řeknu jednu důležitou podmínku. Jesliže publikujete současně OWA i Outlook Anywhere, tak budete potřebovat na TMG minimálně dvě IP adresy na internetové síťovce. OWA a Outlook Anywhere potřebují každý jinou přihlašovací metodu a to s jedním Web Listnerem neuděláte.
Příprava Exchange 2007/2010 CAS serveru
Nejprve je potřeba nastavit korektně Exchange samotný. Client Access Server (CAS) obsahuje několik IIS virtuálních adresářů (virtual directory), které nás v tomto případě zajímají z pohledu OutlookAnywhere technologie:
- Rpc - adresář RPCoverHTTP služby, do kterého se budou připojovat klienti, aby se podívali do svého mailboxu
- Oab - zkratka z Offline Address Book, tedy seznam kontaktů, který si Outlook stahuje, aby bylo komu posílat maily
- Ews - zkratka z Exchange Web Services, což pro klienty představuje hlavně Free-Busy Schedule, tedy možnost dozvědět se, kdy je který uživatel zaneprázdněn v případě, že s ním plánujete schůzku.
- Autodiscover - toto je adresář technologie, která s Outlook Anywhere přímo nesouvisí, ale stejně to chceme mít v pořádku. Pokud otevřete autodiscover, klienti Outlook i případně ActiveSync se jednoduše sami nakonfigurují a nebudete muset sami zadávat žádné parametry připojení. Kromě své emailové adresy a hesla (ale to jen při úplně prvním vytváření Outlook profilu).
Pro všechny tyto adresáře potřebujeme SSO. Znamená to tedy, že jim musíme zapnout NTLM ověřování. Nemůžeme použít ověřování Negotiate, protože to nefunguje, pakliže jsou klienti mimo doménovou síť. Což je přávě případ Outlook Anywhere, že :-)
Druhá věc, kterou musíme správně nastavit, jsou veřejná jména, která budou klienti používat. Budou zřejmě dvě. Něco jako:
- oa.gopas.cz - pro přístup Outlook Anywhere. Pokud chcete publikovat ještě současně i OWA, vymyslete si pro obě technologie dvě různá jména. Já používám obvykle mail.gopas.cz pro OWA a potom třeba právě oa.gopas.cz pro Outlook Anywhere.
- autodiscover.gopas.cz - na tomto jméně bude přístupný autodiscover. Ono to lze udělat i pomocí SRV záznamu v DNS, ale to některé mobily nedokážou, například iPhone, zřejmě zase soudruzi ovocnáři někde udělali chybu.
Třetí věc, kterou byste už měli vědět teď, je že budete potřebovat k oběma jménům TLS Server Authentication certifikát, který bude na TMG. Kupte si veřejný za pár korun a buď si kupte dva, pro každé jméno jeden, nebo můžete mít jen jeden s více jmény v políčku Subject Alternative Name (SAN). Jmen se tam hodí ještě více, například právě pro OWA, nebo SMTP. Já si tedy obvykle kvůli Exchange kupuji jména:
mail.gopas.cz
oa.gopas.cz
autodiscover.gopas.cz
smtp.gopas.cz
V případě certifikátu bych doporučoval vyhnout se hvězdičkovým certifikátům (wildcard certificate) typu . Některé mobily, dokonce ještě dnes, s tím mají problémy a takovým certifikátům nevěří. Do pole Subject certifikátu s více jmény bych dal to jméno, které budou používat právě mobily. Opět je fakt, že některé telefony prostě neumí použít pole SAN a dívají se jen do Subject.
Tyto tři věci je potřeba nastavit na Exchange, navíc pomocí PowerShellu. Následující skript to provede, jediné co musíte upravit jsou jména. Tedy přesněji, tento skript to provede korektně v případě, že máte jen jeden CAS server (nebo NLB cluster). Pokud jich máte více, musíte si to upravit podle svých potřeb. V proměnné $certPrincipalName je jméno, které je v certifikátu, tu jsem dal právě hvězdičkové jméno, abych to trošku odlišil.
$rpcFQDN = 'mail.sevecek.com'
$autodiscoFQDN = 'autodiscover.sevecek.com'
$certPrincipalName = '*.sevecek.com'
Get-AutodiscoverVirtualDirectory | Set-AutodiscoverVirtualDirectory `
-ExternalURL 'https://autodiscover.sevecek.com/Autodiscover' `
-WindowsAuthentication $true
Get-OABVirtualDirectory | Set-OABVirtualDirectory `
-ExternalURL 'https://$rpcFQDN/OAB' `
-WindowsAuthentication $true
Get-WebServicesVirtualDirectory | Set-WebServicesVirtualDirectory `
-ExternalURL 'https://$rpcFQDN/EWS/Exchange.asmx' `
-WindowsAuthentication $true
Enable-OutlookAnywhere `
-ClientAuthenticationMethod NTLM `
-ExternalHostname $rpcFQDN `
-IISAuthenticationMethod NTLM `
-SSLOffloading $false
Set-OutlookProvider `
-Identity EXPR `
-CertPrincipalName 'msstd:$certPrincipalName'
Samotný certifikát pro Exchange CAS server tento skript nenastavuje. Jaký si dáte certifikát na samotný CAS je jedno. Já tam dávám vnitřní, kterému věří TMG, takže nějaký ve stylu dcex.ad.gopas.local apod. Nebo si tam samozřejmě dejte ten veřejný, který jste si koupili. Ten musí být na TMG, ale vzadu na CAS je to jedno. Podstatné je jméno, které je v certifikátu, protože to budete muset později dát na TMG do Web Server Publishing pravidla na záložce To.
Místo příkazu Enable-OutlookAnywhere, pokud ho už povolený máte, můžete použít toto:
Get-OutlookAnywhere | Set-OutlookAnywhere `
-ClientAuthenticationMethod NTLM `
-ExternalHostname $rpcFQDN `
-IISAuthenticationMethod NTLM `
-SSLOffloading $false
A Exchange je připraven.
Příprava uživatelských účtů a Kerberos Constrained Delegation
Vaše Active Directory doména se nejspíš nejmenuje stejně, jako vaše veřejná emailová doména. Můžete mít například Active Directory pojmenovanou ad.gopas.cz, nebo gopas.local, zatímco emaily na adrese @gopas.cz. Je pohodlné potom změnit uživatelským účtům loginy tak, aby se lidi mohli přihlašovat rovnou svou emailovou adresou. Viz. obrázky:
V prvním obrázku se pomocí konzole Active Directory Domains and Trusts přidá Alternative UPN Suffix. V druhém obrázku vidíte, jak se to potom použije ve vlastnostech uživatelských účtů. Výsledek je na dalších dvou obrázcích - autodiscover potom nebude znovu otravovat se zadáváním loginu.
Jako další krok musíte povolit Kerberos Constrained Delegation (přesněji řečeno přímo Protocol Transition) pro účet vašeho TMG serveru tak, aby on mohl delegovat dozadu na Exchange CAS server. Na obrázku vidíte, že můj testovací TMG má účet TMG1 a zadní Exchange server je DCEX1. Upozorňuju, že musíte vybrat tu volbu Use any authentication protocol.
A teď ještě restartujte TMG. Ta delegace se bez restartu neprojeví.
Poznámky k nastavení na TMG
Na TMG musíte nejprve založit správný TLS/SSL Web Listener. Bude muset poslouchat na jiné internetové IP adrese, než máte Web Listener pro OWA, protože budete používat jinou autentizační metodu. Dejte tam správný certifikát a vyberte HTTP Authentication s Integrated volbou.
Na TMG dále použijete normálního publikačního průvodce pro Publish Exchange Web Client Access. Vyberete si tam Outlook Anywhere. Až to pravidlo budete mít hotové, vlezte do jeho vlastností a bez ohledu na to, co je už nastaveno na záložce Paths, tam dejte to co vidíte na následujícím obrázku:
A na záložce Authentication Delegation musíte vybrat Kerberos Constrained Delegation a dolů vložit správné SPN, které odpovídá jménu CAS serveru, které má jeho účet v Active Directory.
Na záložce To musíte mít především jméno CAS serveru, které je v jeho SSL certifikátu. Jak jsem říkal, já tam dávám vnitřní, takže se jméno shoduje. Ale pokud byste tam dali přímo ten stejný veřejný certifikát, jako máte na TMG, musíte tam také zadat jedno z jmen, které jsou v tom veřejném certifikátu. Tím pádem také budete muset nejspíš zadat ručně vnitřní IP adresu do druhé kolonky, jak je vidět na druhém obrázku.
Poslední obrázek je už jen pro pořádek, je tam jenom to veřejné jméno, které budou klienti zadávat do Outlooku, a které jste zadávali do Exchange pomocí toho PowerShell skriptu.
No a nakonec ještě udělejme pravidlo pro Autodiscover. Udělejte si prostě kopii tohoto předchozího pravidla a změňte jenom záložku Paths a Public Name tak, jak je na následujících dvou obrázcích. Zbytek se nemění.
Testování a ladění
Pokud chcete z venku tyto přístupy testovat, nemůžete jen tak použít Internet Explorer. On totiž chce ve výchozím stavu používat Negotiate ověřování a to, jak jsem již říkal, z venku nefunguje. Musíte tedy vypnout Negotiate pomocí jeho Internet Options, tabulky Advanced a volby Enable Integrated Windows Authentication. Musíte to vypnout. Tím přepnete IE aby používalo NTLM a potom můžete zkoušet.
- Rpc adresář - vyzkoušíte tak, že si do prohlížeče zadáte adresu https://oa.gopas.cz/rpc/rpcproxy.dll. Musí to chtít ověřit a potom se sice zobrazí chyba. Ale můžete to ověřit na TMG v logu.
- Oab adresář - vyzkoušíte tak, že se pokusíte stáhnout OAB.XML, které je v adresáři https://oa.gopas.cz/oab/{guid-guid-guid-guid}/oab.xml. To by mělo jít normálně stáhnout po zadání přihlašovacích údajů.
- Ews adresář - vyzkoušíte tak, že dostanete popis XML webové služby v jazyku WSDL na adrese https://oa.gopas.cz/ews/Exchange.asmx.
- Autodiscover - na to máte tady můj testovací skript, nebo můžete použít rovnou Outlook.
Všechny testy musí fungovat bez jakékoliv certifikátové chyby a musí to chtít ověřit uživatele - nebo (když to projde samo) to alespoň musí být vidět na TMG, že tyto přístupy byly ověřeny pod příslušným uživatelským účtem.
Jen pro pořádek ještě uvedu nastavení profilu v Outlooku. Mělo by se to nastavit samo pomocí služby Autodiscover, ale pro jistotu, kdyby něco nejelo:
A tak hurá na to! Když tohle rozjedete, Outlook se vás na nic ptát nebude a rovnou se připojí!