Hallo zusammen,
nun kommen wir mal wieder zu einem technischen Blog-Eintrag: Wie richte ich die Autokonfiguration von Thunderbird und Outlook ein, damit diese meinen Mailserver (hier: dovecot + postfix) nur durch Benutzernamen und E-Mail Adresse erreichen und das Konto automatisch einrichten.
Nun, dazu gibt es glücklicher Weise teilweise gut dokumentierte Lösungen. Ich präsentiere euch nun hier meine Lösung:
Automatische Konfiguration für Thunderbird
Wenn man im Thunderbird einen neuen E-Mail Account einrichtet, läuft folgendes ab (siehe dazu auch das Mozilla Wiki [1]):
- Thunderbird sucht erst mal lokal auf der Festplatte nach einer XML, die die Konfiguration enthält
- Findet Thunderbird dort nichts, versucht Thunderbird die Konfiguration über http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=user@example.com abzurufen, als Fallback http://example.com/.well-known/autoconfig/mail/config-v1.1.xml
- Findet Thunderbird unter den Adressen nichts, versucht Thunderbird die Konfiguration von https://live.mozillamessaging.com/autoconfig/example.com abzurufen
- Klappt das auch nicht, versucht Thunderbird die Konfiguration zu erraten
- Klappt das Erraten auch nicht, muss man die Daten selbst eingeben
Als Server Administrator können wir an der zweiten Stelle ansetzen: Wir geben Thunderbird die Konfiguration für unseren Mailserver als XML-Datei!
Dazu folgende Schritte:
- Einen neuen Webserver VHost anlegen, der autodiscover.example.com heißt
- (Optional) diesen mit Let’s Encrypt mit TLS sichern (kein SSL *sigh!*)
- Die mail/config-v1.1.xml im Document Root des neuen VHosts erstellen
- einen Symlink von .well-known/autoconfig/mail/config-v1.1.xml nach mail/config-v1.1.xml erstellen
Nun das ganze im Detail:
Neuen VHost anlegen
Da ich einen Debian 8 (Jessie) Server im Einsatz habe und dort Apache als Webserver installiert ist, habe ich unter /etc/apache2/sites-available/autodiscover.krinetzki.de.conf
die Konfiguration für den neuen VHost abgelegt. Besonderheit: Ich habe mehrer Domains, habe die also alle in dieser Apache VHost Konfiguration abgelegt:
<VirtualHost *:80> ServerAdmin stephan@krinetzki.de ServerName autoconfig.krinetzki.de ServerAlias autoconfig.twichteln.org ServerAlias autoconfig.untotenarmee.de ServerAlias autoconfig.alienstrawberry.de ServerAlias autoconfig.sagt.xyz ServerAlias autoconfig.therealkings.xyz ServerAlias autoconfig.farinas-spirit-of-love.de ServerAlias autoconfig.weltraummarmela.de DirectoryIndex index.php index.htm index.html DocumentRoot /var/www/html/autoconfig.krinetzki.de/ # RewriteEngine On # RewriteCond %{HTTPS} !on # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ServerSignature Off </VirtualHost> <VirtualHost *:443> ServerAdmin stephan@krinetzki.de ServerName autoconfig.krinetzki.de ServerAlias autoconfig.twichteln.org ServerAlias autoconfig.untotenarmee.de ServerAlias autoconfig.alienstrawberry.de ServerAlias autoconfig.sagt.xyz ServerAlias autoconfig.therealkings.xyz ServerAlias autoconfig.farinas-spirit-of-love.de ServerAlias autoconfig.weltraummarmela.de DirectoryIndex index.php index.htm index.html DocumentRoot /var/www/html/autoconfig.krinetzki.de/ # <IfModule mod_ssl.c> # SSLEngine on # SSLCompression Off # SSLCertificateKeyFile /etc/letsencrypt/live/autoconfig.krinetzki.de/privkey.pem # SSLCertificateFile /etc/letsencrypt/live/autoconfig.krinetzki.de/fullchain.pem # SSLVerifyDepth 2048 # SSLVerifyClient none # # </IfModule> Header always set Strict-Transport-Security "max-age=63072000; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff <Directory /var/www/html/autoconfig.krinetzki.de> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from All </Directory> # Logfiles CustomLog /var/log/apache2/autoconfig.krinetzki.de_access_log combined ErrorLog /var/log/apache2/autoconfig.krinetzki.de_error_log ServerSignature Off </VirtualHost>
Erklärung:
- Zeile 3: Der Name des VHosts
- Zeilen 5-11: Alias Namen für mehrere Domains
- Zeilen 15-17: Für die erstmalige Erstellung des Zertifikates auskommentiert. Sobald das Zertifikat da ist, wird alles nach https umgeleitet
- Zeilen 36-44: TLS Einstellungen
Mit einem a2ensite autoconfig.krinetzki.de.conf
wird ein Symlink für die Seite unter /etc/apache2/sites-enabled
erstellt. Mit einem apachectl configtest
kann die Konfiguration überprüft werden und mit einem systemctl reload apache2
wird die Konfiguration des Apache neu eingelesen.
(Optional) VHost mit TLS absichern
Um den VHost nun mit TLS abzusichern, brauchen wir ja noch ein gültiges Zertifikat. Dieses können wir bei Let’s Encrypt holen und anschließend die Konfiguration des VHosts auf TLS only umstellen.
Dazu nutze ich den certbot der EFF:
certbot certonly --webroot -w /var/www/html/autodiscover.krinetzki.de/ -d autodiscover.krinetzki.de [-d autodiscover.neuedomain.de....]
Damit wird nun ein Zertifikat mit den Aliasen aus der VHost Konfiguration erstellt. Jeder Alias wird mit -d angehängt. Wenn alles geklappt hat, liegen das nun erstellte Zertifikat unter /etc/letsencrypt/live/autodiscover.krinetzki.de/
.
Nun wie oben bereits erwähnt die Konfiguration anpassen (Kommentare entfernen) und die Apache Konfiguration neu laden. Danach ist der VHost mit TLS abgesichert.
config-v1.1.xml erstellen
Die Datei wird unter /var/www/html/autodiscover.krinetzki.de/mail/config-v1.1.xml
erstellt und hat den Folgenden Inhalt:
<clientConfig version="1.1"> <emailProvider id="krinetzki.de"> <domain>krinetzki.de</domain> <displayName>krinetzki.de Mailserver</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="alienstrawberry.de"> <domain>alienstrawberry.de</domain> <displayName>krinetzki.de Mailserver (alienstrawberry.de)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="twichteln.org"> <domain>twichteln.org</domain> <displayName>krinetzki.de Mailserver (twichteln.org)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="untotenarmee.de"> <domain>untotenarmee.de</domain> <displayName>krinetzki.de Mailserver (untotenarmee.de)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="sagt.xyz"> <domain>sagt.xyz</domain> <displayName>krinetzki.de Mailserver (sagt.xyz)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="therealkings.xyz"> <domain>therealkings.xyz</domain> <displayName>krinetzki.de Mailserver (therealings.xyz)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="farinas-spirit-of-love.de"> <domain>farinas-spirit-of-love.de</domain> <displayName>krinetzki.de Mailserver (farinas-spirit-of-love.de)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> <emailProvider id="weltraummarmela.de"> <domain>weltraummarmela.de</domain> <displayName>krinetzki.de Mailserver (weltraummarmela.de)</displayName> <displayShortName>mail.krinetzki.de</displayShortName> <incomingServer type="imap"> <hostname>mail.krinetzki.de</hostname> <port>143</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </incomingServer> <outgoingServer type="smtp"> <hostname>mail.krinetzki.de</hostname> <port>25</port> <socketType>STARTTLS</socketType> <authentication>password-cleartext</authentication> <username>%EMAILADDRESS%</username> </outgoingServer> <webMail> <loginPage url="https://webmail.krinetzki.de" /> <loginPageInfo url="https://webmail.krinetzki.de"> <username>%EMAILADDRESS%</username> <usernameField id="RainLoopEmail" name="email" /> <passwordField id="RainLoopPassword" /> </loginPageInfo> </webMail> </emailProvider> </clientConfig>
Diese Datei wirkt erschlagend, allerdings sind nur die Zeilen 2-28 relevant. Diese wiederholen sich für jede Domain, die man bereitstellt
- Zeile 2: id des E-Mail Providers. Muss eindeutig für die gesamte XML Datei sein. Empfehlung: das Domain-Name
- Zeile 3: Domain des E-Mail Accounts
- Zeile 4 und 5: Beschreibung des E-Mail Accounts (Wird im Thunderbird in den Einstellungen angezeigt)
- Zeile 6-12: IMAP-Einstellungen
- Zeile 7: Hostname vom dovecot
- Zeile 8: Port (SSL: 993, STARTTLS: 143)
- Zeile 9: STARTTLS oder SSL
- Zeile 10: Passwort Verschlüsselung auf Server Seite
- Zeile 11: Benutzername = Vollständige E-Mail Adresse
- Zeilen 13-19: SMTP Einstellungen
- Zeile 14: Hostname vom Postfix
- Zeile 15: Port (SSL: 465, STARTTLS: 25)
- Zeile 16: STARTTLS oder SSL
- Zeile 17: Passwort Verschlüsselung auf Server Seite
- Zeile 18: Benutzername = Vollständige E-Mail Adresse
- Zeile 20-27: Web Mailer Einstellungen:
- Zeile 21: URL zur Login Seite (SSL only!)
- Zeile 22-26: Information zum automatischen ausfüllen der Informationen im Webmailer
Weitere Information zu den Einstellungen und Optionen der Datei findet ihr unter [2].
Nach dem diese Datei erstellt wurde, fehlt noch der Symlink für den Fallback:
# mkdir -p
# ln -s /var/www/html/autoconfig.krinetzki.de/mail/config-v1.1.xml /var/www/html/autoconfig.krinetzki.de/.well-known/autoconfig/mail/config-v1.1.xml
Und fertig. Nun kann Thunderbird sich die Konfiguration abholen und richtet sich wie von Geisterhand selbst ein.
Automatische Konfiguration für Outlook
Microsoft und OpenSource – das geht meistens schief. Allerdings gibt es recht gut dokumentiert eine Möglichkeit, wie man es schafft, dass sich Outlook auch automatisch einrichtet. Dazu habe ich mich der Dokumentation unter [3] bedient, allerdings natürlich meinen Gegebenheiten angepasst. Also hier nun das HowTo:
- VHost autodiscover.example.com einrichten und mit TLS absichern (hier ist es ein MUSS)
- DNS Einträge anlegen
- XML-Datei für Outlook anlegen
- Konfiguration testen
VHost anlegen
Hier ist es ähnlich wie mit dem VHost für autoconfig.krinetzki.de, es gibt aber eine Besonderheit:
<VirtualHost *:80> ServerAdmin stephan@krinetzki.de ServerName autodiscover.krinetzki.de ServerAlias autodiscover.twichteln.org ServerAlias autodiscover.untotenarmee.de ServerAlias autodiscover.alienstrawberry.de ServerAlias autodiscover.sagt.xyz ServerAlias autodiscover.therealkings.xyz ServerAlias autodiscover.farinas-spirit-of-love.de ServerAlias autodiscover.weltraummarmela.de RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ServerSignature Off </VirtualHost> <VirtualHost *:443> ServerAdmin stephan@krinetzki.de ServerName autodiscover.krinetzki.de ServerAlias autodiscover.twichteln.org ServerAlias autodiscover.untotenarmee.de ServerAlias autodiscover.alienstrawberry.de ServerAlias autodiscover.sagt.xyz ServerAlias autodiscover.therealkings.xyz ServerAlias autodiscover.farinas-spirit-of-love.de ServerAlias autodiscover.weltraummarmela.de DirectoryIndex index.php index.htm index.html DocumentRoot /var/www/autodiscover.krinetzki.de/httpdocs <IfModule mod_ssl.c> SSLEngine on SSLCompression Off SSLCertificateKeyFile /etc/letsencrypt/live/autodiscover.krinetzki.de/privkey.pem SSLCertificateFile /etc/letsencrypt/live/autodiscover.krinetzki.de/fullchain.pem SSLVerifyDepth 2048 SSLVerifyClient none </IfModule> Header always set Strict-Transport-Security "max-age=63072000; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff <Directory /var/www/autodiscover.krinetzki.de/httpdocs> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from All </Directory> AddType application/x-httpd-php .php .php3 .php4 .php5 .xml # Logfiles CustomLog /var/log/apache2/autodiscover.krinetzki.de_access_log combined ErrorLog /var/log/apache2/autodiscover.krinetzki.de_error_log ServerSignature Off </VirtualHost>
Zeile 55 ist hier das interessante: Ich lasse die XML Datei für Outlook durch PHP parsen. Warum, steht weiter unten.
Neben der Zeile von oben ist es ganz wichtig und unabdingbar, dass der Host per https erreichbar ist. Outlook verlangt das so. Das Vorgehen ist wie oben beschrieben, nur mit den neuen Hosts.
DNS Einträge
Microsoft erwartet ja bei Outlook, dass man irgendwo einen Exchange Server am laufen hat oder halt nen IIS. Oder irgendwas anderes, Microsoft spezifisches. Da wir das aber nicht haben und auch nicht wollen, allerdings den Outlook/Outlook Express/Windows Mail Usern den Luxus der automatischen Konfiguration bieten wollen, müssen wir ein paar DNS Einträge ändern.
In den SRV Einträgen muss folgendes stehen:
_autodiscover._tcp.example.com. 2635 IN SRV 10 0 443 autodiscover.example.com.
Zur Erklärung:
- _autodiscover – weist Outlook an, den Eintrag zu nutzen
- _tcp – das Protokoll
- example.com – Domain
- 10 0 443 autodiscover.example.com – 10 ist die Priorität des Dienstes, 0 für ein Loadbalancing bei mehreren gleichen Prioritäten, 443 der Zielport, autodiscover.example.com ist die Zieladresse
So sieht es bei mir aus:
# dig -t SRV _autodiscover._tcp.krinetzki.de
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> -t SRV _autodiscover._tcp.krinetzki.de
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36701
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;_autodiscover._tcp.krinetzki.de. IN SRV
;; ANSWER SECTION:
_autodiscover._tcp.krinetzki.de. 86400 IN SRV 10 0 443 autodiscover.krinetzki.de.
;; Query time: 36 msec
;; SERVER: 192.168.178.1#53(192.168.178.1)
;; WHEN: Sat Jul 30 21:51:33 DST 2016
;; MSG SIZE rcvd: 94
Damit sind die DNS Einträge fertig.
XML Datei für Outlook
nun weiß Outlook, dass es die Konfiguration für krinetzki.de bei autodiscover.krinetzki.de über Port 443 abgeholt werden kann. Mit dem folgenden 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>info@krinetzki.de</EMailAddress> </Request> </Autodiscover>
Die folgende Antwort bekommt dann Outlook:
<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>mail.krinetzki.de</Server> <Port>143</Port> <DomainRequired>off</DomainRequired> <SPA>off</SPA> <Encryption>TLS</Encryption> <AuthRequired>on</AuthRequired> <LoginName>info@krinetzki.de</LoginName> </Protocol> <Protocol> <Type>SMTP</Type> <Server>mail.krinetzki.de</Server> <Port>25</Port> <DomainRequired>off</DomainRequired> <SPA>off</SPA> <Encryption>TLS</Encryption> <AuthRequired>on</AuthRequired> <LoginName>info@krinetzki.de</LoginName> </Protocol> </Account> </Response> </Autodiscover>
So weit so gut. Problem wäre ja nun, dass diese XML-Datei statisch wäre und das wäre in meinem Fall mehr als suboptimal. Ich will ja diese Info für jede E-Mail Adresse haben, also verwenden wir PHP:
<?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>mail.krinetzki.de</DisplayName> </User> <Account> <AccountType>email</AccountType> <Action>settings</Action> <Protocol> <Type>IMAP</Type> <Server>mail.krinetzki.de</Server> <Port>143</Port> <DomainRequired>off</DomainRequired> <SPA>off</SPA> <Encryption>TLS</Encryption> <AuthRequired>on</AuthRequired> <LoginName><?php echo $score[1]; ?></LoginName> </Protocol> <Protocol> <Type>SMTP</Type> <Server>mail.krinetzki.de</Server> <Port>25</Port> <DomainRequired>off</DomainRequired> <SPA>off</SPA> <Encryption>TLS</Encryption> <AuthRequired>on</AuthRequired> <LoginName><?php echo $score[1]; ?></LoginName> </Protocol> </Account> </Response> </Autodiscover>
Und tada – Wir bekommen pro User nun die richtige Konfiguration. Ihr wollt Beweise? Damit könnt ihr testen:
Konfiguration testen
Um das ganze zu testen, folgen nun folgende Schritte:
- Verbindung zum Server aufbauen
- HTTP POST Request absetzen
- XML erhalten
Hier das mal für meinen Server:
$ openssl s_client -connect autodiscover.krinetzki.de:443 CONNECTED(00000003) depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/CN=krinetzki.de i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 i:/O=Digital Signature Trust Co./CN=DST Root CA X3 --- Server certificate -----BEGIN CERTIFICATE----- MIIFNDCCBBygAwIBAgISA5RV9eT5q/kLPqW+iATkHUPPMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjA3MjUxODM4MDBaFw0x NjEwMjMxODM4MDBaMBcxFTATBgNVBAMTDGtyaW5ldHpraS5kZTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMcXw9WWsGLeGs8W6eBulwNKAxTeJknZhaDc n+TCJNauzMoDgnsYRrtIOY7kVUhmycgDBcy0aSvV1UCWlMxgvT3HiUUPP28rqHsm miX1eBVGmL0qzV7ngMuelsLydU/k2gEd6SjdcsD5KOnFRtx3oPJVb8EefbANHVtH 6G6AkGWb6s3BnAv+xusXJWLrGX5bxM1I4Os7rR7yLqhS8yLeDBP3eRuTcO2zqQbT S52p3Br68VvTQjEkSqTE2UdLlcQAaQyzxhcKgacxhXAyBYAYAOsQ6hJCOv5q7Po/ NzhkIg+3Pfn32HjtVm9mYw08AM65j2Ni0rtyAt0YOd+n3Ba6j+8CAwEAAaOCAkUw ggJBMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH AwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUt1ZCZqaHbMe08uQsIK0YEbSELfsw HwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEEZDBi MC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3Jn LzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0Lm9y Zy8wTwYDVR0RBEgwRoIRaXB2NC5rcmluZXR6a2kuZGWCDGtyaW5ldHpraS5kZYIR bWFpbC5rcmluZXR6a2kuZGWCEHd3dy5rcmluZXR6a2kuZGUwgf4GA1UdIASB9jCB 8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRw Oi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENl cnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFy dGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRl IFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0 b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAQjRl7yDcagfHV6O7SH68aerEHUYfHEmu vRNhLAbtlVkVY7D3zQsy0+90Ivoe3NJlEPfsvQpnJhS0n/plzmTBZqhPbkEk6rGc l+tSCiEohX4L7rq3KejUimqyN/LP7Rxfq1IL6CfGZy+hlKHjfZZBXK0m53NS9FmM WJpi8AaJFgPq4AjXQhKIz3fIP/HetPLS1pd0REBAGCcWCKec39PTo3ewuZY6EG0p m7Q3JCANHXLtwFuto33VzjSpSjfPwMGoUqzjIhQxJAgQSqkkQ1jlHMPF4WUdchm5 wc4gMFihfwHyHuqBLlht9Meho54zhHrEzRfM69lrNK6oQr+e80oanQ== -----END CERTIFICATE----- subject=/CN=krinetzki.de issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3 --- No client certificate CA names sent --- SSL handshake has read 3204 bytes and written 421 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: F9E839A79F24F8C6D3AE0610522E13A577C20FFB3CABC30297E3C9DF29BE36F5 Session-ID-ctx: Master-Key: C3B014374FA609E2F350905D9A79885237715EC5E546CAC8B5D176B1CE73001D285496C0D5E28DB3D904230F39D3FC3F Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - e7 63 47 eb cd ce 57 38-b6 b0 0b b4 ce fc 45 0a .cG...W8......E. 0010 - 42 16 14 7f 6e f2 29 78-d9 5c 7d 65 48 09 48 70 B...n.)x.\}eH.Hp 0020 - e8 5a 96 01 15 28 22 d0-b3 7d 41 bc 0e bd 1b ea .Z...("..}A..... 0030 - 92 10 78 41 67 6e 6e c2-14 36 7d a3 3c 1f 2e ac ..xAgnn..6}.<... 0040 - bc b6 40 5d c4 59 8e d0-33 64 bd b9 42 9d 0f 1a ..@].Y..3d..B... 0050 - d1 38 43 77 a9 c3 51 70-91 d0 4d 99 cf 04 a5 a5 .8Cw..Qp..M..... 0060 - a7 d0 18 b4 52 77 e3 87-e5 ce 01 04 b5 c5 72 79 ....Rw........ry 0070 - 49 9b df 33 b7 49 30 a5-e7 23 54 f8 02 b5 62 42 I..3.I0..#T...bB 0080 - b3 f5 41 b6 d8 52 33 14-cd 9a c8 be d6 ac c6 e5 ..A..R3......... 0090 - 0d 3a 27 59 42 e7 40 1c-cd 93 db 51 0e 79 99 87 .:'YB.@....Q.y.. 00a0 - 6b 8a f4 15 73 78 71 e8-7d 53 53 24 13 d4 af 26 k...sxq.}SS$...& 00b0 - 59 60 e5 0e 72 77 50 e8-e1 16 7c f4 f7 47 2b 63 Y`..rwP...|..G+c Start Time: 1469909296 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) --- POST /autodiscover/autodiscover.xml HTTP/1.1 Host: autodiscover.krinetzki.de 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>info@krinetzki.de</EMailAddress></Request></Autodiscover> HTTP/1.1 200 OK Date: Sat, 30 Jul 2016 20:08:34 GMT Server: Apache Strict-Transport-Security: max-age=63072000; preload X-Frame-Options: DENY X-Content-Type-Options: nosniff Vary: Accept-Encoding X-Content-Type-Options: nosniff Content-Length: 1030 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>mail.krinetzki.de</DisplayName> </User> <Account> <AccountType>email</AccountType> <Action>settings</Action> <Protocol> <Type>IMAP</Type> <Server>mail.krinetzki.de</Server> <Port>143</Port> <DomainRequired>off</DomainRequired> <SPA>off</SPA> <Encryption>TLS</Encryption> <AuthRequired>on</AuthRequired> <LoginName>info@krinetzki.de</LoginName> </Protocol> <Protocol> <Type>SMTP</Type> <Server>mail.krinetzki.de</Server> <Port>25</Port> <DomainRequired>off</DomainRequired> <SPA>off</SPA> <Encryption>TLS</Encryption> <AuthRequired>on</AuthRequired> <LoginName>info@krinetzki.de</LoginName> </Protocol> </Account> </Response> </Autodiscover>
Diese XML-Datei erhält nun Outlook und richtet euch den Account ein. Toll, oder?
TL;DR
Mit ein wenig Aufwand lässt es sich recht schnell erreichen, dass sich die Mail Clients automatisch einrichten, sobald sie mit dem eigenen Server kommunizieren wollen. Dabei finde ich, dass Thunderbird deutlich einfacher ist, als Outlook.
[1] https://wiki.mozilla.org/Thunderbird:Autoconfiguration
[2] https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat
[3] http://dokuwiki.nausch.org/doku.php/centos:mail_c6:autoconfig_2
Kommentar verfassen