Inhaltsverzeichnis

Autokonfiguration von M$ Outlook

Nun soll es ja auch noch Anwender geben, die die als VSE1) berühmt und berüchtigt verschrieene Software Namens Outlook verwenden. Auch diesem Publikum können wir hilfeich zur Seite stehen.

Ähnlich wie Thunderbird & Co. kann sich Outlook die notwendigen Parameter zur Konfiguration selbst besorgen. Hierzu schickt Outlook über einen HTTP POST request eine Anfrage den zuständigen Webserver, der die Konfiguration ausliefert.

vHOST für Apache einrichten

Auch hier richten wir uns nun als erstes einen vHOST auf unserem Web-Server ein, der die Konfigurationsdatei ausliefern wird. Dazu benötigen wir neben der Konfigurationsdatei ein entsprechendes Verzeichnis, in dem wir diese ablegen. Dieses Verzeichnis legen wir uns nun als erstes an.

 # mkdir -p /var/www/autodiscover/autodiscover

Wie auch schon bei der Konfiguration der Autoconfig bei den OpenSource eMail-Clients, definieren wir nun die notwendige Konfigurationsdatei für unseren vHost im Apache Konfigurationspfad /etc/httpd/conf.d/.

Wichtig ist hier nun, dass hier zwingend eine SSL-verschlüsselung angeboten wird!

 # vim /etc/httpd/conf.d/autodiscover.conf
/etc/httpd/conf.d/autodiscover.conf
#
# host für autodiscover unseres Dovecot für Outlookuser
#
 
<VirtualHost *:443>
        ServerAdmin webmaster@it-ignorant.de
        ServerName autodiscover.nausch.org
 
        # Django
        # Required, because there is a host with same ServerName and
        # ServerAlias LISTENING ON PORT 80, - and if these lines are
        # not present, and .htaccess-Files or LDAP-Access is enabled
        # for one or more Directory the host on PORT 443 and PORT 80
        # will ASK for .htaccess ord LDAP-Access, so please remember
        # ----------------------------------------------------------
        # -- DO NOT DELETE THE FOLLOWING LINES, STARTING WITH SSL --
        # --         WHEN USING .htaccess or LDAP-Access!         --
        # ----------------------------------------------------------
        SSLEngine on
        SSLProtocol -ALL +SSLv3 +TLSv1
        SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
        SSLCertificateFile /etc/pki/tls/private/CAcert-class3-wildcard.crt
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key
        SSLCertificateChainFile /etc/pki/tls/private/CAcert_chain.crt
 
	ServerPath /
        DocumentRoot "/var/www/autodiscover/"
        <Directory "/var/www/autodiscover/">
                Options FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
 
        </Directory>
        AddType application/x-httpd-php .php .php3 .php4 .php5 .xml
        DirectoryIndex index.html
 
        ErrorLog logs/autodiscover_error.log
        CustomLog logs/autodiscover_access.log combined
</VirtualHost>

Bevor wir nun noch unsere Konfigurations scharf schalten, überprüfen wir noch unsere gerade angelegte Konfiguration unseres vHost einer syntaktischen Prüfung.

 # service httpd configtest
 Syntax OK

Da die Prüfung positiv ausfällt, starten wir unseren Webserver einmal durch.

 # service httpd condrestart
 Stopping httpd:                                            [  OK  ]
 Starting httpd:                                            [  OK  ]

DNS-Einträge

Damit der Mailclient über eine DNS-Abfrage unseren neuen vHOST finden kann, sind natürlich ein paar Einträge notwendig.

Outlook macht nun zwei DNS-Anfragen um zu ermitteln, bei welcher Adresse es die Konfigurationsdaten abrufen kann.

  1. SRV (Service) Resource Records
    Als erstes wird eine DNS-Anfrage nach dem zuständigen Autodiscover Server gemacht. Im Fall der Maildomäne it-ignorant.org sieht die Anfrage entsprechend so aus:
     $ dig -t SRV _autodiscover._tcp.it-ignorant.org

    Als Antwort erhalten wir hierzu:

    ;; QUESTION SECTION:
    ;_autodiscover._tcp.it-ignorant.de. IN	SRV
    
    ;; ANSWER SECTION:
    _autodiscover._tcp.it-ignorant.de. 2635	IN SRV	10 0 443 autodiscover.nausch.org.

    Mit 10 0 443 autodiscover.nausch.org hat Outlook nun folgende Informationen:

    • 10 Priorität des angebotenen Dienstes. Hat man mehr als einen Host, der diesen Dienst anbieten soll, kann somit festgelegt werden, welcher Host bevorzugt angesprochen werden sollte.
    • 0 Will man bei gleicher Priorität mehrere Hosts, so kann man für die Lastverteilung über die Gewichtung fefinieren, welcher Host gewählt werden soll.
    • 443 Der Dienst wird über Port 443 angeboten
    • autodiscover.nausch.org Definition des Hostsnamens, der den Dienst anbietet

  2. A_Record
    Nachdem nun Oulook weiß, dass die Konfigurationsdaten beim Host autodiscover.nausch.org zu finden ist, wird nun eine DNS-Anfrage bzgl. der IP-Adresse des Hosts autodiscover.nausch.org gemacht.
    $ dig autodiscover.nausch.org
    ;; QUESTION SECTION:
    ;autodiscover.nausch.org.	IN	A
    
    ;; ANSWER SECTION:
    autodiscover.nausch.org. 2973	IN	A	217.91.103.190

Wir benötigen also für die beiden Fälle jeweils einen entsprechenden Eintrag im DNS.

Für den SRV (Service) Resource Records tragen wir beim zuständigen Nameserver der Maildomäne folgende Daten ein:

 _autodiscover._tcp.it-ignorant.org.    IN      SRV     10 0 443 autodiscover.nausch.org.

Für den ServerName aus unserer vHost-Konfiguration definieren wir dann beim zuständigen Nameserver einen A-Record:

 autodiscover.nausch.org.               IN      A        217.91.103.190

Unsere Konfiguration aktivieren wir dann noch, nachdem wir die serial-Nummer im Configfile entsprechend angepasst haben.

 # rndc reload
 server reload successful

XML-Konfigurationsdatei

Outlook ist nun bekannt, dass die die Konfiguration für die Maildomäne it-ignorant.org beim Webserver autodiscover.nausch.org via Port 443 (also verschlüsselt) abgeholt werden kann. Mit nachfolgendem HTTP POST Request erfolgt nun die eigentliche Abfrage der Konfigurationsdaten:

<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
  <Request>
    <AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
    <EMailAddress>django@nausch.org</EMailAddress>
  </Request>
</Autodiscover>

Als Antwort daraus erhält dann Outlook die betreffenden Konfigurationsdaten.

<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
  <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <User>
      <DisplayName>nausch.org</DisplayName>
    </User>
    <Account>
      <AccountType>email</AccountType>
      <Action>settings</Action>
      <Protocol>
        <Type>IMAP</Type>
        <Server>imap.nausch.org</Server>
        <Port>993</Port>
        <DomainRequired>off</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
        <LoginName>django@nausch.org</LoginName>
      </Protocol>
      <Protocol>
        <Type>SMTP</Type>
        <Server>mx01.nausch.org</Server>
        <Port>465</Port>
        <DomainRequired>off</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
        <LoginName>django@nausch.org</LoginName>
      </Protocol>
    </Account>
  </Response>
</Autodiscover>

Da in der ausgelieferten XML-Datei die angefragte eMailadresse enthalten ist, greifen wir ein wenig in die PHP-Trickkiste um diese automatisiert ausliefern zu können. Hierzu legen wir folgende XML-Datei im Webserverpfad an.

 # vim /var/www/autodiscover/autodiscover/autodiscover.xml
/var/www/autodiscover/autodiscover/autodiscover.xml
<?php
    $score = array();
    $rawdata = file_get_contents('php://input');
    preg_match('/<EMailAddress>(.*)<\/EMailAddress>/', $rawdata, $score);
    header('Content-Type: application/xml');
?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
  <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <User>
      <DisplayName>nausch.org</DisplayName>
    </User>
    <Account>
      <AccountType>email</AccountType>
      <Action>settings</Action>
      <Protocol>
        <Type>IMAP</Type>
        <Server>imap.nausch.org</Server>
        <Port>993</Port>
        <DomainRequired>off</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
        <LoginName><?php echo $score[1]; ?></LoginName>
      </Protocol>
      <Protocol>
        <Type>SMTP</Type>
        <Server>mx01.nausch.org</Server>
        <Port>465</Port>
        <DomainRequired>off</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
        <LoginName><?php echo $score[1]; ?></LoginName>
      </Protocol>
    </Account>
  </Response>
</Autodiscover>

Konfiguration Testen

Nun ist es an der Zeit unsere Konfiguration zu Testen.

openssl

Bevor wir zum Testen unserer Konfiguration mit dem Mailclient Outlook schreiten, überprüfen wir noch selbt kurz auf der Konsole mit openssl ob die XML-Datai mit den richtigen Daten ausgeliefert wird. Wir gehen hierbei wir folt vor:

  1. Verbindung aufbauen
    Mit dem Befehl openssl aus dem gleichnamigen RPM-Paket bauen wir eine verschlüsselte Verbindung zum Webserver auf.
  2. HTTP POST Request
    Am Ende der Zertifikatsmeldungen geben wird dann denn eigentlichen POST Request ein.
    POST /autodiscover/autodiscover.xml HTTP/1.1
    Host: autodiscover.nausch.org
    Content-Length: 351
    Content-Type: application/x-www-form-urlencoded
    
    <?xml version="1.0" encoding="utf-8"?><Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"><Request><AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema><EMailAddress>django@nausch.org</EMailAddress></Request></Autodiscover>
  3. XML-Datei
    Als Ergebnis unserer Anfrage, erhalten wir dann die generierte XML-Datei mit allen relavanten Konfigurationsdaten zur angefragten eMail.
    <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
      <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
        <User>
          <DisplayName>nausch.org</DisplayName>
        </User>
        <Account>
          <AccountType>email</AccountType>
          <Action>settings</Action>
          <Protocol>
            <Type>IMAP</Type>
            <Server>imap.nausch.org</Server>
            <Port>993</Port>
            <DomainRequired>off</DomainRequired>
            <SPA>off</SPA>
            <SSL>on</SSL>
            <AuthRequired>on</AuthRequired>
            <LoginName>django@nausch.org</LoginName>
          </Protocol>
          <Protocol>
            <Type>SMTP</Type>
            <Server>mx01.nausch.org</Server>
            <Port>465</Port>
            <DomainRequired>off</DomainRequired>
            <SPA>off</SPA>
            <SSL>on</SSL>
            <AuthRequired>on</AuthRequired>
            <LoginName>django@nausch.org</LoginName>
          </Protocol>
        </Account>
      </Response>
    </Autodiscover>
  4. Verbindungsende
    Zum Schluß wird die Verbindung zum Server mit einem exit getrennt.

Somit ergibt sich folgende Kommunikation mit unserem Webserver:

 $ openssl s_client -connect autodiscover.nausch.org:443
CONNECTED(00000003)
depth=2 O = Root CA, OU = http://www.cacert.org, CN = CA Cert Signing Authority, emailAddress = support@cacert.org
verify return:1
depth=1 O = CAcert Inc., OU = http://www.CAcert.org, CN = CAcert Class 3 Root
verify return:1
depth=0 CN = *.nausch.org
verify return:1
---
Certificate chain
 0 s:/CN=*.nausch.org
   i:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
 1 s:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEKzCCAhOgAwIBAgIDAR/LMA0GCSqGSIb3DQEBBQUAMFQxFDASBgNVBAoTC0NB
Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTMwNDE1MjAwNTIyWhcNMTUwNDE1
MjAwNTIyWjAXMRUwEwYDVQQDFAwqLm5hdXNjaC5vcmcwgZ8wDQYJKoZIhvcNAQEB
BQADgY0AMIGJAoGBALinLX8PKoHVCKoRJCv5a+ENFhqjcZFRshB1WpqkBcCpyuxo
lOFW8ba01yrT/w5rrsQiebf3MSHpTTeCVfTgNSCt7obAxczkShaaB5WYd2k42z4Z
yLYVWP46h7RBDphd5/2roQVs19lH9R3voqqH7QnCGR66xBMoKgV3GHtbbd6ZAgMB
AAGjgcYwgcMwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCA6gwNAYDVR0lBC0w
KwYIKwYBBQUHAwIGCCsGAQUFBwMBBglghkgBhvhCBAEGCisGAQQBgjcKAwMwMwYI
KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5jYWNlcnQub3Jn
LzA4BgNVHR8EMTAvMC2gK6AphidodHRwOi8vY3JsLmNhY2VydC5vcmcvY2xhc3Mz
LXJldm9rZS5jcmwwDQYJKoZIhvcNAQEFBQADggIBADhw4BVdR6cjPMpg15iZ3CBY
Esr5IEy7NsnbS3qLHkc63o4p9abANDgNgio9JWe6qqq+NlSaxOvAPr0nrW6tlYVr
yyfZUqM91xt5dM5VHd+IhAjdiXhGQrpM4WFLNZ2dpw18VwpIFFpHtD16G+U8sEPT
qhWekJFOiLCffaBXmNloNsipzoXUfhyEmmZh0ge4c/ZEqJq0+KwnAON5fNp9REgj
jgqBZoZc3jOWA6nrgNC8BbjZJx1ayPXKJXYhEdYSv3BsTdJ5wa8/GYVmkkoT7jPo
brFIhf+vOc3w8HuFYUmIUMIno8JYhdr6WHgSH7NfD63tXeG1ioPqYnwh+PeUKvWv
ESx8vW3U2kcKqKIKtp3I3kC4uI4clOvPGW3gkdQz7GZNLsbX13U44j8j7PLgJmxH
gFLuy4WUE0OcIgYkMhyPCgg6/wYSMEGiR9QLfDrXhBZqwsX1dB4G23KqfF0b60uv
fKsw3FDMVQQZpRd8cYphVH/Bd0ytkPqi/xXma7tfVJg/NZvx9YgRB2zX5UsAh0dZ
Cp01cT81Lg8yrD3XkJjMCQt6JLXF7LpkbLfa4rKkl1hIduzU3yrGI4z36HFf3zq/
/vJEIHGOedCJ+IUch+OdmwNczbVn7s8DTtwkQ1OKauWKTEfi8cTUj2VCRDKNJCJZ
c9V9h53jk8abBGZg/u+5
-----END CERTIFICATE-----
subject=/CN=*.nausch.org
issuer=/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
---
No client certificate CA names sent
---
SSL handshake has read 3709 bytes and written 310 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 72A57264FB923756AE8B21045DAA3FFCABDD422BAC8986CFB8B1062B720739EF
    Session-ID-ctx: 
    Master-Key: 512E8C4B3F3785D4FE33051B95586CB8D5F2B79D5B52965FE9FCCDB6616AEF14A73CFE3C0FAD0F4D5CA50FF91247D42F
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket:
    0000 - 55 77 25 b4 f7 49 95 18-61 37 c1 51 29 61 69 75   Uw%..I..a7.Q)aiu
    0010 - ce 02 f0 a3 91 4e 93 ea-fa f4 70 60 88 fd c1 8c   .....N....p`....
    0020 - 86 c2 9a 2e d1 36 e3 28-4c ab 26 04 6c db 67 eb   .....6.(L.&.l.g.
    0030 - 75 49 3a d3 b1 f3 9b a5-b9 41 d4 2a 3c 79 f1 3f   uI:......A.*<y.?
    0040 - f3 47 b1 a9 cc a4 0c ac-5b 7e 56 b0 0b fc ed f7   .G......[~V.....
    0050 - a3 90 41 a0 6c 4b 37 89-ab d2 46 ee 90 79 68 9c   ..A.lK7...F..yh.
    0060 - f8 fa 0b ef 6d e1 7c 86-b2 c8 83 4c d2 47 9d 35   ....m.|....L.G.5
    0070 - f7 3c 98 a3 06 77 c8 5d-6a 09 a2 4c 16 9f fc 7f   .<...w.]j..L....
    0080 - 91 96 60 2c a1 1d 07 50-7f 3f 75 6e ba 4d 09 c6   ..`,...P.?un.M..
    0090 - db b8 4a 0a 0d 7e 5c c9-a5 a3 81 d8 c8 4b 2e fd   ..J..~\......K..
    00a0 - de 85 be 20 8b c6 d6 64-7a 62 ad 51 2c 4a 87 94   ... ...dzb.Q,J..
    00b0 - 9d 18 48 8c 16 f3 5c c1-b7 d0 2e 76 c8 b7 f4 82   ..H...\....v....

    Start Time: 1368520350
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
POST /autodiscover/autodiscover.xml HTTP/1.1
Host: autodiscover.nausch.org
Content-Length: 351
Content-Type: application/x-www-form-urlencoded

<?xml version="1.0" encoding="utf-8"?><Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"><Request><AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema><EMailAddress>django@nausch.org</EMailAddress></Request></Autodiscover>
HTTP/1.1 200 OK
Date: Tue, 14 May 2013 08:32:37 GMT
Server: Apache
X-Powered-By: PHP/5.3.3
Content-Length: 1004
Content-Type: application/xml

<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
  <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
    <User>
      <DisplayName>nausch.org</DisplayName>
    </User>
    <Account>
      <AccountType>email</AccountType>
      <Action>settings</Action>
      <Protocol>
        <Type>IMAP</Type>
        <Server>imap.nausch.org</Server>
        <Port>993</Port>
        <DomainRequired>off</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
        <LoginName>django@nausch.org</LoginName>
      </Protocol>
      <Protocol>
        <Type>SMTP</Type>
        <Server>mx01.nausch.org</Server>
        <Port>465</Port>
        <DomainRequired>off</DomainRequired>
        <SPA>off</SPA>
        <SSL>on</SSL>
        <AuthRequired>on</AuthRequired>
        <LoginName>django@nausch.org</LoginName>
      </Protocol>
    </Account>
  </Response>
</Autodiscover>
exit
closed

Outlook

Nun ist es an der Zeit unsere Konfiguration mit M$-Outlook zu Testen. Über den Menüpunkt Neues E-Mail-Konto hinzufügen… legen wir uns nun einen Test-Account an.

Bild: Bilschirmhardcopy Outlook neues Mailkonto einrichten

Hier wählen wir die Option Microsoft Exchange, POP3, IMAP oder HTTP aus und klicken dann auf die Schaltfläche [ Weiter > ].

Bild: Bilschirmhardcopy Outlook neues Mailkonto einrichten

Dort Tragen wir nun wie gewohnt ein:

und klicken auf die Schaltfläche [Weiter].

Der Mailclient findet nun in der für die Konfiguration zuständigen XML-Datei allen notwendigen Parameter.

Bild: Bilschirmhardcopy Outlook neues Mailkonto einrichten

Mit einem abschließendem Klick auf die Schaltfläche [Fertig stellen] ist dann die Einrichtung bereits abgeschlossen.

Links

1)
Virus Spreading Engine