Exchange 2010, víc AD sajt, CAS serverů a wildcard certifikát

Včera jsem se zase dostal k zamotané záležitosti. Firma má pobočku v Čechách a na Slovensku, tj. dvě AD sajty propojené VPN. V české sajtě je jeden Exchange Server 2010 s HT, CAS a MBX rolí. Na Slovensku byl Exchange 2003, který byl nedávno nahrazen taktéž Exchange Serverem 2010 s HT, CAS a MBX rolí. A od té doby začaly záhadné problémy slovenských uživatelů, kterým se rekonfigurovaly Outlooky, objevovalo se hlášení, že název certifikátu neodpovídá názvu serveru proxy atd.

Pro úplnost ještě dodám, že existuje i maďarská pobočka, ve které ale žádný Exchange server není a uživatelé přistupují k českému Exchange serveru. První problém s rekonfigurací se objevil u obchodníka, který odcestoval ze Slovenska do Maďarska a pracoval tam chvíli na jejich lokální síti. V tomto případě bych pochopil, že došlo k rekonfiguraci Outlooku, Maďarsko je připojené VPN do Čech, Slovensko také, přímé propojení mezi Maďarskem a Slovenskem není. Tak jsem si říkal, dobrá, zvolil se “nejbližší” CAS server a dochází k redirektu. No jo, jenže problémy se začaly objevovat i u necestovatelů s desktop PC.

Zjistil jsem, že v české pobočce byl nasazen RapidSSL wildcard certifikát (tedy *.firma.cz), zatímco slovenská pobočka používala certifikát od interní CA s názvem mail.firma.sk. Bylo to poprvé, kdy jsem se se skutečným nasazením wildcard certifikátu setkal, takže jsem začal shánět podrobnější dokumentaci. Našel jsem tento blog, který vysvětluje, kdy a proč modifikovat OutlookProvider. Musel jsem si ten článek přečíst několikrát, abych pochopil, co se stalo.

Během nasazení wildcard certifikátu se automaticky provedl tento příkaz:
Set-OutlookProvider EXPR -CertPrincipalName msstd:*.firma.cz

Tohle je sice správně pro to, aby se Outlook českých uživatelů připojoval pouze k serveru, který v názvu certifikátu nabídne tento název, ale problém je v tom, že OutlookProvider je org-wide nastavení, nikoliv server-wide nastavení. Takže tohle bylo důvodem, proč se lidem na Slovensku přepisovalo toto nastavení v konfiguraci Outlooku a následně se zobrazovala chybová hláška, že název certifikátu neodpovídá názvu proxy serveru, protože *.firma.cz vskutku neodpovídá serveru mail.firma.sk.

Microsoft tak evidentně počítal s takovou architekturou, kdy lze použít wildcard certifikát, ale ten pak musí být nasazen na všech CAS serverech napříč celou organizací. To je dost podstatné u organizací rozprostírajících se přes více zemí.

Jak si zkontrolovat aktuální nastavení Exchange organizace? Dle výše uvedeného blogu jsou hodnoty Server a CertPrincName standardně vyplněné hodnotou $null. V takovém případě klient obdrží nejlepší CAS server (vztaženo k místu, kde je umístěn jeho mailbox).

Get-OutlookProvider EXPR

Name                          Server                        CertPrincipalName             TTL
----                          ------                        -----------------             ---
EXPR                                                                                      1

TTL ukazuje standardní dobu 1 hodiny, po které si Outlook preventivně znovu vyvolá Exchange Autodiscover proces.

K čemu je dobrý parametr Server? Kupříkladu k situaci, kdy bych chtěl silou docílit toho, aby všichni uživatelé s Outlook Anywhere šli přes jeden vybraný CAS server.

A teď důležitý parametr CertPrincipalName. Jak jsem již psal, standardně má hodnotu $null, tj. volí se dynamicky externí FQDN název konkrétního vybraného CAS serveru. Pokud tedy nepoužíváte wildcard certifikát, nedoporučuje se do toho vůbec drbat. Externí jména všech CAS serverů lze získat třeba takto:
Get-OutlookAnywhere | fl Server,ExternalHostname

V případě wildcard certifikátu (který musí být následně nasazen na všech CAS serverech – viz výše) se již v průběhu jeho vystavování automaticky nastavuje:
Set-OutlookProvider EXPR -CertPrincipalName msstd:*.firma.cz

Našel jsem pár blogů, na kterých byly zmíněny problémy v případě použití SAN certifikátů, kdy první jméno neodpovídalo externímu názvu CAS serveru. V takovém případě bylo nutné nastavit –CertPrincipalName na první CommonName, které certifikát uváděl. Pokud mám jeden CAS server, tak je to v pohodě, ale v případě více CAS serverů bych tedy raději ponechal hodnotu $null a raději vyměnil certifikát.

Tak jo, umím ovlivnit chování Service Discovery v případě wildcard certifikátu, vím, jak to vrátit zpátky (nastavit znovu na $null). Ale co kdybych chtěl zakázat Outlooku porovnávat certifikát? Tj. chtěl bych v konfiguraci Outlooku nazvané Exchange Proxy Settings odškrtnout položku “Připojovat se pouze k serverům proxy, které mají ve svém certifikátu tento zaregistrovaný název:”? K tomu slouží nepříliš dokumentovaná hodnota “none”, která je naštěstí dobře popsaná zde.

Set-OutlookProvider EXPR -CertPrincipalName None

Konfigurace Outlooku pak vypadá takto:

Outlook_msstd

Outlook se pak připojí k jakémukoliv certifikátu, který mu server nabídne, což samozřejmě není bezpečné a mělo by být používáno s rozumem pouze dočasně.

Zobrazit komentáře