260 likes | 362 Views
e-tinglysning Teknikgruppem øde 09.02.2007. Bjarne Hansen Business Systems Architect e-mail: bhansen4@csc.com. Indholdsfortegnelse. Digital signering af tinglysningsdokumenter… Vedhæftning af (store) bilag… Præsentationsservices…. Digital signering af tinglysningsdokumenter.
E N D
e-tinglysningTeknikgruppemøde 09.02.2007 Bjarne Hansen Business Systems Architect e-mail: bhansen4@csc.com
Indholdsfortegnelse • Digital signering af tinglysningsdokumenter… • Vedhæftning af (store) bilag… • Præsentationsservices…
Digital signering af tinglysningsdokumenter • Digital Signering i e-tinglysning • XML Signature standarden • Elementer i en anmeldelse (<etl:anmeldelse>…</etl:anmeldelse>) • Elementer i en kuvert (<etl:kuvert>…</etl:kuvert>) • Principper for brug af XML Signature (i e-tinglysning)… • Kanonisering • Signatur metode • Referencer • KeyInfo • Eksempel: Opbygning og underskrift af anmeldelse (Java)
XML-Signature på én side(http://www.w3.org/TR/xmldsig-core/) <Signature ID?> <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> (<Reference URI? > <Transforms> <DigestMethod> <DigestValue> </Reference>)+ </SignedInfo> <SignatureValue> (<KeyInfo>)? (<Object ID?>)* </Signature> Det man rent faktisk underskriver… I hovedsagen en beskrivelse af hvordan underskriften er foretaget, samt en række referencer til det som underskrives, f.eks. et tinglysningsdokument. Referencen indeholder “digest” af det som refereres for at sikre at det refererede ikke kan ændres efterfølgende. Referencerne kan pege på XML elementer i <Object> tag’et, XML elementer andre steder i dokumentet eller ressourcer som ikke er inkluderet i dokumentet, men som kan nås via f.eks. HTTP. Den digitale signatur… Den digitale signatur af <SignedInfo> elementet. Dette er den egentlige underskrift. Det man har underskrevet med… Der er forskellige muligheder i XML-Signature for at underskrive et dokument – i e-tinglysning vil dette være et X509 Certificate. Data som underskrives… Her kan være de data som underskrives (digest) – eller f.eks. ekstra attributter som vedrører underskriften, som f.eks. tidsstempel eller lignende.
XML Signature eksempel… Eksempel på XML Signature (taget fra XML Signature standarden) <Signature Id="MyFirstSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/"> <Transforms> <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> </Reference> </SignedInfo> <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue> <KeyInfo> <KeyValue> <DSAKeyValue> <P>...</P><Q>...</Q><G>...</G><Y>...</Y> </DSAKeyValue> </KeyValue> </KeyInfo> </Signature>
En anmeldelse… <etl:Anmeldelse> <etl:Tinglysningsdokument> … </etl:Tinglysningsdokument> <etl:Bilag … /> <etl:Bilag … /> … <etl:Underskrifter> <ds:Signature … /> <ds:Signature … /> … </etl:Underskrifter> </etl:Anmeldelse Selve tinglysningsdokumentet Det tinglysningsdokument som anmeldelsen vedrører. Tinglysningsdokumentet følger et fastlagt skema. På grund af “digest” i <xs:Reference> elementet kan tinglysningsdokumentet ikke ændres efter første underskrift (ude at det opdages) Bilag til anmeldelsen Meta-data og de binære data (base64) for eventuelle bilag til anmeldelsen Underskrifter for anmeldelsen Her findes en eller flere underskrifter (XML-Signature), som underskriver Tinglysningsdokumentet samt evt. bilag. Hvad der konkret underskrives udpeges gennem referencer (<xs:Reference>) i <xs:SignatureInfo> elementet. Antallet af underskrifter i <etl:Underskrifter> kan udvides uden at den øvrige del af dokumentet berøres. Således kan en anmeldelse underskrives af flere parter inden det sendes til tinglysning. Denne del af en anmeldelse er den som udfyldes i overensstemmelse med XML Signature standarden.
En kuvert… <etl:Kuvert> <etl:Anmeldelse … /> <etl:Anmeldelse … /> … <etl:Følgeseddel … /> … <etl:Underskrifter> <ds:Signature … /> </etl:Underskrifter> </etl:Kuvert> Anmeldelser De enkelte anmeldelser som er indeholdt i kuverten. Hver anmeldelse indeholder i sig selv underskrifter fra forskellige parter. Følgeseddel Følgeseddel som angiver rækkefølge for behandling, samt forskellige egenskaber ved behandlingen. Underskrift(er) af følgeseddel Hvis det er nødvendigt kan vi her have underskrifter af selve følgesedlen. Underskriften af følgesedlen er en kvittering for at den som har indsendt kuverten ønsker de anmeldelser som forefindes I kuverten behandlet som specificeret i følgesedlen. Der er således ikke (nødvendigvis) nogen sammenhæng mellem underskriften af følgesedlen og underskrifterne på anmeldelsen. Denne del af en anmeldelse er den som udfyldes i overensstemmelse med XML Signature standarden.
Principper for brug af XML Signature… • XML Signature er en generel standard som sætter vide rammer for digital signatur af XML dokumenter/elementer • Metode (algoritme) til dannelse af kanonisk repræsentation (canonicalization) af <SignatureInfo> elementet • Metode (algoritme) til underskrift • Transformationer på data inden der beregnes “digest” • Digest algoritme • Hvilken slags KeyInfo (f.eks. certifikat) der bruges ved underskrift • Formålet med at fastsætte principper for anvendelse af XML Signature i forbindelse med e-tinglysning er… • …at begrænse muligheder til en fornuftig delmængde som understøtter det behov der er i forbindelse med e-tinglysning • …gennem denne begrænsningen at gøre det mere enkelt at udvikle og anvende digital signatur i forbindelse med e-tinglysning
Kanonisering… • Angivelse af algoritme til kanonisering af <SignedInfo> elementet • <CanonicalizationMetod Algorithm=“…” /> • Der findes to algoritmer som udgangspunkt i XML signature, en som medtager XML kommentarer og en som udelader XML kommentarer • Der er beskrevet 2 algoritmer i XML Signature standarden • Kanonisk XML uden kommentarer (required) • http://www.w3.org/TR/2001/REC-xml-c14n-20010315 • Kanonisk XML med kommentarer (optional) • http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments • e-Tinglysning anbefaling • Kanonisering uden kommentarer • http://www.w3.org/TR/2001/REC-xml-c14n-20010315
Signatur metode • Algoritme for signering af <SignedInfo> elementet • <SignatureMethod Algorithm=“…” /> • Der er beskrevet 2 algoritmer i XML Signature standarden • DSA med SHA1 (required) • http://www.w3.org/2000/09/xmldsig#dsa-sha1 • RSA med SHA1 (optional) • http://www.w3.org/2000/09/xmldsig#rsa-sha1 • Ifølge standarden skal DSA understøttes, mens RSA er optionel, men da de nøgler som er indeholdt i OCES certifikaterne er RSA nøgler anvendes RSA algoritmen i forbindelse med signering i e-tinglysning • e-tinglysning anbefaling • Algorithm = http://www.w3.org/2000/09/xmldsig#rsa-sha1
Referencer… • Elementet <SignedInfo> kan indeholde et antal referencer <Reference> til elementer / data som “underskrives” • En reference er kendetegnet ved • URI – Udpeger de data der skal med i underskriften • Transforms – Angiver transformeringer som skal udføres på data inden hash funktionen beregnes på data • DigestMethod – Angivelse af den hash algoritme som anvendes • SHA1 • http://www.w3.org/2000/09/xmldsig#sha1 (required) • DigestValue– Den beregnede værdi fra hash funktion • e-tinglysning anbefaling • URI – Se efterfølgende sider… • Transforms – Det foreslås at der kun tillades Canonicalization og Base64. • DigestMethod – SHA1
Referencer (URI) • Eksempler på URI’er • “http://example.com/data/test.xml”Reference til en ekstern data strøm, ie. man kan underskrive noget som ikke er med i selve dokumentet, f.eks. et bilag. • “” (tom streng)Refererer til hele dokumentet som signaturen er indeholdt i • “#dokument”Reference til det XML element som har ID=“dokument” • XPointer/XPath udtryk, f.eks. • #xpointer(id(‘someid’)) • #xpointer(id(‘hæftelse’)/child::hovedstol) • URI’en kan således udpeges lokale eller eksterne dokumenter/fragmenter • e-tinglysning anbefaling • Brug af “#en-id-på-et-element” til at udpege element i anmeldelsen • Det overvejes hvorvidt det kan tillades at bruge referencer til eksterne ressourcer, i.e. http://...
Flere referencer vs. flere signaturer • Underskrift • <SignedInfo> er det som rent teknisk underskrives • <SignedInfo> indeholder referencer <Reference> til elementer, der er en del af underskriften • Hver <Reference> indeholder hash af indhold <Signature> <SignedInfo> <Reference /> <Reference /> </SignedInfo> </Signature> <Signature> <SignedInfo> <Reference /> </SignedInfo> </Signature> <Signature> <SignedInfo> <Reference /> </SignedInfo> </Signature> VS. • Forskellige måder at håndtere flere underskrifter på • En “samlet” underskrift af flere elementer… • En signatur per element…
KeyInfo… • Angiver den “nøglering” som er anvendt ved underskrift af “dokumentet” • http://www.w3.org/2000/09/xmldsig#DSAKeyValue • http://www.w3.org/2000/09/xmldsig#RSAKeyValue • http://www.w3.org/2000/09/xmldsig#X509Data • http://www.w3.org/2000/09/xmldsig#PGPData • http://www.w3.org/2000/09/xmldsig#SPKIData • http://www.w3.org/2000/09/xmldsig#MgmtData • e-tinglysning anbefaling • Der anvendes X509Data, da vi ønsker underskrift med OCES certifikat (generelt X509 certifikat)
Opbygning af <etl:anmeldelse> - step 1 Eksempel baseret på brug af Apache XML Security library // Opret nyt XML dokument dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); db = dbf.newDocumentBuilder(); doc = db.newDocument(); // Tilføj XML rod element <etl:anmeldelse> anmeldelse = doc.createElementNS("http://www.tinglysning.dk/schema/2007/01", "etl:anmeldelse"); anmeldelse.setAttributeNS(Constants.NamespaceSpecNS,"xmlns:etl", ETLNS); doc.appendChild(anmeldelse); // Tilføj XML element <etl:tinglysningsdokument> tinglysningsdokument = doc.createElement("etl:tinglysningsdokument"); tinglysningsdokument.setAttribute("id", "dokument"); tinglysningsdokument.setIdAttribute("id", true); tinglysningsdokument.appendChild(doc.createTextNode("...")); anmeldelse.appendChild(tinglysningsdokument); // Tilføj XML element <etl:bilag> for bilag nr. 1 bilag = doc.createElement("etl:bilag"); bilag.setAttribute("id", "bilag1"); bilag.setIdAttribute("id", true); bilag.appendChild(doc.createTextNode("...")); anmeldelse.appendChild(bilag);
Opbygning af <etl:anmeldelse> - step 2 // Tilføj XML element <etl:underskrifter> underskrifter = doc.createElement("etl:underskrifter"); underskrifter.setAttribute("id", "underskrifter"); underskrifter.setIdAttribute("id", true); anmeldelse.appendChild(bilag); // Opret XML Signature element (<ds:Signature>) og tilføj den til elementet <etl:underskrifter> signature = new XMLSignature(doc, baseURI, XMLSignature.ALGO_ID_SIGNATURE_DSA); signature.getSignedInfo().addResourceResolver(new ResolverFragment()); underskrifter.appendChild(signature.getElement()); // Definer transformationer for <ds:Reference> elementer transforms = new Transforms(doc); transforms.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS); // Tilføj reference (<ds:Reference>) for tinglysningsdokumentet og bilag signature.addDocument("#dokument", transforms, Constants.ALGO_ID_DIGEST_SHA1); signature.addDocument("#bilag1", transforms, Constants.ALGO_ID_DIGEST_SHA1); signature.addDocument("#bilag1", transforms, Constants.ALGO_ID_DIGEST_SHA1);
Opbygning af <etl:anmeldelse> - step 3 // Indlæs Java keystore ks = KeyStore.getInstance(keystoreType); fis = new FileInputStream(keystoreFile); ks.load(fis, keystorePass.toCharArray()); // Get private key for signing privateKey = (PrivateKey) ks.getKey(privateKeyAlias, privateKeyPass.toCharArray()); // Tilføj certifikatet til <ds:KeyInfo> elementet certificate = (X509Certificate) ks.getCertificate(certificateAlias); signature.addKeyInfo(certificate); // Underskriv tinglysningsdokument og bilag signature.sign(privateKey);
Referencer • Standarder • X.509 Certificate (http://www.ietf.org/rfc/rfc2459.txt) • XML Signature (http://www.w3.org/TR/xmldsig-core/) • Java • Apache XML Security (http://xml.apache.org/security/) • .NET • http://www.c-sharpcorner.com/UploadFile/lsitaraman/XMLSignatures11232005051727AM/XMLSignatures.aspx • http://msdn2.microsoft.com/en-us/library/ms229950(vs.80).aspx
Udestående… • “Features” i XML Signature som er under overvejelse… • Brug af <Manifest> som “samlemappe” for referencer… • <SignatureProperties>? Har vi meta-data som vi gerne vil have embedded i signaturen?
Vedhæftning af (store) bilag • Bilag i anmeldelsen • Kan indlejres i <etl:Anmeldelse> som Base64 og refereres fra tinglysningsdokumentet • Der vil være en grænse for størrelsen af sådanne bilag • Grænsen er ikke undersøgt endnu (Mb)… • Refererede bilag • XML Signature åbner op for at referere bilag eksternt i forhold til det dokument som indeholder underskriften • Referencen kan være alt muligt – men er ”typisk” på formen http(s)://www.eksempel.dk/dokumenter?docid=12345 • Dokumentet indeholder underskreven hash-værdi af det refererede dokument • Ved check af underskrift skal referencen kunne opløses således at det originale dokument er tilgængelig • Det er vigtigt at det originale dokument ”i al evighed” vil kunne refereres via denne reference (ellers vil signaturen ikke kunne verificeres)
Mulige eksterne referencer • ”Pull” model • Anmelder inkluderer underskrevet reference til dokument på egen web server • e-tinglysning henter dokumentet via referencen… • Eksempel: http://www.billigeskøder.dk/bilag/sag1614/deklaration.pdf • ”Push” model • Anmelder beregner hash-værdi • Anmelder indsender dokument (bilag) til e-tinglysning • e-tinglysning svarer tilbage med reference + hash-værdi • Eksempel:https://www.e-tinglysning.dk/bilag/id=D074A20F-8C5B-49b9-9B3F-E484399ADBE3 • Anmelder checker hash-værdi • Anmelder inkluderer reference i anmeldelsen • ”push” modellen foretrækkes, da dokumenter således opbevares hos e-tinglysning (i al evighed) og der er ikke afhængigheder til eksterne systemer i det initielle check af anmeldelsen
Konsekvenser af ”push” modellen • ”Opløsning” af reference sker nemt hos e-tinglysning • Der laves unik reference til dokumentet som opbevares i tinglysningssystemet • e-tinglysning kan altid checke underskrift • Ingen afhængighed af eksterne systemer ved initielt check af anmeldelse • Da dokumentet er ”indsendt” på forhånd er der ikke tilgængelighedsproblemer som time-out etc. • Samme bilag kan ”genbruges” • e-tinglysning garanterer at dokumentet forefindes ”i al evighed” – dermed kan ”standard” bilag refereres igen og igen (f.eks. forretningsbetingelser eller lignende) • Sikkerhed(?) • Hvis eksterne skal kunne validere signaturen skal de have adgang til bilaget – er det altid OK?? • Eksterne skal implementere ”opløsning” af e-tinglysningsreferencen i deres check af signaturer…
Præsentationsservices • XSLT transformationer • e-tinglysning stiller XSLT transformationer til rådighed • Referencer til disse XSLT stylesheets kan hentes via WebService • Selve XSLT stylesheet’et kan downloades eller refereres direkte hos e-tinglysning • WebService tillader at der hentes stylesheets til brug for forskellige typer af præsentation (medier) • WebService tillader at der altid hentes nyeste ”standard” stylesheet • XSLT kan bruges af eksterne parter til præsentation • Brug XSLT til transformation gennem XML library • Vis output via browser eller lignende
WSRP Portlets • Information fra e-tinglysning kan udstilles som WSRP Portlets • Hvad er behovet? • Hvordan tænkes Portlets anvendt i eksterne systemer? • Hvilken funktionalitet anvendes?...hvordan tænkes integration med evt. lokalt sagsbehandlingssystem • Granularitet • Inkludering af større mænge samlet funktionalitet på egen portal… • Portlets med begrænset funktionalitet… • Sikkerhed • SSO sammenhæng mellem ekstern portal og e-tinglysning • Kræver OCES login på ekstern portal • …eller login i selve portlet skærmbilledet • Sikkerhed og ”federation” er ikke præcist defineret i standarden… • Der kan være ”interoperability” problemer… • Hvilke konkrete portal produkter anvendes til intra- / internet?