Ændringslog

1.1.2

2016-01-01

Initielt Dokument

Arosii

Indledning

Certificate Revocation Authority (CRA) er et tool til NSP platformen der er ansvarlig for at opretholde en database med informationer om de certifikater der er trukket tilbage af udstederen. Databasen skal replikeres til alle NSP miljøer således at data er tilgængelig for SecurityValve og SecurityHandler. CRA er udviklet som en J2EE web applikation og anvender Spring til konfiguration og skedulering. Konfigurationsfilerne er specifikke for JBoss8/Wildfly som skal anvendes.

Begreber

Algoritme

For hver CRS som CRA er konfigureret med, hentes der en eller to CRL’er som gemmes i databasen. CRA verificerer først at CRS’en indeholder en valid OCES certifikatkæde og tjekker derefter om der er ændringer til CRL’erne. CRL’erne downloades, deres signatur verificeres og de tilbagekaldte serienumre gemmes i databasen. Hvis et af CA certifikaterne tilbagekaldes vil dette blive markeret i databasen således at alle certifikater, der peger på den tilhørende CRL, tilbagekaldes.

Logning

CRA logger til filen cra.log

Installation

Kompilering

CRA leveres gennem NSP’s SVN systemet:

svn co https://svn.nspop.dk/svn/nsp/tags/tools/cra/release-x.y.z cra

Efter checkout skal projektet bygges med Maven således:

mvn install

Følgende filer udgør nu leverancen og skal anvendes i resten af installationsvejledningen:

cra/target/cra-x.y.z.war
cra/etc/cra/bootstrap.xml
cra/etc/cra/config.xml
cra/etc/cra/schedule.xml
cra/etc/cra/seal.xml
cra/etc/cra/services.xml
cra/etc/cra-ds.xml
cra/etc/drop-create-db.sql
cra/etc/log4j-cra.xml
cra/etc/log4j-nspslalog-cra.properties
cra/etc/nspslalog-cra.properties

Konfiguration

Inden CRA kan deployes skal konfigurationsfilerne kopieres over i biblioteket /pack/jboss8/standalone/configuration. Følgende filer skal herefter findes:

/pack/jboss8/standalone/configuration/cra/bootstrap.xml
/pack/jboss8/standalone/configuration/cra/config.xml
/pack/jboss8/standalone/configuration/cra/schedule.xml
/pack/jboss8/standalone/configuration/cra/seal.xml
/pack/jboss8/standalone/configuration/cra/services.xml
/pack/jboss8/standalone/configuration/log4j-cra.xml
/pack/jboss8/standalone/configuration/log4j-nspslalog-cra.properties
/pack/jboss8/standalone/configuration/nspslalog-cra.properties

XML filen /pack/jboss8/standalone/configuration/cra/bootstrap.xml indeholder et eksempel på en opsætning af et antal CRS’er. Dette eksempel skal slettes og korrekte CRS’er skal konfigureres inden selve applikationen deployes. En detaljeret gennemgang af filerne og opsætningen heri kan findes i afsnittet Opsætning.

Database

Inden CRA kan deployes skal databasen og datasourcen sættes op. Filen drop-create-db.sql anvendes til at oprette databasen. Vær opmærksom på at filen erstatter en allerede eksisterende database med navnet cra. Filen cra-ds.xml skal placeres i /pack/jboss8/standalone/deployments/. Begge filer indeholder et simpelt brugernavn og kodeord for databasebrugeren og skal derfor rettes inden de anvendes i et produktionsmiljø. Vær også opmærksom på at værdien af connection property rewriteBatchedStatements skal passe med den tilsvarende i services.xml som beskrevet nedenfor

Deployment

Når alle konfigurationsfilerne er placeret korrekt og databasen er sat op kan filen cra-x.y.z.war kopieres over i /pack/jboss8/standalone/deployments/. Konfigurationsfilen bootstrap.xml skal opdateres inden CRA deployes.

Opsætning

Inden CRA kan deployes skal konfigurationsfilerne opdateres til at afspejle den del af certifikatinfrastrukturen man ønsker af monitorer.

schedule.xml

Opdateringsintervallet for CRA defineres i filen schedule.xml. I leverancen er værdien sat til 1800000 millisekunder, hvilket er 30 min. Hvis en anden værdi ønskes så er det attributten fixed-delay der skal opdateres.

    <task:scheduled-tasks scheduler="scheduler">
        <task:scheduled ref="certificateRevocationAuthority" method="update" fixed-delay="1800000"/>
    </task:scheduled-tasks>

    <task:scheduler id="scheduler" pool-size="1"/>

Vær opmærksom på at værdien af denne attribut har konsekvenser for værdien af konfigurationsparameteren ttl i SecurityValve og SecurityHandler. Se dokumentationen til disse tools for en udregning.

seal.xml

Seal føderationen skal konfigureres alt efter om der er tale om et test eller et produktionsmiljø. Attributten class på federation elementet skal have værdien dk.sosi.seal.pki.SOSITestFederation i et testmiljæ og dk.sosi.seal.pki.SOSIFederation i et produktionsmiljø. Ydermere skal propertien sosi:issuer have en passende værdi alt efter miljø.

services.xml

Heri skal propertien rewriteBatchedStatements have samme værdi som den har i cra-ds.xml

	<bean id="certificateRevocationStoreDatabase" class="dk.nsi.nsp.cra.db.DBCertificateRevocationStoreImpl" init-method="init">
        <constructor-arg ref="cra.db"/>
        <property name="rewriteBatchedStatements" value="true"/>
    </bean>

bootstrap.xml

Heri defineres de CRS’er der skal bruges til at bootstrappe CRA. For hver CRS der defineres vil CRA læse den konfigurerede CRL samt alle CRL’er fra certifikaterne i certifikatkæden. Der er to måder at konfigurere en CRS. Enten vd at angive et slutbruger certifikat eller ved direkte at angive en url til en CRL og dens tilhørende certifikat.

Keystore CRS

   <bean id="testCertificateRevocationSource" class="dk.nsi.nsp.cra.bootstrap.KeyStoreCertificateRevocationSource">
        <constructor-arg>
            <bean id="testKeystore" class="java.io.File">
                <constructor-arg value="/pack/cra/cra-test.keystore" type="java.lang.String" />
            </bean>
        </constructor-arg>
        <constructor-arg value="!234Qwer" type="java.lang.String" />
        <constructor-arg value="SOSI:ALIAS_SYSTEM" type="java.lang.String" />
        <constructor-arg ref="certificateResolver"/>
    </bean>

Måden en KeyStoreCertificateRevocationSource konstrueres på, er ved at tage den offentlige del af et certifikat og gemme det i en Java Keystore fil. Filen, aliaset og kodeordet til filen (Ikke til den private nøgle) konfigureres derefter som de tre første constructor-arg's til en KeyStoreCertificateRevocationSource. Det sidste argument skal altid være certificateResolver

For at aktivere en CRS tilføjes den til listen certificateRevocationSources.

Java Keystore filer laves med programmet keytool der følger med Java. Der henvises til Java dokumentation for eksempler på hvordan man importerer et certifikat.

Remote CRS

    <bean id="systemtest10CertificateRevocationSource" class="dk.nsi.nsp.cra.bootstrap.RemoteCertificateRevocationSource">
        <constructor-arg value="http://m.aia.systemtest10.trust2408.com/systemtest10-ca.cer" type="java.lang.String" />
        <constructor-arg value="http://crl.systemtest10.trust2408.com/systemtest10.crl" type="java.lang.String" />
        <constructor-arg ref="certificateStore"/>
        <constructor-arg ref="certificateResolver"/>
    </bean>

Hvis man ikke har et certifikat udstedt af den CA man ønsker at tilføje kan en RemoteCertificateRevocationSource konstrueres ved at angive URL’en til CA certificatet og URL’en til den CRL der er signeret af CA’en som de to første constructor-arg's. De to sidste argumenter skal altid være certificateStore og certificateResolver

For at aktivere en CRS tilføjes den til listen certificateRevocationSources.

Databasen

CRA har et relativt simpelt databaselayout bestående af to tabeller. En tabel med CRL endpoints og en tabel med revokerede certifikater.

Endpoints

Tabellen crl har følgende felter:

id Teknisk identifikation af rækken - Allokeres automatisk af MySQL.url Det endpoint hvor en CRL hentes fra.lastmodified Opdateres med et nyt timestamp hver gang CRL’en downloades fra endpointet.nextupdate Det tidspunkt (timestamp) den sidst hentede version af CRL’en er gyldig til.

Revokeringer

Tabellen revoked har følgende felter:

id Teknisk identifikation af rækken - Allokeres automatisk af MySQL.crlid Teknisk identifikation af den række fra tabellen crl som denne revokering kommer fra.serialnumber Serienummerer på det certifikat der er trukket tilbage.added Det tidspunkt (timestamp) rækken blev tilføjet til tabellen.since Det tidspunkt (timestamp) revokeringen trådte i kraft.

Hvis en CRL er udstedt af en CA og denne CA trækkes tilbage, så vil alle dens rækker i revoked blive slettet og en enkelt række med NULL i serialnumber vil blive oprettet. Et certifikat skal derfor betragtes som trukket tilbage hvis dets CRL enpoint findes i crl og dets serienummer findes i revoked eller der findes en række med serienummeret NULL.