![]() |
Open Interfaces für das eGovernment |
![]() |
Die österreichische Bürgerkarte
Transportprotokolle Security-Layer
Bezeichnung |
Transportprotokolle für die Applikationsschnittstelle Security-Layer der österreichischen Bürgerkarte |
Kurzbezeichnung |
Transportprotokolle Security-Layer |
Version |
1.2.1 |
Datum |
01. 03. 2005 |
Dokumentklasse |
Konvention |
Dokumentstadium |
Empfehlung |
Kurzbeschreibung |
Das Dokument Applikationsschnittstelle Security-Layer definiert die XML-Struktur sowie die notwendige Funktionalität der Schnittstellenbefehle des Security-Layer. Dieses Dokument beschreibt, wie diese XML-Befehle in eine Reihe von Transportprotokollen eingebunden werden können. |
Autoren |
Arno Hollosi |
Arbeitsgruppe |
Bundeskanzleramt, Stabsstelle IKT-Strategie des Bundes, Technik und Standards |
© |
Diese Spezifikation wird von A-SIT und dem Bundeskanzleramt zur Verfügung gestellt. Die Verwendung ohne Modifikation ist unter Bezugnahme auf diese Copyright-Notiz zulässig. Eine Erweiterung der Spezifikation ist erlaubt, jedoch muss dies eindeutig gekennzeichnet sein, und es muss die erweiterte Spezifikation frei zur Verfügung gestellt werden. |
Das Dokument Applikationsschnittstelle Security-Layer definiert die XML-Befehle, mit denen eine Applikation die Funktionalität der Bürgerkarte über die Schnittstelle Security-Layer nutzen kann. Dieses Dokument beschreibt, wie diese XML-Befehle in bestimmte Transportprotokolle eingebunden werden. Das folgende Blockbild zeigt die prinzipielle Struktur der Bürgerkarten-Umgebung. Die XML-Befehle werden über verschiedene Module an Transportprotokolle gebunden, im Bild z.B. an TCP/IP und HTTP. Die Module sorgen für die notwendige Umsetzung und Kodierung - die funktionalen Module der Bürgerkarten-Umgebung arbeiten nur mit den definierten XML-Kommandos und sind gegenüber dem Transport und den Eigenschaften des verwendeten Protokolls ignorant.
Die Adresse einer Bindung ist durch den verwendeten Internet-Socket bestimmt. Die Socket-Adresse besteht aus zwei Teilen: IP-Adresse und Portnummer. Für jede Bindung einer lokalen Bürgerkarten-Umgebung wird eine Default-IP-Adresse (bzw. DNS-Name) sowie eine Default-Portnummer spezifiziert.
Sofern Bindungen über die Art der übertragenen Daten unterschieden werden können, ist es möglich, dass Bindungen denselben Port benützen. Im Besonderen wird darauf hingewiesen, dass sich die TCP/IP-Bindung und die HTTP-Bindung eine Adresse teilen können müssen, ebenso wie die TLS- und HTTPS- Bindung (diese Anforderung ergibt sich aus den Default-Werten für die Ports). Die Internet Assigned Numbers Authority (IANA) hat für Bindungen des Security-Layer zwei Ports reserviert [port-numbers] (siehe Default-Werte in den Abschnitten 2.1, 3.1, 4.1 und 5.1).
Zur besseren Lesbarkeit wurde in diesem Dokument auf geschlechtsneutrale Formulierungen verzichtet. Die verwendeten Formulierungen richten sich jedoch ausdrücklich an beide Geschlechter.
Folgende Namenraum-Präfixe werden in dieser Spezifikation zur Kennzeichnung der Namenräume von XML-Elementen verwendet:
Präfix |
Namenraum |
Erläuterung |
sl |
http://www.buergerkarte.at/namespaces/securitylayer/1.2# |
Elemente der Schnittstellenspezifikation |
Dieses Dokument verwendet die Schlüsselwörter muss, darf nicht, erforderlich, sollte, sollte nicht, empfohlen, darf, und optional zur Kategorisierung der Anforderungen. Diese Schlüsselwörter sind analog zu ihren englischsprachigen Entsprechungen must, must not, required, should, should not, recommended, may, und optional zu handhaben, deren Interpretation in [Keywords] festgelegt ist.
Die TCP/IP-Bindung ist eine 1:1 Umsetzung der Security-Layer-Befehle. Es wird eine übliche TCP/IP-Verbindung über einen Socket benutzt. Die XML-Befehle laut Applikationsschnittstelle Security-Layer werden ohne weitere Kodierung oder Umsetzung/Einbettung in der Verbindung übertragen.
Bezeichner und Parameter einer Bindung werden im Befehl GetProperties
des Security-Layer
verwendet. Diese Bindung trägt
den Bezeichner TCP/IP
und hat keine Parameter.
Die Default-IP-Adresse
der TCP/IP-Bindung für lokale
Bürgerkarten-Umgebungen ist 127.0.0.1
,
der Default-Port 3495
.
Es erfolgt keine weitere, einbettende Kodierung. Die XML-Befehle werden 1:1 in der TCP/IP-Verbindung übertragen.
Die HTTP-Bindung bietet der Applikation die Möglichkeit, über den Web-Browser des Bürgers direkt und ohne weitere aktive Komponenten (wie z.B. ein Applet) auf die Funktionen der Bürgerkarte zuzugreifen. Dazu ist eine entsprechende Einbettung des XML-Requests in einen HTTP-Request erforderlich.
Bezeichner und Parameter der Bindung werden im Befehl GetProperties
des Security-Layer
verwendet. Diese Bindung trägt
den Bezeichner HTTP
und hat keine Parameter.
Die Default-IP-Adresse
der HTTP-Bindung für lokale
Bürgerkarten-Umgebungen ist 127.0.0.1
,
der Default-Port 3495
.
Die Applikation übermittelt der Bürgerkarten-Umgebung bei der HTTP-Bindung ein HTML-Formular (vergleiche [HTML 4], Abschnitt 17.13), das eine Reihe von Formularelementen enthält. In den weiteren Ausführungen werden die Formularelemente in folgende Kategorien eingeteilt:
XMLRequest
, RedirectURL
,
DataURL
und StylesheetURL
. Für detaillierte
Informationen siehe Abschnitt 3.2.2.DataURL
von der Bürgerkarten-Umgebung
an den mittels DataURL
bezeichneten Server als Formularelement
weitergegeben werden. Ein Formularelement wird zum Weitergabe-Parameter,
wenn sein Name mit dem Zeichen _
(Unterstrich) endet. Siehe
auch Abschnitt 3.3.2.2.DataURL
von der Bürgerkarten-Umgebung
an den mittels DataURL
bezeichneten Server als HTTP-Header
weitergegeben werden. Ein Formularelement wird zum Weitergabe-Header, wenn
sein Name mit der Zeichenfolge __
(doppelter Unterstrich) endet.
Der Name des Weitergabe-Headers ist beliebig; der Wert des Weitergabe-Headers
besteht dabei aus dem HTTP-Header-Namen, einem Doppelpunkt sowie dem HTTP-Header-Wert
(also genau wie eine Header-Zeile im HTTP-Request, z.B. Header: Value
.
Siehe auch Abschnitt 3.3.2.2.Im Kontext der HTTP-Bindung ist es möglich Formularelemente, die im HTTP-Request übergeben werden, vom einem Security-Layer Befehl aus zu referenzieren. Dabei können nicht nur die oben definierten Formular-Parameter referenziert werden, sondern beliebige Formularelemente (Formular-Parameter, Weitergabe-Parameter, Weitergabe-Header und sonstige Formular-Felder). Mögliche Anwendungsfälle sind das Referenzieren bei den Signaturbefehlen Create(XML|CMS)Signature und Verify(XML|CMS)Signature.
Das in einer solchen URL zu verwendende Protokoll lautet formdata
.
Als opaker Teil der URL ist der Name des zu referenzierenden Formularelements
anzugeben. Als Auflösung der URL muss die Bürgerkarten-Umgebung
den Wert des referenzierten Formularelements liefern.
Lautet die HTML-Schreibweise des Formularelements beispielsweise <input
name="summary" value="Eine kurze Zusammenfassung"/>
,
so wird auf dieses Element mit der URL formdata:summary
referenziert.
Das Ergebnis der Aulösung ist der String Eine kurze Zusammenfassung
.
Folgende Formular-Parameter zur Steuerung des Ablaufs in der Bürgerkarten-Umgebung stehen zur Verfügung:
XMLRequest
RedirectURL
DataURL
StylesheetURL
Anmerkung: Abschnitt
3.2.4 listet sinnvolle Kombinationen der Formular-Parameter RedirectURL
,
DataURL
und StylesheetURL
.
RedirectURL
angegeben worden, schickt
die Bürgerkarten-Umgebung als Antwort einen HTTP-Redirect (HTTP Code:
302 oder 303) mit der in diesem Parameter angegebenen
URL an die Applikation und schließt die Browser-Verbindung.XMLRequest
und bearbeitet ihn.DataURL
angegeben worden, schickt
die Bürgerkarten-Umgebung die Befehls-Response
entsprechend Kapitel 3.3.2.2 kodiert an den mittels DataURL
bezeichneten Server. Die Antwort des Servers beeinflusst den Ablauf
wie folgt: text/xml
oder text/plain
oder text/html
und Inhalt der
HTTP-Response gleich <ok/>
(in exakt dieser Schreibweise):
die Verarbeitung setzt in Schritt 6 fort.text/xml
und Inhalt der HTTP-Response
ungleich <ok/>
: Die Daten werden als Befehls-Request
ausgewertet und dem Formular-Parameter XMLRequest
zugewiesen.
Die anderen Formular-Parameter (StylesheetURL
, RedirectURL
und DataURL
),
Weitergabe-Parameter und -Header sowie die sonstigen (referenzierbaren)
Formular-Felder bleiben unverändert.
Die Verarbeitung setzt in Schritt 4 fort.text/xml
: Der
Inhalt der HTTP-Response wird als Befehls-Request
ausgewertet und dem Formular-Parameter XMLRequest
zugewiesen. Der Inhalt des HTTP-Headers Location
wird dem Formular-Parameter DataURL
zugewiesen. Die
anderen Formular-Parameter (StylesheetURL
und RedirectURL
), Weitergabe-Parameter
und -Header sowie die sonstigen (referenzierbaren) Formular-Felder
bleiben unverändert.
Die Verarbeitung setzt in Schritt 4 fort.application/x-www-form-urlencoded
oder multipart/form-data
: Der
Inhalt der HTTP-Response wird als Sammlung
von Formularelementen ausgewertet. Die bisherigen Formular-, Weitergabe-Parameter
und -Header sowie die sonstigen (referenzierbaren) Formular-Felder werden
verworfen. Stattdessen werden die in der HTTP-Response enthaltenen Formular-Parameter,
Weitergabe-Parameter und -Header sowie die dort ggf. ebenfalls enthaltenen
sonstigen (referenzierbaren) Formular-Felder verwendet. Die Verarbeitung
setzt in Schritt 3 fort.StylesheetURL
angegeben, liest die Bürgerkarten-Umgebung
einen XSL-Stylesheet von der darin angegebenen
Adresse und transformiert damit die
Befehls-Response.
RedirectURL
nicht angegeben, schickt die Bürgerkarten-Umgebung die (eventuell transformierte) Befehls-Response
in der Browser-Verbindung und schließt die Browser-VerbindungEine serverbasierte Bürgerkarten-Umgebung darf in der Browserverbindung zwischen den Schritten 2 und 3 (bei Verwendung eines Redirects) bzw. zwischen den Schritten 2 und 7 (sonst) auch die Kommunikation der Benutzerschnittstelle abwickeln (und dabei z.B. auch Cookies setzen). Die Applikation darf also nicht davon ausgehen, dass als Antwort auf den gesendeten HTTP-Request unmittelbar der Redirect bzw. das Befehlsergebnis retourniert wird.
Anmerkung: Ist eine RedirectURL
angegeben, wird
im Schritt 3 die Browser-Verbindung beendet.
Ein ggf. zu einem späteren Zeitpunkt notwendiges Senden von Daten an die
Broswerverbindung (z.B. im Fall 5e) ist dann nicht mehr möglich. In
diesem Fall muss
die Bürgerkarten-Umgebung eine entsprechende Fehlermeldung über
die Benutzerschnittstelle ausgeben.
Anmerkung: Wenn im obigen Ablauf als Bedingung
formuliert ist, dass der HTTP-Header Content-Type beispielsweise gleich text/plain
sein muss, bedeutet dass lediglich, dass der Media-Type grundsätzlich text/plain
sein muss. Lautet der tatsächliche Wert von Content-Type etwa text/plain;
charset=ISO-8859-1
, ist die Bedingung ebenfalls erfüllt.
Anmerkung: Aus den Erläuterungen zu den Fällen 5b, 5c und 5d ergibt sich, dass sowohl die veränderten als auch die unverändert gebliebenen Parameter im nächsten HTTP-Response erneut an den mittels DataURL bezeichneten Server gesendet werden müssen.
Anmerkung: Eine Applikation, welche den
Formular-Parameters DataURL
verwendet, sollte im Allgemeinen davon
ausgehen, dass eine Bürgerkarten-Umgebung kein Cookie-Management implementiert
hat und daher auf den Cookie-Mechanismus von HTTP verzichten.
Aus dem in Abschnitt
3.2.3 beschriebenen Ablauf ergeben sich sinnvolle und nicht sinnvolle
Kombinationen der Formular-Paramter RedirectURL
, DataURL
und StylesheetURL
. Die folgende Tabelle
gibt eine Übersicht und erläutert kurz die Auswirkungen:
Redirect-URL
|
Data-URL
|
Stylesheet-URL
|
Sinn
|
Auswirkung |
---|---|---|---|---|
- |
- |
- |
beschränkt sinnvoll |
Befehls-Response wird direkt an die aufrufende Applikation geschickt. Nur für Auswertung durch Programme oder Scripts geeignet. Für Endanwender nicht geeignet, da sie mit XML als Klartext konfrontiert werden. |
- |
- |
X |
sinnvoll |
Befehls-Response wird nach HTML transformiert und an aufrufende Applikation geschickt. |
- |
X |
- |
sinnvoll |
Sinnvoll. Befehls-Response
wird an den mittels |
- |
X |
X |
sinnvoll |
Das Resultat wird an den mittels |
X |
- |
- / X |
nicht sinnvoll |
Die Applikation wird umgeleitet, aber die Befehls-Response kann von niemandem in Empfang genommen werden. |
X |
X |
- |
sinnvoll |
Die Applikation erhält sofort einen Redirect, die Befehls-Response wird an den mittels |
X |
X |
X |
nicht sinnvoll |
|
Der HTTP-Request
der Applikation an die Bürgerkarten-Umgebung muss entsprechend [HTTP
1.1] kodiert sein. Die
Methode muss entweder GET
oder POST
sein, es müssen beide Varianten von der Bürgerkarten-Umgebung
unterstützt werden. (Anmerkung: manche Webclients
unterstützen nur eine limitierte Größe der GET
Requests.) Die Kodierung kann als application/x-www-form-urlencoded
oder als multipart/form-data
erfolgen,
beide Formate müssen von
der Bürgerkarten-Umgebung unterstützt werden.
Wird der HTTP-Request an eine lokale
Bürgerkarten-Umgebung
gesendet, muss er an die URL /http-security-layer-request
erfolgen. Andernfalls muss die Bürgerkarten-Umgebung
mit einer HTTP 404 Fehlermeldung antworten. Wird der HTTP-Request hingegen an
eine serverbasierte
Bürgerkarten-Umgebung gesendet, darf
der Diensteanbieter eine beliebige URL vorgeben.
Sendet die Bürgerkarten-Umgebung die Befehls-Response in der Browser-Verbindung
(vgl. Abschnitt 3.3.2, Ziffer 7), muss
sich die Bürgerkarten-Umgebung unter Verwendung des HTTP-Headers Server
(vgl. [HTTP 1.1], Abschnitt 14.38) identifizieren.
Der HTTP-Header Server
muss
dabei folgendem Muster entsprechen:
Server = "Server" ":" "citizen-card-environment"
"/" cceVersion " " productName "/" productVersion
Es sind also zwei Produkt-Token anzugeben: Der erste drückt aus, dass
es sich beim beim Server um eine Bürgerkarten-Umgebung handelt; cceVersion
gibt die neueste Version der Security-Layer-Spezifikation an, welche die Bürgerkarten-Umgebung
unterstützt (also etwa 1.2
für diese Version). Der
zweite Produkt-Token bezeichnet den Hersteller der Bürgerkarten-Umgebung;
productName
und productVersion
sind innerhalb der
Grenzen von [HTTP 1.1] frei wählbar.
Die Bürgerkarten-Umgebung muss sich nach der selben Methode auch dann identifizieren, wenn sie in der Browser-Verbindung einen HTTP-Redirect sendet (vgl. Abschnitt 3.2.2, Ziffer 3).
Die Befehls-Response wird als Nutzinhalt der HTTP-Response an den Browser
übermittelt (vergleiche Abschnitt 3.2.3,
Fall 5a). Jedenfalls muss die Bürgerkarten-Umgebung den HTTP-Header Content-Type
setzen:
text/xml
verwendet werden (wenn die Befehlsresponse laut Abschnitt
3.2.3, Schritt 6 nicht mit Hilfe eines Stylesheets
transformiert wurde), oder aber jener MIME Media Type,
der sich aus der angewandten Stylesheet-Transfomation ergibt.application/octet-stream
verwendet
werden.Sendet die Bürgerkarten-Umgebung eine Befehls-Response per HTTP-Request
an den mittels DataURL
bezeichneten Server (vgl. Abschnitt 3.2.2,
Ziffer 5), muss sich die Bürgerkarten-Umgebung
unter Verwendung des HTTP-Headers User-Agent
(vgl. [HTTP
1.1], Abschnitt 14.43) identifizieren. Der HTTP-Header User-Agent
muss dabei folgendem Muster entsprechen,
wobei die im Muster verwendeten Variablen wie in Abschnitt 3.3.2.1 zu interpretieren
sind:
User-Agent = "User-Agent" ":" "citizen-card-environment"
"/" cceVersion " " productName "/" productVersion
Der HTTP-Request an den mittels DataURL
bezeichneten Server
muss nach der Methode POST
(vgl. [HTTP 1.1], Abschnitt 9.5) erfolgen, als multipart/form-data
kodiert sein, und folgende Formularfelder enthalten:
ResponseType
HTTP-Security-Layer-RESPONSE
gesetzt
(kann in späteren Versionen zur Unterscheidung herangezogen werden).
XMLResponse
Content-Type
muss für diesen Mime Part verwendet werden und ist fix mit
dem Wert text/xml
zu belegen (siehe auch Anmerkung 2 in Abschnitt 3.2.3).BinaryResponse
Enthält die Befehls-Response, falls sie nicht als XML-Struktur vorliegt
(z.B. Binär-Response auf die Befehle sl12:DecryptCMSRequest
oder sl12:DecryptXMLRequest
). Der Header Content-Type
muss
für diesen Mime Part verwendet werden, um den Content-Type der Binär-Response
zu bezeichnen. Ist der Content-Type nicht bekannt, so muss
der Feldwert mit application/octet-stream
angegeben werden (siehe auch Anmerkung 2 in Abschnitt 3.2.3).
DataURL
bezeichneten Server unverändert übernommen.DataURL
bezeichneten Server als HTTP-Header aufgenommen. Für Zugriffe auf die DataURL
und die StylesheetURL
müssen HTTP und HTTPS als Protokolle
unterstützt werden.
Die TLS-Bindung ist eine 1:1 Umsetzung der Security-Layer-Befehle. Es wird eine übliche TLS-Verbindung [TLS] über einen Socket benutzt. Die XML-Befehle laut Applikationsschnittstelle Security-Layer werden ohne weitere Kodierung oder Umsetzung/Einbettung in der Verbindung übertragen.
Die TLS-Bindung entspricht von Ablauf und Aufbau her der TCP/IP-Bindung, mit dem Unterschied, dass das zugrundeliegende Transportprotokoll TLS ist.
Bezeichner und Parameter einer Bindung werden im Befehl GetProperties
des Security-Layer
verwendet. Diese Bindung trägt
den Bezeichner TLS
und hat keine Parameter.
127.0.0.1
,
der Default-Port 3496
.
Der Ablauf ist analog zu jenem der TCP/IP-Bindung (vergleiche Abschnitt 2.2), mit dem Unterschied, dass im Punkt 2 beim Aufbau der Verbindung zusätzlich entsprechend TLS ein Handshake und eine Verschlüsselung des Kanales stattfindet.
Es erfolgt keine weitere, einbettende Kodierung. Die XML-Befehle werden 1:1 in der TLS-Verbindung übertragen.
Die HTTPS-Bindung bietet wie die HTTP-Bindung der Applikationdie Möglichkeit direkt und ohne weitere aktive Komponenten (wie z.B. ein Applet) auf die Funktionen der Bürgerkarte zuzugreifen. Dazu ist eine entsprechende Einbettung des XML-Requests in einen HTTP-Request erforderlich.
Die HTTPS-Bindung entspricht der HTTP-Bindung mit dem Unterschied, dass das zugrundeliegende Transportprotokoll HTTPS [HTTPS] (HTTP mit TLS [TLS]) ist.
Bezeichner und Parameter einer Bindung werden im Befehl GetProperties
des Security-Layer
verwendet. Diese Bindung trägt
den Bezeichner HTTPS
und hat keine Parameter.
127.0.0.1
,
der Default-Port 3496
.
Der Ablauf ist analog zu jenem der HTTP-Bindung, mit dem Unterschied, dass im Punkt 2 beim Aufbau der Verbindung zusätzlich entsprechend TLS ein Handshake und eine Verschlüsselung des Kanals stattfindet.
Die Kodierung erfolgt wie in Abschnitt 3.3 für die HTTP-Bindung festgelegt, mit folgenden Ausnahmen:
/https-security-layer-request
erfolgen.ResponseType
auf den Wert HTTPS-Security-Layer-RESPONSE
gesetzt werden.Datum |
Version
|
Änderungen |
---|---|---|
01. 03. 2005 | 1.2.1 |
|
14. 05. 2004 |
1.2.0
|
|
1.1.0
|
|
|
1.0.1
|
|