Autokonfiguration von Apple iPhone, iPad oder iPod
Im Gegensatz zu den beiden anderen Konfigurationsbeispielen, müssen wir bei den Apple-Geräten für die benutzerfreundliche Autoconfiguration einen anderen Weg einschlagen, nämlich die Nutzung der Konfigurations-Profile.
Diese Konfigurations-Profile erstellt man mit dem iPhone-Konfigurationsprogramm welches man auf der Webseite von http://apple.com herunterladen kann. Die Windowsvariante findet man hier, die MAC OS X Variante gibt es hier zum Herunterladen. Weiterführende Informationen findet man zum iPCU im iPhone Wiki.
Alternativ kann man natürlich auch mit dem Editor seiner Wahl, eine vorhandene Konfigurationsdatei bearbeiten und der eigenen Installationsumgebung anpassen. Hilfreiche Informationen zum Aufbau und zu den Feldern soch einer Konfigurationsdatei, findet man im Enterprise Deployment Guide im Anhang B (Seite 73) im Kapitel Email Payload.
vHost für Apache einrichten
Bevor wir uns nun mit der Erstellung einer .mobileconfig XML-Datei befassen, richten wir uns noch einen passenden vHost auf unserem Webserver ein. Über diesen vHost werden wir dann in dern nachfolgenden Konfigurationsschritten unterschiedliche „Komfortstufen“ ausrollen.
Neben unserer Apache-Konfigurationsdatei benötigen wir natürlich noch ein entsprechendes Verzeichnis, wo wir unsere Webseitendokumente ablegen werden. Dieses Verzeichnis legen wir uns nun als erstes an.
# mkdir -p /var/www/autoconfig/apple
Als nächstes definieren wir die notwendige Konfigurationsdatei für unseren vHost im Apache Konfigurationspfad /etc/httpd/conf.d/.
# vim /etc/httpd/conf.d/autoconfig_ssl.conf
- autoconfig.conf
# # host für Autoconfig der Apple-Welt unseres Dovecot # <VirtualHost *:443> ServerAdmin webmaster@nausch.org ServerName autoconfig.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/autoconfig/" <Directory "/var/www/autoconfig/"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all <IfModule mod_mime.c> AddType application/x-apple-aspen-config .mobileconfig </IfModule> </Directory> DirectoryIndex index.html ErrorLog logs/autoconfig_error.log CustomLog logs/autoconfig_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-Eintrag
Damit die Apple-Anwender über eine DNS-Abfrage unseren neuen vHOST finden können, ist natürlich unser Apache-vHost ein passender Einträge notwendig. Für den ServerName aus unserer vHost-Konfiguration definieren wir dann beim zuständigen Nameserver einen A-Record:
autoconfig.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
Konfigurationsbeispiele
1. Bsp.: einfache XML-Konfigurationsdatei
In der einfachsten Grundvariante erstellen wir uns eine XML-Datei, mit Hilfe derer ein Anwender seinen Mailaccount einrichten kann. Von Seiten des Anwenders sind dann noch folgende Daten von Hand einzutippen:
- vollständigen Namen für den eMail-account, z.b. Nerd
- eMail-Adresse z.B. nerd1@it-ignorant.de
- Benutzernamen für eingehende eMails, in unserem Fall entsprecht der Nutzername, der eMail-Adresse, also gebe wir hier z.B. nerd1@it-ignorant.de ein.
- Kennwort für eingehende eMails, z.B. Zipfegladscha
- Benutzernamen für ausgehende eMails, in unserem Fall entsprecht der Nutzername, der eMail-Adresse, also gebe wir hier z.B. nerd1@it-ignorant.de ein.
Die Konfigurations-Definitionen unseres Mailservers hinterlegen wir nun in einer einfachen XML-Datei, nach folgendem Musterbeispiel. Wichtig hierbei ist, dass der Dateiname auf .mobileconfig endet, damit das iPhone|Pad|Pod die Konfgurationsdatei als solche auch verstehen kann.
# vim /var/www/autoconfig/apple/mailsetup.mobileconfig
- vim /var/www/autoconfig/apple/mailsetup.mobileconfig
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>EmailAccountDescription</key> <string>nausch.org</string> <key>EmailAccountName</key> <string></string> <key>EmailAccountType</key> <string>EmailTypeIMAP</string> <key>EmailAddress</key> <string></string> <key>IncomingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>IncomingMailServerHostName</key> <string>imap.nausch.org</string> <key>IncomingMailServerPortNumber</key> <integer>993</integer> <key>IncomingMailServerUseSSL</key> <true/> <key>IncomingMailServerUsername</key> <string></string> <key>IncomingPassword</key> <string></string> <key>OutgoingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>OutgoingMailServerHostName</key> <string>mx01.nausch.org</string> <key>OutgoingMailServerPortNumber</key> <integer>587</integer> <key>OutgoingMailServerUseSSL</key> <true/> <key>OutgoingMailServerUsername</key> <string></string> <key>OutgoingPasswordSameAsIncomingPassword</key> <true/> <key>PayloadDescription</key> <string>Configures email account.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org.email</string> <key>PayloadOrganization</key> <string>test</string> <key>PayloadType</key> <string>com.apple.mail.managed</string> <key>PayloadUUID</key> <string>A5115AD5-3A86-4C4F-B964-576A757409AB</string> <key>PayloadVersion</key> <integer>1</integer> <key>PreventAppSheet</key> <true/> <key>PreventMove</key> <false/> <key>SMIMEEnabled</key> <false/> <key>disableMailRecentsSyncing</key> <false/> </dict> </array> <key>PayloadDescription</key> <string>Profilbeschreibung.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org</string> <key>PayloadOrganization</key> <string>nausch.org</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>E99CC7F7-6E38-4A1D-97DC-232143F67BC1</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
Zum Testen unserer Konfiguration rufen wir nun auf dem Apple-Endgerät mit dem Webbrowser Safari die URL unseres ersten Test auf.
https://autoconfig.nausch.org/apple/mailsetup.mobileconfig
Das heruntergeladene Profil wird uns angezeigt. Das Profil ist natürlich nicht signiert, daher auch der rote Hinweis Unsigniert in der Darstellung.
Hier tippen wir auf die Schaltfläche [Installieren]. Als nächstes folgt ein Hinweis für den Nutzer: Die Installation dieses Profils ändert die Einstellungen auf Ihrem iPad. Da wir ja unseren Mailclient einrichten möchten, tippen wir nun auf die Schaltfläche [Installieren].
Auf den folgenden Fenstern geben wir nun die oben genannten noch fehlenden Angaben ein.
Mit einem abschließendem Tippen auf die Schaltfläche [Weiter] kommen wir zur letzten Anzeige.
Mit Anwählen der Schaltfläche [Fertig] ist die Konfiguration unseres Mailclients abgeschlossen.
O.K., so weit, so gut. Bei dem gezeigtem Beispiel fallen und zwei Dinge auf:
- So richtig komfortabel ist, das noch nicht, sind doch noch viele Eingaben am Apple-Gerät notwendig.
- Der rote Hinweis Unsigniert beim installierten Profil, verwirrt doch den ein oder anderen User. Der Transportweg des Konfigurationsprofils erfolgte zwar verschlüsselt von der Seite https://autoconfig.nausch.org/apple/mailsetup.mobileconfig, aber besser wäre es unbestritten, wenn mit Hilfe einer Signatur die Authentizität des Konfigurationsprofils überprüft werden könnte. Ein grünes Häkchen ✔ würde sich doch wesentlich besser machen.
2. Bsp.: komfortablere Konfigurations-Webseite
Im vorangegangenem Beispiel mussten am Apple-Gerät noch sehr viel Eingaben und teilweise auch doppelt gemacht werden. In dem nun folgendem Beispiel werden dies ein wenig vereinfachen.
Folgende Daten fragen wir auf einer Webseite ab, von der sich der Anwender dann seine persönliche Profildatei abholen kann:
- vollständigen Namen für den eMail-account, z.b. Nerd
- eMail-Adresse z.B. n3rd@it-ignorant.de
- Benutzernamen für eingehende eMails, in unserem Fall entsprecht der Nutzername, der eMail-Adresse, also gebe wir hier z.B. n3rd@it-ignorant.de ein.
- Benutzernamen für ausgehende eMails, in unserem Fall entsprecht der Nutzername, der eMail-Adresse, also gebe wir hier z.B. n3rd@it-ignorant.de ein.
Da in unserer Konfiguration die Punkte 2, 3 und 4 identisch sind, benötigen wir vom Anwender lediglich zwei Angaben, nämlich:
- vollständigen Namen
- eMail-Adresse
Das Kennwort darf dann der Benutzer selbst am Apple-Endgerät eingeben. Soweit, so gut, aber was benötigen wir zur Realisierung dieses Beispiels genau? Im Prinzip ist das ganze kein Hexenwerk und relativ einfach zu realisieren, benötigen wir wie im ersten Konfigurationsbeispiel eine Vorlagedatei und eine Webseite auf der wir den vollständigen Namen und die eMail-Adresse abfragen. Diese Werte fügen wir dann in die Vorlagedatei ein und liefern die Profildatei an den Anwender aus.
Vorlage-XML-Datei
Im ersten Schritt werden wir nun die benötigte Vorlagedatei erstellen und diese auf unserem Webserver hinterlegen. Hierzu legen wir uns nun auf unserem Webserver ein Verzeichnis an.
# mkdir /var/www/apple
Damit unser Systemuser auch dort die Datei lesen kann, passen wir die User und Gruppenrechte dieses Verzeichnisses an.
# chown apache.root /var/www/apple/
# chmod 770 /var/www/apple/
Nun erstellen wir uns die Vorlagedatei. Wie Eingangs schon erwähnt, werden wir für die benötigten Daten Variablen festlegen, die dann später mit den entsprechenden Werten befüllt werden sollen.
- vollständigen Namen entspricht %ANMELDENAME%
- eMail-Adresse entspricht %MAILADRESSE%
# vim /var/www/apple/template
- /var/www/apple/template
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>EmailAccountDescription</key> <string>nausch.org</string> <key>EmailAccountName</key> <string>%ANMELDENAME%</string> <key>EmailAccountType</key> <string>EmailTypeIMAP</string> <key>EmailAddress</key> <string>%MAILADRESSE%</string> <key>IncomingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>IncomingMailServerHostName</key> <string>imap.nausch.org</string> <key>IncomingMailServerPortNumber</key> <integer>993</integer> <key>IncomingMailServerUseSSL</key> <true/> <key>IncomingMailServerUsername</key> <string>%MAILADRESSE%</string> <key>IncomingPassword</key> <string></string> <key>OutgoingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>OutgoingMailServerHostName</key> <string>mx01.nausch.org</string> <key>OutgoingMailServerPortNumber</key> <integer>587</integer> <key>OutgoingMailServerUseSSL</key> <true/> <key>OutgoingMailServerUsername</key> <string>%MAILADRESSE%</string> <key>OutgoingPasswordSameAsIncomingPassword</key> <true/> <key>PayloadDescription</key> <string>eMail Account Konfiguration.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org.email</string> <key>PayloadOrganization</key> <string>DJANGO</string> <key>PayloadType</key> <string>com.apple.mail.managed</string> <key>PayloadUUID</key> <string>A5115AD5-3A86-4C4F-B964-576A757409AB</string> <key>PayloadVersion</key> <integer>1</integer> <key>PreventAppSheet</key> <true/> <key>PreventMove</key> <false/> <key>SMIMEEnabled</key> <false/> <key>disableMailRecentsSyncing</key> <false/> </dict> </array> <key>PayloadDescription</key> <string>Profilbeschreibung.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org</string> <key>PayloadOrganization</key> <string>nausch.org</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>E99CC7F7-6E38-4A1D-97DC-232143F67BC1</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
PHP-Webseite
Zur Abfrage der beiden Werte vollständigen Namen sowie eMail-Adresse und dem Einfügen in die Vorlagedatei benutzen wir nun ein kleines PHP-Scripts. (Hilfreiche Informationen, Tips und Befehlsbeschreibungen findet man bei Bedarf im PHP-Handbuch.
Mit dem Editor unserer Wahl legen wir uns nun auf unserem Webserver im Webspace nachfolgende Datei an. Die Angaben im HEADER, im Teil FORMULAR und FOOTER passen wir natürlich individuell an!
# vim /var/www/autoconfig/apple/mail4iphone.php
- /var/www/autoconfig/apple/mail4iphone.php
<?php if (isset($_REQUEST['email'])):?> <?php // Definition der Variable $conf mit Angabe, wo das template-file liegt $conf = file_get_contents('/var/www/apple/template'); // Die beiden abgefragten Werte an den entsprechenden Stellen in der // Profil-Datei einfügen $conf = str_replace('%MAILADRESSE%', $_REQUEST['email'], $conf); $conf = str_replace('%ANMELDENAME%', $_REQUEST['name'], $conf); // header für Download setzen header('Content-type: application/x-apple-aspen-config; chatset=utf-8'); header('Content-Disposition: attachment; filename="iPMC.mobileconfig"'); // Ausliefern der Profil-Datei mit dem Namen iPMC.mobileconfig print $conf; ?> <?php else: ?> <html> <head> <title>Automatische eMail-Konfiguration für Apple iPhone</title> <meta name="viewport" content="width=device-width; initial-scale=1; user-scalable=no" /> </head> <body style="font: 100% Verdana;"> <!-- ********** HEADER START ********** --> <h2> <a href="http://dokuwiki.nausch.org/doku.php/start"><img src="logo.png" width="64" height="64" alt="nausch.org LOGO"></a> eMail-Services bei nausch.org </h2> <p> <a href="https://www.cacert.org/index.php?id=3">CAcert Root-Zertifikate</a> | <a href="https://buero.nausch.org">Webmailer</a> | <a href="http://keyserver.nausch.org">SKS-Keyserver</a> | <a href="http://dokuwiki.nausch.org/doku.php/centos:openpgp_beim_mua">Djangos WIKI</a> | <a href="http://omni128.de/doku.php/impressum">Impressum</a> </p> <hr> <br> <!-- ********** HEADER ENDE ********** --> <!-- ********** FORMULAR START ********** --> <form method="post" action="mail4iphone.php"> <p style="text-align: center"> Zum Erstellen Deiner individuellen AutoKonfig-Datei für Dein Apple-Gerät benötigen wir nun noch ein paar Angaben. Trage in die beiden Felder die gewünschten Daten ein. Dein Benutzername erscheint dann bei der eMailadresse links neben der eMail-Adresse.<br> <br> Bsp.:<br> <b>Benutzername</b> = <i>Django [BOfH]</i> und <b>eMail-Adresse</b> = <i>django@nausch.org</i><br> ergibt:<br> <b><i> Django [BOfH] <django@nausch.org></i></b><br><br> Zum Erstellen Deiner Konfigurationsdatei klicke bitte auf die Schaltfläche <b>Senden</b><br> <br> <br> <b>Benutzername: </b><input type="text" name="name" style="height: 30px; width: 250px;"/> <b>eMail-Adresse: </b><input type="text" name="email" style="height: 30px; width: 300px;"/> <br> <br> <input type="submit" value="Senden" style="width: 80px; height: 30px;"/> </p> </form> <!-- ********** FORMULAR ENDE ********** --> <!-- ********** FOOTER START ********** --> <hr> <!-- ********** FOOTER ENDE ********** --> </body> </html> <?php endif ?>
Test
Zum Testen unserer Konfiguration besuchen wir mit dem Webbrowser Safari die URL unseres Konfigurators: https://autoconfig.nausch.org/apple/mail4iphone.php
Nach Eingabe der Daten und Anwahl der Schaltfläche [Senden] fällt uns, bei Eingabe der notwendigen Daten in die beiden Felder, z.B. folgende Profil-Datei entgegen.
- iPMC.mobileconfig
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>EmailAccountDescription</key> <string>nausch.org</string> <key>EmailAccountName</key> <string>Nerd</string> <key>EmailAccountType</key> <string>EmailTypeIMAP</string> <key>EmailAddress</key> <string>n3rd@it-ignorant.de</string> <key>IncomingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>IncomingMailServerHostName</key> <string>imap.nausch.org</string> <key>IncomingMailServerPortNumber</key> <integer>993</integer> <key>IncomingMailServerUseSSL</key> <true/> <key>IncomingMailServerUsername</key> <string>n3rd@it-ignorant.de</string> <key>IncomingPassword</key> <string></string> <key>OutgoingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>OutgoingMailServerHostName</key> <string>mx01.nausch.org</string> <key>OutgoingMailServerPortNumber</key> <integer>587</integer> <key>OutgoingMailServerUseSSL</key> <true/> <key>OutgoingMailServerUsername</key> <string>n3rd@it-ignorant.de</string> <key>OutgoingPasswordSameAsIncomingPassword</key> <true/> <key>PayloadDescription</key> <string>eMail Account Konfiguration.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org.email</string> <key>PayloadOrganization</key> <string>DJANGO</string> <key>PayloadType</key> <string>com.apple.mail.managed</string> <key>PayloadUUID</key> <string>A5115AD5-3A86-4C4F-B964-576A757409AB</string> <key>PayloadVersion</key> <integer>1</integer> <key>PreventAppSheet</key> <true/> <key>PreventMove</key> <false/> <key>SMIMEEnabled</key> <false/> <key>disableMailRecentsSyncing</key> <false/> </dict> </array> <key>PayloadDescription</key> <string>Profilbeschreibung.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org</string> <key>PayloadOrganization</key> <string>nausch.org</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>E99CC7F7-6E38-4A1D-97DC-232143F67BC1</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
Am Apple-Endgerät wird uns entsprechend das heruntergeladene Profil angezeigt. Das Profil ist natürlich nicht signiert, daher auch der rote Hinweis Unsigniert in der Darstellung.
Über den Menüpunkt [Mehr Details] findet man weitere Angaben zu den Inhalten des Konfigurationsprofils.
Auf die vorherige Seite kommen wir zurück über den Menüpunkt [Profil installieren].
Die Installation des Konfigurationsprofils starten wir nun über die Anwahl der Schaltfläche [Installieren]. Auf dem nun erscheinenden Fenster geben wir unser Passwort für den Mailaccount ein.
Nach Anwahl der Schaltfläche [Weiter] baut der Client eine Verbindung zum Mailserver auf und testet, ob mit den angegebenen Daten eine Anmeldung möglich ist. Nach Abschluß dieses Tests wird uns der Erfolg bestätigt.
Mit Anwählen der Schaltfläche [Fertig] ist die Konfiguration unseres Mailclients abgeschlossen.
Als Erfolgskontrolle können wir nun den Apple-Mailclient aufrufen und bei bedarf unsere Mails abrufen bzw. natürlich auch verschicken.
Bei diesemKonfigurationsbeispiel ist nun die Einrichtung am Apple-Endgerät wesentlich einfacher und anwendungsfreundlicher.
Den mit unter Umständen verwirrenden roten Hinweis Unsigniert beim installierten Profil, haben wir, wie im ersten Konfigurationsbeispiel immer noch. Der Transportweg des Konfigurationsprofils erfolgte zwar verschlüsselt von der Seite https://autoconfig.nausch.org/apple/mailsetup.mobileconfig, aber besser wäre es unbestritten, wenn mit Hilfe einer Signatur die Authentizität des Konfigurationsprofils überprüft werden könnte. Dies werden wir nun noch im letzten Konfigurationsbeispiel erledigen, mit dem Ziel das grünes Häkchen ✔ neben dem Profil anzuzeigen.
3. Bsp. komfortablere Konfigurations-Webseite mit signierte Profildatei
Wie schon im zweitem Beispiel, wollen wir hier nun dem User eine individuelle signierte Profildatei mit seinen Daten zukommen lassen.
Dazu fragen wir auch hier seine Daten ab:
- vollständigen Namen für den eMail-account, z.b. Nerd
- eMail-Adresse z.B. n3rd@it-ignorant.de
Das Kennwort darf dann der Benutzer selbst am Apple-Endgerät eingeben.
Wie schon beim vorherigen Beispiel benötigen wir eine Vorlagedatei und eine Webseite auf der wir den vollständigen Namen und die eMail-Adresse abfragen. Diese Werte fügen wir dann in die Vorlagedatei ein, signieren diese Datei mit einem x.509-Zertifikat und liefern dann diese signierte Profildatei an den Anwender aus.
Vorlage-XML-Datei
Wie in den beiden anderen Beispielen, werden wir nun die benötigte Vorlagedatei erstellen und diese auf unserem Webserver hinterlegen.
Wie Eingangs bereits erwähnt, werden wir für die benötigten Daten Variablen festlegen, die dann später mit den entsprechenden Werten befüllt werden sollen.
- vollständigen Namen entspricht %ANMELDENAME%
- eMail-Adresse entspricht %MAILADRESSE%
# vim /var/www/apple/template
- /var/www/apple/template
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>EmailAccountDescription</key> <string>nausch.org</string> <key>EmailAccountName</key> <string>%ANMELDENAME%</string> <key>EmailAccountType</key> <string>EmailTypeIMAP</string> <key>EmailAddress</key> <string>%MAILADRESSE%</string> <key>IncomingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>IncomingMailServerHostName</key> <string>imap.nausch.org</string> <key>IncomingMailServerPortNumber</key> <integer>993</integer> <key>IncomingMailServerUseSSL</key> <true/> <key>IncomingMailServerUsername</key> <string>%MAILADRESSE%</string> <key>IncomingPassword</key> <string></string> <key>OutgoingMailServerAuthentication</key> <string>EmailAuthPassword</string> <key>OutgoingMailServerHostName</key> <string>mx01.nausch.org</string> <key>OutgoingMailServerPortNumber</key> <integer>587</integer> <key>OutgoingMailServerUseSSL</key> <true/> <key>OutgoingMailServerUsername</key> <string>%MAILADRESSE%</string> <key>OutgoingPasswordSameAsIncomingPassword</key> <true/> <key>PayloadDescription</key> <string>eMail Account Konfiguration.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org.email</string> <key>PayloadOrganization</key> <string>DJANGO</string> <key>PayloadType</key> <string>com.apple.mail.managed</string> <key>PayloadUUID</key> <string>A5115AD5-3A86-4C4F-B964-576A757409AB</string> <key>PayloadVersion</key> <integer>1</integer> <key>PreventAppSheet</key> <true/> <key>PreventMove</key> <false/> <key>SMIMEEnabled</key> <false/> <key>disableMailRecentsSyncing</key> <false/> </dict> </array> <key>PayloadDescription</key> <string>Profilbeschreibung.</string> <key>PayloadDisplayName</key> <string>nausch.org</string> <key>PayloadIdentifier</key> <string>nausch.org</string> <key>PayloadOrganization</key> <string>nausch.org</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>E99CC7F7-6E38-4A1D-97DC-232143F67BC1</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
PHP-Webseite
Wir legen uns nun ein kleines PHP-Script an, welches uns folgende Arbeit abnimmt.
- Abfragen der beiden Werte vollständigen Namen sowie eMail-Adresse
- Einfügen der Daten in die Vorlagedatei
- Signieren der Profildatei mit einem x.509 Zertifikat
- Transfer der signierten Profildatei zum User
Hilfreiche Informationen, Tips und Befehlsbeschreibungen findet man bei Bedarf im PHP-Handbuch.
Mit dem Editor unserer Wahl legen wir uns nun auf unserem Webserver im Webspace nachfolgende Datei an. Die Angaben im HEADER, im Teil FORMULAR und FOOTER passen wir natürlich individuell an!
# vim /var/www/autoconfig/apple/mailsetup.php
- /var/www/autoconfig/apple/mailsetup.php
<?php if (isset($_REQUEST['username'])): ?> <?php // Vorlagedatei holen und Werte ersetzen $template = file_get_contents("/var/www/apple/template"); //$filehandle = fopen('/var/www/apple/template', 'r'); //$template = fread($filehandle, 2564); //fclose($filehandle); $template = str_replace('%MAILADRESSE%', $_REQUEST['email'], $template); $template= str_replace('%ANMELDENAME%', $_REQUEST['username'], $template); // Timestamp holen für Temp-Filename $timestamp = microtime(true); // generiertes Konfigfile (conf) in einer Datei speichern $filehandle = fopen("/var/www/apple/$timestamp", "w"); fwrite($filehandle, $template); fclose($filehandle); // holen und vorbereiten des privaten Schlüssels aus einer Datei. $filehandle = fopen("/var/www/apple/certificate.key", "r"); $private_key = fread($filehandle, 1675); fclose($filehandle); $privatekey = openssl_get_privatekey($private_key); // holen und vorbereiten des Signing-Zertifikates aus einer Datei. $filehandle = fopen("/var/www/apple/certificate.crt", "r"); $certificate = fread($filehandle, 1846); fclose($filehandle); // Konfigurations mit signing-Zertifikat signieren if (!openssl_pkcs7_sign ( $certificate, $privatekey, array(), 0 , realpath('/var/www/apple/certificate.chainfile') ) ) die ("Fehler beim Signieren der Konfigurationsdatei!"); // Privatekey aus Speicher löschen openssl_free_key($privatekey); $befehl = "/usr/bin/openssl smime -sign -in /var/www/apple/$timestamp -out /var/www/apple/$timestamp.signiert -signer /var/www/apple/comodo.crt -inkey /var/www/apple/comodo.key -certfile /var/www/apple/comodo.chainfile -outform der -nodetach"; $output = exec($befehl); // signierte base64 codierte Konfigurationsdatei holen und den nicht // benötigten Headerteil entfernen $signed_data = file_get_contents("/var/www/apple/$timestamp.signed"); $decoded_data = base64_decode(preg_replace('/(.+\n)+\n/', '', $signed_data, 1)); // Ergebnis in einer Datei sichern. $fp = fopen("/var/www/apple/$timestamp.cutted", "w"); fwrite($fp, $decoded_data); fclose($fp); $iPhoneSignedResponse = file_get_contents('php://input'); // header für Download setzen header('Content-type: application/x-apple-aspen-config; chatset=utf-8'); header('Content-Disposition: attachment; filename="iPMC.mobileconfig"'); // Konfigurationsfile zum Client schicken // unsigniertes Profil //$template = file_get_contents("/var/www/apple/$timestamp"); // signiertes Profil von openssl //$template = file_get_contents("/var/www/apple/$timestamp.signiert"); // signiertes Profil mit Hilfe PHP openssl $template = file_get_contents("/var/www/apple/$timestamp.cutted"); echo $template; // Temporäre Dateien löschen //echo unlink("/var/www/apple/$timestamp"); //echo unlink("/var/www/apple/$timestamp.signed"); //echo unlink("/var/www/apple/$timestamp.cutted"); ?> <?php else: ?> <html> <head> <title>Automatische eMail-Konfiguration für Apple iPhone</title> <meta name="viewport" content="width=device-width; initial-scale=1; user-scalable=no" /> </head> <body style="font: 100% Verdana;"> <!-- ********** HEADER START ********** --> <h2> <a href="http://dokuwiki.nausch.org/doku.php/start"><img src="logo.png" width="64" height="64" alt="nausch.org LOGO"></a> eMail-Services bei nausch.org </h2> <p> <a href="https://www.cacert.org/index.php?id=3">CAcert Root-Zertifikate</a> | <a href="https://buero.nausch.org">Webmailer</a> | <a href="http://keyserver.nausch.org">SKS-Keyserver</a> | <a href="http://dokuwiki.nausch.org/doku.php/centos:openpgp_beim_mua">Djangos WIKI</a> | <a href="http://omni128.de/doku.php/impressum">Impressum</a> </p> <hr> <br> <!-- ********** HEADER ENDE ********** --> <!-- ********** FORMULAR START ********** --> <form method="post" action="mailsetup.php"> <p style="text-align: center"> Zum Erstellen Deiner individuellen AutoKonfig-Datei für Dein Apple-Gerät benötigen wir nun noch ein paar Angaben. Trage in die beiden Felder die gewünschten Daten ein. Dein Benutzername erscheint dann bei der eMailadresse links neben der eMail-Adresse.<br> <br> Bsp.:<br> <b>Benutzername</b> = <i>Django [BOfH]</i> <b>eMail-Adresse</b> = <i>django@nausch.org</i><br> ergibt:<br> <b><i> Django [BOfH] <django@nausch.org></i></b><br><br> Zum Erstellen Deiner Konfigurationsdatei klicke bitte auf die Schaltfläche <b>Senden</b><br> <br> <br> <b>Benutzername: </b><input type="text" name="username" style="height: 30px; width: 250px;"/> <b>eMail-Adresse: </b><input type="text" name="email" style="height: 30px; width: 300px;"/> <br> <br> <input type="submit" value="Senden" style="width: 80px; height: 30px;"/> </p> </form> <!-- ********** FORMULAR ENDE ********** --> <!-- ********** FOOTER START ********** --> <hr> <!-- ********** FOOTER ENDE ********** --> </body> </html> <?php endif ?>
Signier-Zertifikat und -Schlüssel
Zum Signieren der Profildateien benötigen wir noch ein passendes x.509-Zertifikat. Sofern uns das Zertifikat und der dazu gehörige Schlüssel noch nicht einzeln vorliegt, können wir diese auch aus einem P12-Zertifikatscontainer extrahieren.
In den folgenden Schritten exportieren wir nun das Zertifikat und den Schlüssel aus dem Zertifikatscontainer, so dass unser PHP-Script auf beide Teile zugreifen kann.
- Schlüssel exportieren:
Im ersten Schritt exportieren wir nun den RSA-Key aus dem Zertifikatscontainer.# openssl pkcs12 -in certificate-container.p12 -nocerts -out certificate_mit_passphrase.key
Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
- Keydatei normalisieren:
Beim exportierten Schlüssel, sind noch Zusatzinformationen (die ersten vier Zeilen) enthalten, die wir nun noch entfernen.# vim certificate_mit_passphrase.key
Bag Attributes friendlyName: Michael Nausch's Root CA ID localKeyID: 8E D8 F2 19 82 E6 6D 14 08 19 67 0B B6 70 33 C4 24 39 20 85 Key Attributes: <No Attributes> -----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgBur$1ck1$T31NV011IDI07BkiG9w0BBQwwDgQI9KkTgM0blTECAggA MBQGCCqGSIb3DQMHBAj/FsaQiJyUjASCBMjaR8 ...
Hier entfernen wir alles vor der ersten Zeile, so daß die erste Zeile den String
—–BEGIN ENCRYPTED PRIVATE KEY—–
enthält.-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgBur$1ck1$T31NV011IDI07BkiG9w0BBQwwDgQI9KkTgM0blTECAggA MBQGCCqGSIb3DQMHBAj/FsaQiJyUjASCBMjaR8 ...
- Passphrase des Schlüssels entfernen:
Da wir später mit Hilfe unseres Scriptes auf die Schlüsseldatei zugreifen wollen, löschen wir noch die ggf. vorhandene Passphrase.# openssl rsa -in certificate_mit_passphrase.key -out certificate.key
Enter pass phrase for certificate.key: writing RSA key
- Zertifikat exportieren:
# openssl pkcs12 -in certificate-container.p12 -clcerts -nokeys -out certificate.crt
Enter Import Password: MAC verified OK
- Zertifikat normalisieren:
# vim certificate.crt
Beim exportierten Zertifikat, sind noch Zusatzinformationen (die ersten fünf Zeilen) enthalten, die wir nun noch entfernen.
Attributes friendlyName: Michael Nausch's Root CA ID localKeyID: 8E D8 F2 19 14 08 19 67 49 0B B6 70 33 C4 24 39 20 85 subject=/CN=Michael Nausch/emailAddress=codesigning@nausch.org issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org -----BEGIN CERTIFICATE----- MIIFoDCCA4igAwIBAgIDDTYBMA0GCSqGSIb3DQEBBQUAMHkxEDAO7gNVBAoTB1Jv b3QgQ0ExHjAcBgNVBAsT4Eh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ Q0EgQ2VydCBTaWduaW5 ...
# vim certificate.crt
-----BEGIN CERTIFICATE----- MIIFoDCCA4igAwIBAgIDDTYBMA0GCSqGSIb3DQEBBQUAMHkxEDAO7gNVBAoTB1Jv b3QgQ0ExHjAcBgNVBAsT4Eh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ Q0EgQ2VydCBTaWduaW5 ...
- temporäre Dateien vernichten:
Zum Schluß vernichten wir noch die nicht mehr benötigten Zertifikatsbestandteile.# shred certificate-container.p12 certificate_mit_passphrase.key
Test
Zum Testen unserer Konfiguration besuchen wir mit dem Webbrowser Safari die URL unseres Konfigurators: https://autoconfig.nausch.org/apple/mailsetup.php
Nach Eingabe der Daten und Anwahl der Schaltfläche [Senden] fällt uns, bei Eingabe der notwendigen Daten in die beiden Felder, z.B. folgende Profil-Datei entgegen. https://autoconfig.nausch.org/apple/iPMC.mobileconfig
Am Apple-Endgerät wird uns entsprechend das heruntergeladene Profil angezeigt. Da das Profil signiert wurde, taucht nun kein rote Hinweis Unsigniert in der Darstellung auf, sondern ein Überprüft.
Über den Menüpunkt [Mehr Details] findet man weitere Angaben zu den Inhalten des Konfigurationsprofils.
Tippt man auf die Schaltfläche [Signierungszertifikat] erhält man detailierte Informationen zum verwendeten Signierungszertifikat, welches zum Signieren des Konfigurationsprofils verwendet wurde.
Über die Schaltfäche [Profil Installieren] kommen wir zurück zum Installationsfenster. Wir werden nun nach dem Konfigurationspasswort des Apple-Gerätes gefragt. Diese geben wir hier ein.
Nun geben wir das Anmeldepasswort des Mailservers ein, welches wir vom Mailserverbetreiber erhalten haben.
Nun ist die Konfiguration des Mailclients vollständig und wir können den Mailclient nutzen, ohne großen zusätzlichen Konfigurationsaufwand und der Kenntnis der dazu nötigen Konfigurationsparameter.
Wir können auch das installierte Profil „Überprüfen“, das grüne Häkchen zeigt an, dass das Konfigurationsprofil von der richtigen Quelle stammt und nicht von Dritten verändert wurde.
Bei diesem Konfigurationsbeispiel ist nun die Einrichtung am Apple-Endgerät sehr einfach und anwendungsfreundlich zu installieren.
Der grüne Haken Überprüft und der dazu grün markierte Text zeigen dem Anwender nun auch an, dass das vom Mailserverbetreiber signierte Konfigurations-Profil nicht verändert wurde, also „echt“ ist. Der Transportweg des Konfigurationsprofils erfolgte dabei verschlüsselt von der Seite https://autoconfig.nausch.org/apple/mailsetup.php