SOSI Komponenten
Under arbejdet med specifikationen af SOSI stod det hurtigt klart, at en lang række af de tekniske opgaver der ligger i at gøre et system klar til at indgå i en SOSI føderation er ens uanset den rolle systemet spiller. Alle parter har f.eks. brug for at kunne lave en digital signatur af XML data, at verificere digitale signaturer, at kunne læse information fra et ID-kort etc. Nogle af disse opgaver er desuden ikke-trivielle at implementere og vil måske udgøre en barriere for at komme i gang med SOSI.
For at sænke tærsklen og mindske udgifterne der er forbundet med at implementere Service Udbydere, Identitesservices og Service Aftagere, tilbyder SOSI projektet en Open Source Java komponent, der frit kan anvendes. Komponenten er et tilbud, ikke et krav for at kunne implementere SOSI. I første omgang udvikles komponenten i Java, men på sigt kan en .NET version også blive en realitet.
Ministeriet for Videnskab, Teknologi og Udvikling (VTU) stiller et komponentbibliotek til rådighed for offentlige projekter. SOSI komponenten
har sit eget projektrum her. I komponentbiblioteket findes også
kildekoden i et repository.
Komponenten er pt. under udvikling og forventes klar 15/6-2006. I sin fulde version vil komponenten tilbyde følgende funktionalitet:
Beregn hashværdi
Beregn hashværdien af et XML element til brug ved digital signering. Metoden anvendes bla. til at skabe den hash-værdi, en slutbruger skal underskrive via sit GUI når der er behov for uafviselighed på sikkerhedsniveau 5. Metoden vil kunne beregne hashværdier for både ID-kort og hele SOAP beskeder.
Tilknyt digital signatur til XML
Tilknyt en digital signatur til et dokument eller et ID-kort. Metoden benyttes bla. af en IdP til at underskrive et ID-kort og til at underskrive en hel SOAP konvolut med en slutbrugers digitale signatur.
Installere og håndtere IdP'ens certifikat
Alle parter i føderationen forventes at kende til IdP'ens certifikat, så de decentralt kan verificere et ID-korts ægthed. SOSI komponenten stiller faciliteter til rådighed for at importere, tilgå og opdatere IdP'ens certifikat i et lokalt keystore.
Installere og håndtere VOCES certifikater
Alle parter i føderationen er udstyret med et VOCES certifikat, der identificerer systemet. Alle SOSI beskeder underskrives med dette certifikat og komponenten stiller derfor faciliteter til rådighed for at importere, tilgå og opdatere VOCES certifikat samt den tilhørende private nøgle i et lokalt keystore.
Importere XML indlejrede certifikater
SOSI beskeder indeholder VOCES og potentielt også MOCES certifikater, der kan benyttes til signaturverifikation. Komponenten tilbyder en facilitet til import af disse indlejrede certifikater i et lokalt keystore mod hvilket verifikation af signaturer kan foretages.
Skabe signatur med VOCES
Alle SOAP beskeder underskrives med afsendersystemets VOCES certifikat og komponenten tilbyder derfor signering af SOAP konvolutter samt ID-kort med et præinstalleret VOCES certifikat. Bemærk at signering med MOCES certifikater er en operation, der involverer slutbrugeren og dermed en GUI frontend. Komponenten leverer ikke denne funktionalitet!
Verificere signatur
En SOSI SOAP besked kan indeholde en række signaturer, herunder IdP'ens på ID-kortet, afsenderens VOCES på konvolutten, samt medarbejderens MOCES på konvolutten. Komponenten tillader verifikation af alle signaturer på en SOSI SOAP besked.
Tilgå certifikat oplysninger
Medsendte certifikater indeholder oplysninger om ejeren, der f.eks. kan benyttes ved verifikation. Komponenten giver mulighed for at tilgå oplysninger på indlejrede certifikater, herunder f.eks. Subject Serial Number feltet som i OCES certifikater bla. indeholder CVR-RID / CVR-UID.
SOSI komponenten indeholder objekter, der er abstraktioner over de grundlæggende elementer i SOSI komplekset, f.eks. SOSI XML requests, ID-kort etc.
Der opereres primært med flg. klasser:
- En SOSI meddelelse (SOAP underlagt SOSI constraints)
- Et indlejret SOSI ID-kort
- En indlejret digital signatur
Relationen mellem disse elementer er flg.
dk.sosi.seal.Message
Denne klasse er abstrakt, men indeholder nogle nyttige metoder for alle subtyper (requests og responses). Overordnet set er der metoder til indlejring af de enkelte delelementer i SOSI request/response XML, dvs.
- indsæt og hente ID-kort (ID-kort komposition)
- uddrage Hash-værdi af header og body
- indsæt evt. digital signatur (uafviselighed)
- verificere meddelelsens gyldighed, herunder digital signatur (VOCES, MOCES) hvis meddelelsen er behæftet med dette.
- indsætte informationer i SOAP header (samtykke etc.)
- indsætte/hente SOAP body elementet (som XML)
Når man har en
Message instans, kan man "serialisere" den til XML, ligesom man fra en XML repræsentation kan danne en
Message instans (subtype instans).
dk.sosi.seal.IDCard
IDCard er en abstraktion over et SOSI ID-kort. Foruden at kunne rekvirere oplysninger om brugeren/systemet kan man også verificere et ID-kort, "serialisere" det til/fra XML etc. Opsummeret er der følgende muligheder med SOSI ID-kort:
- hente oplysninger om brugeren og/eller systemet fra ID-kortet
- verificere ID-kortet (dels struktur, dels indhold og dels digital signatur)
- uddrage hash-værdi fra ID-kortet
- tilføje/uddrage
Signature instans til/fra ID kortet
- Encoding/Decoding af ID-kort (komprimeret og BASE-64 encoded ID-kort)
dk.sosi.seal.Signature
Signature er en abstraktion over en indlejret digital signatur.
Signature -instanser indkapsler dels selve signaturværdien (krypteret hashværdi) og dels det offentlige certifikat, som kan anvendes til verificering af signaturværdien, givet en Hash-værdi. Med
Signature instanser kan man flg.:
- tilføje signaturværdi
- verificere signaturværdi, givet en hashværdi
- uddrage offentligt certifikat
dk.sosi.seal.SOSIFactory
SOSIFactory er en mekanisme til at skabe instanser af modelobjekterne, som har følgende faciliteter:
-
createRequest() skaber en SOSI request.
-
createResponse() skaber et SOSI response.
-
createSystemSignature(hash) Laver en VOCES signatur på den angivne hashværdi.
-
createUserSignature(cert, signaturevalue) Laver en MOCES signatur.
-
deSerializeRequest(XML) (kunne også være en overloading af createRequest())
-
deSerializeResponse(XML) (kunne også være en overloading af createResponse())
I dette afsnit gives nogle eksempler på, hvorledes SOSI komponenten kan benyttes af forskellige aktører (Serviceaftager,
IdP og Serviceudbyder). Eksemplerne er udformet som sekvensdiagrammer. Diagrammerne er som udgangspunkt ukomenterede, da de fleste flows er relativt let forståelige, når man har læst resten af den tekniske dokumentation.
Udstedelse af ID-kort - trin 1 (EPJ client)
Dette eksempel er det "forberedende trin" i et ID-kort udstedelsesforløb, hvor brugeren bliver afkrævet password for at udløse signering vha. brugerens private nøgle.
TDCSignatureComponent er den kommende proxy-komponent til TDC signaturserveren, der gør det muligt at indtaste password og få signeret en hashværdi.
Udstedelse af ID-kort - trin 2 (EPJ server)
Denne sekvens ligger i umiddelbar forlængelse af den ovenstående, men evt. adskilt af et asynkront kald.
Udstedelse af ID-kort (IdP server)
Denne sekvens ligger i direkte forlængelse af den ovenstående, men viser hvorledes en
IdP kan have gavn af komponenten. Den øverste del af sekvensen viser, hvorledes man kan "deserialisere" en XML besked, den midterste del viser hvorledes man kan verificere signaturer i requestet, og den nederste del viser hvorledes man kan erstatte brugerens digitale signatur af ID-kortet med
IdP'ens signatur.
PEM forespørgsel
Hvor ovenstående viser detaljerne i ID-kort udstedelse, viser dette eksempel hvorledes SOSI komponenten kan anvendes af serviceaftagere i "almindelige" forespørgsler og indberetninger, der ikke kræver digital signatur (uafviselighed).
PEM svar
Denne sekvens viser hvorledes komponenten kan anvendes af serviceudbydere (her Medicinprofilen). Sekvensen ligger i umiddelbar forlængelse af forespørgselssekvensen.