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.

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  ]

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

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:

  1. vollständigen Namen für den eMail-account, z.b. Nerd
  2. eMail-Adresse z.B. nerd1@it-ignorant.de
  3. 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.
  4. Kennwort für eingehende eMails, z.B. Zipfegladscha
  5. 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.

Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient

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].

Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient

Auf den folgenden Fenstern geben wir nun die oben genannten noch fehlenden Angaben ein.

  1. vollständigen Namen für den eMail-account, z.b. Nerd

    Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient
  2. eMail-Adresse z.B. nerd1@it-ignorant.de

    Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient
  3. 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.

    Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient
  4. Kennwort für eingehende eMails, z.B. Zipfegladscha

    Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient
  5. 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.

    Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient

Mit einem abschließendem Tippen auf die Schaltfläche [Weiter] kommen wir zur letzten Anzeige.

Bild: Bildschirmhardcopy von der Installation des Profils für den Mailclient

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:

  1. So richtig komfortabel ist, das noch nicht, sind doch noch viele Eingaben am Apple-Gerät notwendig.
  2. 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. LOL

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:

  1. vollständigen Namen für den eMail-account, z.b. Nerd
  2. eMail-Adresse z.B. n3rd@it-ignorant.de
  3. 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.
  4. 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&uuml;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>
   &nbsp;|&nbsp;
   <a href="https://buero.nausch.org">Webmailer</a>
   &nbsp;|&nbsp;
   <a href="http://keyserver.nausch.org">SKS-Keyserver</a>
   &nbsp;|&nbsp;
   <a href="http://dokuwiki.nausch.org/doku.php/centos:openpgp_beim_mua">Djangos WIKI</a>
   &nbsp;|&nbsp;
   <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&uuml;r Dein Apple-Ger&auml;t ben&ouml;tigen wir
    nun noch ein paar Angaben. Trage in die beiden Felder die gew&uuml;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] &lt;django@nausch.org&gt;</i></b><br><br>
    Zum Erstellen Deiner Konfigurationsdatei klicke bitte auf die Schaltfl&auml;che <b>Senden</b><br>
    <br>
    <br>
    <b>Benutzername:&nbsp;</b><input type="text" name="name" style="height: 30px; width: 250px;"/>
    <b>eMail-Adresse:&nbsp;</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

Bild: Bildschirmhardcopy der Webseite zur iPhone-Konfiguration

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.

Bild: Bildschirmhardcopy der Mailkonto-Konfiguration am iPad

Über den Menüpunkt [Mehr Details] findet man weitere Angaben zu den Inhalten des Konfigurationsprofils.

Bild: Bildschirmhardcopy der Mailkonto-Konfiguration am iPad

Auf die vorherige Seite kommen wir zurück über den Menüpunkt [Profil installieren].

Bild: Bildschirmhardcopy der Mailkonto-Konfiguration am iPad

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.

Bild: Bildschirmhardcopy der Mailkonto-Konfiguration am iPad

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.

Bild: Bildschirmhardcopy der Mailkonto-Konfiguration am iPad

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.

Bild: Bildschirmhardcopy der Mailkonto-Konfiguration am iPad

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.

  1. Abfragen der beiden Werte vollständigen Namen sowie eMail-Adresse
  2. Einfügen der Daten in die Vorlagedatei
  3. Signieren der Profildatei mit einem x.509 Zertifikat
  4. 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&uuml;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>
   &nbsp;|&nbsp;
   <a href="https://buero.nausch.org">Webmailer</a>
   &nbsp;|&nbsp;
   <a href="http://keyserver.nausch.org">SKS-Keyserver</a>
   &nbsp;|&nbsp;
   <a href="http://dokuwiki.nausch.org/doku.php/centos:openpgp_beim_mua">Djangos WIKI</a>
   &nbsp;|&nbsp;
   <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&uuml;r Dein Apple-Ger&auml;t ben&ouml;tigen wir
    nun noch ein paar Angaben. Trage in die beiden Felder die gew&uuml;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] &lt;django@nausch.org&gt;</i></b><br><br>
    Zum Erstellen Deiner Konfigurationsdatei klicke bitte auf die Schaltfl&auml;che <b>Senden</b><br>
    <br>
    <br>
    <b>Benutzername:&nbsp;</b><input type="text" name="username" style="height: 30px; width: 250px;"/>
    <b>eMail-Adresse:&nbsp;</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.

  1. 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:
  2. 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
    ...
  3. 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
  4. Zertifikat exportieren:
     # openssl pkcs12 -in certificate-container.p12 -clcerts -nokeys -out certificate.crt
    Enter Import Password:
    MAC verified OK 
  5. 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
    ...
  6. 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

Bild: Bildschirmhardcopy der Webseite zur iPhone-Konfiguration

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 :OK: Überprüft.

Bild: Bildschirmhardcopy - geladenes Profil am iPad

Über den Menüpunkt [Mehr Details] findet man weitere Angaben zu den Inhalten des Konfigurationsprofils.

Bild: Bildschirmhardcopy - Mehr Details zum Profil

Tippt man auf die Schaltfläche [Signierungszertifikat] erhält man detailierte Informationen zum verwendeten Signierungszertifikat, welches zum Signieren des Konfigurationsprofils verwendet wurde.

Bild: Bildschirmhardcopy - Details des verwendeten Signier-Zertifikates

Ü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.

Bild: Bildschirmhardcopy - Abfrage des Installationspasswortes am iPad

Nun geben wir das Anmeldepasswort des Mailservers ein, welches wir vom Mailserverbetreiber erhalten haben.

Bild: Bildschirmhardcopy - Abfrage des Zugangspasswortes für den Mailserver

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.

Bild: Bildschirmhardcopy - Installiertes Konfigurationsprofil

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.

Bild: Bildschirmhardcopy - Anzeige des installierten Profils

Bei diesem Konfigurationsbeispiel ist nun die Einrichtung am Apple-Endgerät sehr einfach und anwendungsfreundlich zu installieren.

Der grüne Haken :OK: Ü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

Links

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information