Teknisk beskrivelse av løsningen

Under følger en grundig teknisk beskrivelse av den løsningen som i dag brukes i pilotprosjektet. Denne delen er primært skrevet for personer med IT-faglig bakgrunn.

Brukeren får tilgang til PasientLink ved å kople seg til en tjeneste som er plassert i den ytre sonen av helsenettet, den såkalt demilitariserte sonen (DMZ). Dette ved hjelp av en ordinær nettleser og en kryptert forbindelse. Kommunikasjonen mellom den demilitariserte sonen og den sikrede sonen foregår ved at en tjeneste (EnvelopeServer) på den sikrede sonen sender ut data til en tilhørende tjeneste på den demilitariserte sonen (EnvelopeProxy). Dette gjøres kun etter at brukere er autentisert, og kun den informasjonen brukeren har bedt om og har rettigheter til å se kan bli sendt. Ingen data lagres permanent i den demilitariserte sonen, og data befinner seg kun i minnet på maskiner her i den perioden brukeren er innlogget. Permanent lagrede data i den sikrede sonen er også kryptert, og kan kun dekrypteres på den demilitariserte sonen.

Meldinger til helsearbeiderne sendes fra EnvelopeServer i S/MIME-format til epost-serveren. Beskjedene til legekontoret er kryptert etter standarden CEN TC/251 Env-13608, og meldingsinnholdet er et XML Schema-dokument. I prinsippet kan hvilken som helst epost-leser som støtter S/MIME lese dokumentene, men i forsøket benyttes programvaren Well Communicator for å lette integrasjonen mot pasientjournalen.

Det benyttes i stor grad SOAP for kommunikasjon mellom modulene, vi har brukt Apache’s SOAP-implementasjon. Java er i hovedsak brukt som programmeringsspråk. Det er lagt vekt på å følge åpne standarder for meldingsutveksling, og å bruke den programvaren som er tilgjengelig på legekontoret fra før.

Autentisering av brukere gjøres ved hjelp SMSAuthenticator, som er en modul for to-fase autentisering. Pasienten logger seg på via en nettleser med brukernavn/passord. De vil da få tilsendt en engangskode til sin private mobiltelefon. Denne tastes inn i neste fase av innloggingen. Stor utbredelse av mobiltelefoner gjør at dette er en kostnadseffektiv løsning. SMSAuthenticator er lagt ut som åpen kildekode. Lisensiering av andre deler av systemet er enda ikke avgjort.

Klikk på bildet for å se en større versjon
Arkitekturskisse PasientLink

Kryptering og signering av meldinger

Kryptering av meldinger skjer i henhold til den europeiske standard Env-13608 for sikre objekter og sikret kommunikasjon i helsevesenet . Dette innebærer at meldingene pakkes inn ved hjelp av S/MIME CMS (Cryptographic Message Service). Algoritmene som brukes er 3DES for kryptering av innholdet i meldingen og RSA for nøkkelutveksling. Til signering brukes SHA-1 med RSA.

Vi benytter en S/MIME implementasjon fra ”Legion of the Bouncy Castle” som også implementerer provider-grensesnittene i  JCE (Java Cryptography Extension).

Meldinger som sendes fra pasienten blir pakket inn med S/MIME og kryptert av EnvelopeProxy. Krypteringen skjer både med EnvelopeProxy og mottakeren (internt kalt provider) sine offentlige nøkler, slik at meldingen kan leses både av mottaker og av pasienten selv. Ingen signering skjer her. Når meldingen senere sendes videre fra EnvelopeServer til epost-serveren signeres den allerede krypterte meldingen med EnvelopeServer sin private nøkkel. Den S/MIME-innpakkede signerte og krypterte meldingen sendes som et vedlegg i en epost-melding. EnvelopeServer legger til et eget vedlegg som inneholder et XML dokument med informasjon om hva som sendes. Dette dokumentet blir også pakket inn ved hjelp av S/MIME og det blir kryptert med mottakerens offentlige nøkkel og signert med EnvelopeServers private nøkkel.

Innkommende meldinger som EnvelopeServer henter på epost-serveren blir sjekket for om de er signert av provideren. Dersom de er det blir de lagret i databasen. Selve meldingen til pasienten er kryptert for EnvelopeProxy og kan ikke leses her. Epost-meldingen inneholder i tillegg et vedlegg med et XML-dokument med header-informasjon som må være kryptert for EnvelopeServer og være signert av provideren for at meldingen skal godtas.

All http-trafikk i PasientLink går over SSL med 128-bits kryptering. Dette gjelder trafikk mellom webserver og pasientens nettleser samt all SOAP-trafikk mellom ulike maskiner.

Webserveren

På maskinen som står ytterst i PasientLink-systemet, webserveren, kjører en Apache webserver. I tillegg kjører en javabasert webapplikasjon. Apache-serveren og webapplikasjonen kjører i separate chroot-miljøer.

Apache handterer statiske filer og krypterer trafikken mot pasientens nettleser med SSL/TLS.

Webapplikasjonen implementerer web-grensesnittet mot pasientens nettleser og handterer kommunikasjonen mot EnvelopeProxy gjennom et SOAP-grensesnitt. Marshalling/unmarshalling av meldinger, dvs mapping mellom XML-skjema og Java objekter utføres av webapplikasjonen.

Ukrypterte XML-meldinger sendes og mottas via EnvelopeProxy der kryptering/dekryptering skjer. Mens en pasient er innlogget vil en del av meldingene tilhørende pasienten mellomlagres på webserveren. Disse ukrypterte meldingene lagres bare i minnet på webserveren, aldri på disk (med et potensielt unntak for swapping). Mellom webserveren og pasientens nettleser vil meldingene være kryptert ved at http-trafikken går over SSL.

Webapplikasjonen er utviklet med Java og Apache Velocity. Til mapping av meldinger mellom XML-Schema og Java-objekter benyttes Castor XML.

EnvelopeProxy

Alle forespørsler utenfra til tjenesten og responsen på disse sendes til EnvelopeProxy. EnvelopeProxy aksesseres som en SOAP web service både av webapplikasjonen og av EnvelopeServer. EnvelopeProxy mottar forespørsler (internt kalt ”service-requests”) fra webapplikasjonen, disse legges i en FIFO-kø hvor de hentes og betjenes av EnvelopeServer.

Kryptering og dekryptering av meldinger skjer i EnvelopeProxy, webapplikasjonen sender og mottar ukrypterte XML-meldinger. Dekryptering av alle meldinger skjer med EnvelopeProxy’s private nøkkel. Denne lagres på EnvelopeProxy, ved oppstart må nøkkelens passphrase oppgis.

Metoder som er tilgjengelige for webapplikasjonen gjennom SOAP-grensesnittet:

Metodenavn

Beskrivelse

requestAuthentication

Første fase av autentiseringen. Brukernavn og passord er argumenter til metoden.

authenticateSession

Andre fase av autentiseringen. Dersom engangspassordet ble godkjent og EnvelopeServer opprettet en ny sesjon returnerer metoden en String-verdi som inneholder sesjonsidentifikatoren. Denne sesjonsidentifikatoren må oppgis i alle etterfølgende metodekall og brukes av EnvelopeServer til å identifisere sesjonen/brukeren.

getNumberOfEnvelopes

Antall meldinger av en gitt type som eksisterer for pasienten.

sendEnvelope

Sender en ny melding fra pasienten til tjenesten.

getEnvelopes

Henter et subsett av meldingene som tilhører pasienten.

deleteEnvelope

Sletter en melding som tilhører pasienten.

changePassword

Endre passord for pasienten.

disconnectSession

Logge ut av tjenesten.

 

Autentiseringstjenesten

Til autentisering av brukere benyttes SMSAuthenticator. SMSAuthenticator aksesseres som en SOAP web-service av EnvelopeServer.

SMSAuthenticator implementerer en to-fase autentiseringsprosess. I den første fasen mottar autentiseringstjenesten en forespørsel om autentisering for en bestemt bruker, i form av brukeridentitet og passordhash. Ved riktig brukernavn og passordhash, blir et engangspassord generert og sent som en GSM SMS-melding til en GSM telefon registrert på brukeren. Engangspassordet har en konfigurerbar timeout (her 5 minutter).

I andre del av autentiseringsprosessen, mottar autentiseringstjenesten en forespørsel som inneholder brukeridentitet og en hash av engangspassordet. Dersom hash av engangspassordet samsvarer med det utsendte engangspassordet, blir brukeren autentisert, dvs en boolean true verdi returneres i SOAP-kallet.

Engangspassordene blir generert ved hjelp av en pseudo random-generator (SHA1PRNG-algoritme). Engangspassord lagres kun i minnet, og i en begrenset periode. Straks en autentiseringsforespørsel er fullført, slettes engangspassordet.

Følgende metoder i SMSAuthenticator er tilgjengelige for EnvelopeServer: 

Metode

Beskrivelse

requestAuthentication

Første fase i autenseringen. Brukernavn og hash av passord er argumenter til metoden.

authenticate

Andre fase i autentiseringen. Brukernavn og engangspassord er argumenter til metoden.

changePassword

Endre passord for bruker.

sendNotification

Sender en melding til bruker på SMS. Selve meldingen oppgis som et argument til metoden.

 

SMSAuthenticator er for øvrig lagt ut som åpen kildekode.

EnvelopeServer

EnvelopeServer betjener forespørsler utenfra til tjenesten ved å kommunisere med EnvelopeProxy gjennom et SOAP-grensesnitt. EnvelopeServer kommuniserer videre med autentiserings-serveren gjennom dennes SOAP-grensesnitt, bl.a. ved betjening av forespørsler om innlogging og endring av passord.

PollProxyThread-klassen implementerer funksjonalitet for å hente service-requests fra EnvelopeProxy og prosessere dem. Se beskrivelse av EnvelopeProxy for en beskrivelse av ulike typer requests som håndteres av EnvelopeServer. Overordnet besørger denne tråden transport av meldinger mellom EnvelopeProxy og databasen. PollyProxyThread-instanser kjører som separate tråder, og en pool av slike tråder er tilgjengelig slik at flere forespørsler kan prosesseres parallelt avhengig av belastning.

EnvelopeServer vedlikeholder det permanente lagret for meldinger som går gjennom tjenesten. En egen klasse inneholder alle metoder for interaksjon mot lager, nå en PostgreSQL-database.

En egen tråd (MailBoxThread) transporterer meldinger mellom databasen og epost-serveren. Den sjekker om det ligger meldinger i databasen som enda ikke er sendt til provideren og sender i så fall disse til epost-serveren (SMTP-protokoll). Dersom det ligger nye meldinger til pasienter på epost-serveren (POP3-protokoll) legges disse inn i databasen. Samtidig sendes en notifikasjon til pasienten på SMS ved å kalle en metode tilgjengelig i SOAP-grensesnittet til autentiserings-serveren.

Ved mottak av meldinger til pasienter sendes en transportbekreftelse (internt kalt acknowledgement) i retur. På samme mottar EnvelopeServer bekreftelse på meldinger som er sendt til provider. Både sendte og mottatte bekreftelser lagres i databasen. Alle meldinger som sendes og mottas er kryptert, se mer om dette i avsnittet om kryptering.


<<
icon tip a friend E-mail this