Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Navitabs

Ændringslog

...

1.1.2

...

2016-01-01

...

Initielt Dokument

...

Arosii

...

KvalitetsIT

...

rootCertificate Revocation Authority (CRA) - Leverancebeskrivelse
includeroottrue


Kort introduktion til service

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.

CRA benyttes primært af STS.

Databasen 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.

Komponent og versioner
HTML
<iframe src="https://archi.nspop.dk/NSP/570928ca/views/id-93c48d90-bb50-436c-87c1-8816436081c7.html" name="test" height="420" width="750">You need a Frames Capable browser to view this content.</iframe>   

* Hver kasse i ovenstående diagram har en kort forklaring, som kommer frem i et nyt browservindue, når der klikkes på kassen.


HTML
<iframe src="https://archi.nspop.dk/NSP/570928ca/views/id-322e024d-8038-47cd-850f-02a08006ba86.html" name="test" height="290" width="750">You need a Frames Capable browser to view this content.</iframe>   

* Hver kasse i ovenstående diagram har en kort forklaring, som kommer frem i et nyt browservindue, når der klikkes på kassen.

Kontaktoplysninger, servicebeskrivelse og testforhold
CRA er udviklet, driftet og vedligeholdt af SDS, og alle henvendelser skal foregå gennem National Servicedesk.

Test af servicen er beskrevet i testvejledningen.

Leverancer

Release 1.1.24

Jira
serverNSI JIRA
serverIde64c3bc3

Release

Release 1.1.11

Rettelse til release 1.1.10, da nogle ændringer fra SDS-4328 og SDS-4202 var faldet ud af releasen.

Release 1.1.10

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4328

JiraserverNSI JIRAcolumnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolutionserverIde64c3bc3

-001c-3439-bc53-f7a235a8cd61
keySDS-
4202

Findings fundet ifm. brug af CRA på KIH rettet.

Der er også fundet en uhensigtsmæssighed ifm. et af oprydningsjobbene, cleanIfGhostSerialNumberActivated, som gør at dette oprydningsjob ikke bør aktiveres.

Ændringer til konfiguration:

I filen services.xml er rettet følgende. cleanIfGhostSerialNumberActivated er sat til false og checkDatabaseConnection er tilføjet:

Code Block
<bean id="certificateRevocationCleanUp" class="dk.nsi.nsp.cra.CertificateRevocationCleanUpImpl">
	    <constructor-arg ref="certificateRevocationStoreDatabase"/>
        <constructor-arg ref="certificateRevocationSources"/>
        <constructor-arg ref="status"/>
        <!--  Activate cleanup functionality -->
        <property name="cleanActivated" value="true" />
        <property name="cleanIfRootExpiredActivated" value="true" />
        <property name="cleanIfIntermediateExpiredActivated" value="true" />
        <property name="cleanIfGhostUrlActivated" value="true" />
        <!-- Sat til false, da den bruger al CPU hvis aktiveret -->
        <property name="cleanIfGhostSerialNumberActivated" value="false" />
        <!-- Tilføjet i forbindelse med KIH rettelserne -->
        <property name="checkDatabaseConnection" value="true" />
    </bean>

Release 1.1.9

7018

Release 1.1.23

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-5923

Release 1.1.22

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-6641

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-6420
QA justeringer

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-5923
QA rettelser

Release 1.1.21

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-6582

Release 1.1.20

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-5923

Release 1.1.14.5 (Rettelse til PROD version 1.1.14)

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-6582

Release 1.1.19

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate
Jira
serverId
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolutione64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4037

Release 1.1.8

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-3813

CRA er blevet opdelt i maven-moduler.

Rettet  følgende:

Code Block
languageyml
titleservices.xml
<bean id="certificateRevocationStoreDatabase" class="dk.nsi.nsp.cra.db.DBCertificateRevocationStoreImpl" init-method="init">
	<constructor-arg ref="cra.db"/>
	<property name="rewriteBatchedStatements" value="true"/>
	<property name="cleanupSerialNumbersBatchSize" value="500"/>
	<property name="initialWaitForDatabaseConnection" value="20000"/>
	<property name="retriesWhenDatabaseConnectionFail" value="6"/>
	<property name="waitBetweenDatabaseConnectionRetries" value="5000"/>
</bean>
Code Block
languageyml
titleschedule.xml
<task:scheduled-tasks scheduler="scheduler">
	<!--  Execute  dk.nsi.nsp.cra.CertificateRevocationAuthorityImpl.update -->
	<!--  initial-delay: milliseconds until first run (1 minutes)-->
    <!--  fixed-delay: 30 minutes-->
    <task:scheduled ref="certificateRevocationAuthority" method="update" initial-delay="60000" fixed-delay="1800000"/>

    <!--  Execute  dk.nsi.nsp.cra.CertificateRevocationCleanUpImpl.cleanup -->
    <!--  initial-delay: milliseconds until first run (2 minutes)-->
    <!--  fixed-delay: milliseconds until next run from completion of previous run (1 min)-->
   	<task:scheduled ref="certificateRevocationCleanUp" method="cleanup" initial-delay="120000" fixed-delay="60000"/>
</task:scheduled-tasks>

Release 1.1.7

6420

Release 1.1.18

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-6335

Release 1.1.17

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-6403

Release 1.1.16

Indeholder rettelser til QA kommentarer til:

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-5923

Release 1.1.15

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-5923

Release 1.1.14

Indeholder rettelser til QA kommentarer til:

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-5981

Release 1.1.14

Indeholder rettelser til QA kommentarer til:

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4503

Jira
serverNSI JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-30924094

Release 1.1.

...

13

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4503

Release 1.1.12

Jira
serverNSI JIRAcolumnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-38844347

Tilføjet følgende:
<property name="cleanupSerialNumbersBatchSize" value="500"/>

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4094

Jira
serverNSI JIRA
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4328
(fejlrettelser)

Rettelsen i services.xml fra release 1.1.10 er trukket tilbagetil certificateRevocationStoreDatabase-bean i services.xml.

Release 1.1.

...

Leverancen er tagget som release-1.1.5.

Rettelse af kode efter finding ved release.

11

Rettelse til release 1.1.10, da nogle ændringer fra SDS-4328 og SDS-4202 var faldet ud af releasenParameter til aktivering af oprydning af udløbet rod-certifikat var ikke stavet ens i opsætning og i koden. Ændret værdien fra "cleanIfRootExpiredActivate" til "cleanIfRootExpiredActivated" i koden.

Release 1.1.

...

Leverancen er tagget som release-1.1.4.

Rettelse af kode efter QA findings:

  • Status opdateres ved alle fejl
  • Fjernet udkommenteret kode.
  • Flyttet kode fra CertificateRevocationAuthorityImpl ud til oprydning ud i egen klasse CertificateRevocationCleanUpImpl.
  • Ændret struktur i oprydningskoden, så retur-værdier sendes vha. ny klasse CertificateRevocationCleanUpData.

Release 1.1.3

Leverancen er tagget som release-1.1.3.

10

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4328
Følgende JIRA sager indgår i leverancen.

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-
2554

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

  • Certificate Authority (CA)
    En udsteder af X.509 certifikater. Nets og TDC er eksempler på CA’er. En CA har et enkelt rod CA certifikat og muligvis flere intermediate CA certificater som bruges til at udstede slutbruger-certifikater.
  • Certificate Revocation
    Tilbagekaldelse af et certifikat. Hvis et certifikat bliver kompromiteret kan det stadig anvendes på grund af den struktur som X.509 certifikater har. En CA vælger derfor at tilbagekalde et certifikat hvis det er nødvendigt.
  • Certificate Revocation List (CRL)
    En liste af tilbagkaldne certifikater. Listen vedligeholdes og offentliggøres af en CA. Det er op til CA’en hvor mange forskellige CRL’er der indgår i infrastrukturen. Et certifikat udsted af en OCES CA, indeholder en URL til den CRL som certifikatet vil optræde på hvis det tilbagekaldes.
  • Certificate Revocation Source (CRS)
    Boostrapping af CRA sker ved at angive et antal CRS’er, der til sammen indeholder alle de CRL’er der ønskes monitoreret i infrastrukturen. En CRS indeholder en eller to URL’er til CRL’er (en hvis der er tale om et OCES1 certifikat og 2 hvis det er et OCES2 certifikat) samt den certifikatkæde der knytter CRL’erne til NSP/OCES

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

Oprydning

Der ryddes ud løbende i historikken af revokerede certifikater, som findes i en given spærreliste, og hvis de ikke længere fremgår, så fjernes de.

Oprydning kan aktiveres vha. af værdien cleanActivated på certificateRevocationAuthority (Se schedule.xml)

Der er oprettet 4 forskellige oprydninger, som kan aktiveres og vil blive udført, hvis cleanActivated er aktiveret:

  • cleanIfRootExpiredActivated
    Hvis et rodcertifikatet fra certificateRevocationSources (Se bootstap.xml) er udløbet, så findes id fra crl tabellen vha. certifikatets url (Se Endpoints), og bruges til at slette rækker fra revoked vha. crlid (Se Revokeringer).
    Hvis der er et tilhørende intermediatecertifikat, så slettes det også på samme måde, som for rodcertifikatet.
  • cleanIfIntermediateExpiredActivated
    Hvis ikke rodcertifikatet er udløbet, så checkes det om intermediatecertifikat er udløbet. Hvis det er udløbet, så slettes det på samme måde, som beskrevet for rodcertifikat.
  • cleanIfGhostUrlActivated
    Hvis ikke rod- eller intermediatecertifikatet er expired. Så finder vi alle aktive url'er (både for rod- og intermediatecertifikater) fra certificateRevocationSources (Se Endpoints). Oplysninger tilknyttet certifikater som findes i cachen, men som ikke er aktive, slettes fra crl og revoked tabellen.
  • cleanIfGhostSerialNumberActivated
    Hvis ikke rod- eller intermediatecertifikatet er expired. Hvis listen af revoked serialnumber (Se Revokeringer) indeholder værdier, der ikke kan findes i  den aktive liste af serialnumbers, så slettes de fra databasen.

Installation

Kildekode

Kildekoden til CRA kan hentes gennem NSPs SVN:
https://svn.nspop.dk/svn/components/cra

CRA fra version 1.1.8 blevet omlagt til at kunne afvikles vha. docker-compose. Derfor er CRA blevet opdelt i følgende maven moduler:

  • cra-app: Indeholder logik for opdaterings- og oprydningsjob. Desuden er der filer til at bygge cra.war filen. Det er basalt set de filer, der før var indeholdt i cra-projektet inden dockerfisering.
  • cra-db: De filer der bruges til at bygge 'cradb'. Før har dette ligget udenfor CRA modulet.
  • cra-crl-stub: Løsning  der udstiller en servlet, hvor man kan hente CRL-filer. Hvis ikke man inkludere cra-crl-stub i docker-compose, så hentes CRL på www.
  • cra-qa: Her samles test-rapporter (jacoco) fra andre moduler og aggregeres.
  • cra-parent:  Rod modulet til ovenstående moduler. Indeholder desuden compose folder, hvor docker-compose-, konfigurations- og databasefiler er placeret.

Kompilering

CRA leveres gennem NSP’s SVN systemet:

Code Block
svn co https://svn.nspop.dk/svn/components/cra/release-x.y.z cra

Efter checkout skal projektet bygges med Maven således:

Code Block
mvn install

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

Code Block
cra/cra-app/target/cra.war
compose/configuration/cra/bootstrap.xml
compose/configuration/cra/config.xml
compose/configuration/cra/schedule.xml
compose/configuration/cra/seal.xml
compose/configuration/cra/services.xml
compose/configuration/cra-ds.xml
compose/configuration/database/drop-create-db.sql
compose/configuration/log4j-cra.xml
compose/configuration/log4j-nspslalog-cra.properties
compose/configuration/nspslalog-cra.properties

Deployment

Deployment udføre vha. docker-compose.  Der findes 3 udgaver til deployement - development, test og release.

  • Development: del-komponenterne cra-db, cra-crl-stub og cra-app bygges.
  • Test: Servicene  hentes fra docker repository - men evt. stubbede komponenter kan stadig bygges.
  • Release: Her er det kun CRA servicen og opsætningen er  er angivet.

Opsætningen  af cra- og cradb-servicen er beskrvet i efterfølgende afsnit.

Et eksempel på deployment vha. docker-compos:

Code Block
docker-compose -f compose/development/docker-compose.yml up --build

Ved at angive --build, så bygges der docker images ud fra de Dockerfile-filer findes i de moduler, der skal bygges.

Konfiguration

For alle 3 deployment er CRA servicen sat op, så  følgende konfigurationsfiler kopieres til  /pack/wildfly8/standalone/configuration:

Code Block
titleSpring konfiguration
compose/configuration/cra/bootstrap.xml
compose/configuration/cra/config.xml
compose/configuration/cra/schedule.xml
compose/configuration/cra/seal.xml
compose/configuration/cra/services.xml
Code Block
titleLog konfiguration
compose/configuration/log4j-cra.xml
compose/configuration/log4j-nspslalog-cra.properties
compose/configuration/nspslalog-cra.properties

bootstrap

XML filen 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

Under  deployment  vha. docker-compose, så bliver filen cra-ds.xml placeret i /pack/wildfly8/standalone/deployments.

CRA-databasen bliver bygget under deployment - eller et image af bygget biver hentet fra repo. Opskriften på byg af cradb findesi filen Dockerfile under cra-db modulet.
Det image som bygges til  cradb basere sig på 'mariadb:10.1' og indeholder 2 sql-filer:

  • drop-create-db.sql: anvendes til at oprette databasen
  • create-test-data.sql:  indsætter testdata i databasen.

Både cra-ds.xml og drop-create-db.sql  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

Applikation

Samtidigt med at alle konfigurationsfilerne er placeres korrekt og databasen er startes op kan, så bygges cra-app modulet.
I cra-app kopieres filen target/cra.war kopieres over i /pack/wildfly8/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

Opdaterings- og oprydningsintervallet for CRA defineres i filen schedule.xml.

I leverancen er værdien for opdatering sat til 1800000 millisekunder, hvilket er 30 min. Hvis en anden værdi ønskes så er det attributten fixed-delay der skal opdateres.
Der er også indført  en initiel-delay på 60000 (1 min) millisekunder, så databasen kan nå at blive tilgængelig under opstart før cra-servicen prøver at tilgå den.

I leverancen er værdien for oprydning sat til at starte 120000 (2 minutter) millisekunder efter applikationen er startet og derefter scheduleres oprydningen til 60000 millisekunder (1 minut).

Code Block
languagexml
<task:scheduled-tasks scheduler="scheduler">
	<!--  Execute  dk.nsi.nsp.cra.CertificateRevocationAuthorityImpl.update -->
	<!--  initial-delay: milliseconds until first run (1 minutes)-->
    <!--  fixed-delay: 30 minutes-->
    <task:scheduled ref="certificateRevocationAuthority" method="update" initial-delay="60000" fixed-delay="1800000"/>

    <!--  Execute  dk.nsi.nsp.cra.CertificateRevocationCleanUpImpl.cleanup -->
    <!--  initial-delay: milliseconds until first run (2 minutes)-->
    <!--  fixed-delay: milliseconds until next run from completion of previous run (1 min)-->
   	<task:scheduled ref="certificateRevocationCleanUp" method="cleanup" initial-delay="120000" fixed-delay="60000"/>
</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øcertificateRevocationAuthority 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

Fra version 1.1.8 er der desuden indført  følgende parametre til sikre en forbindelse til databasen:

  • initialWaitForDatabaseConnection: Et fixed-delay på 20000 (20 sekunder) millisekunder
  • retriesWhenDatabaseConnectionFail: Et antal forsøg på at få  forbindelse
  • waitBetweenDatabaseConnectionRetries: Et delay på 5000 (5 sekunder) millisekunder.

Så med disse værdier, så afventer certificateRevocationStoreDatabase 20 sekunder inden den forsøger at få forbindelse til databasen første gang. Hvis det fejler, så ventes der 5 sekunder  inden der forsøges igen.

Ved 7. fejl så smides der en exception.

Code Block
languagexml
    <bean id="certificateRevocationStoreDatabase" class="dk.nsi.nsp.cra.db.DBCertificateRevocationStoreImpl" init-method="init">
        <constructor-arg ref="cra.db"/>
        <property name="rewriteBatchedStatements" value="true"/>
        <property name="cleanupSerialNumbersBatchSize" value="500"/>
        <property name="initialWaitForDatabaseConnection" value="20000"/>
        <property name="retriesWhenDatabaseConnectionFail" value="6"/>
        <property name="waitBetweenDatabaseConnectionRetries" value="5000"/>
    </bean>

Opsætning af certificateRevocationAuthority til brug ifm. schedulering af opdatering.

Code Block
languagexml
	<bean id="certificateRevocationAuthority" class="dk.nsi.nsp.cra.CertificateRevocationAuthorityImpl">
        <constructor-arg ref="certificateRevocationStoreDatabase"/>
        <constructor-arg ref="certificateRevocationSources"/>
        <constructor-arg ref="status"/>
        <constructor-arg ref="federation"/>
        <property name="revocationBatchSize" value="20000"/>
    </bean>

Opsætning af certificateRevocationCleanUp til brug ifm. schedulering af oprydning.

Code Block
languagexml
    <bean id="certificateRevocationCleanUp" class="dk.nsi.nsp.cra.CertificateRevocationCleanUpImpl">
        <constructor-arg ref="certificateRevocationStoreDatabase"/>
        <constructor-arg ref="certificateRevocationSources"/>
        <constructor-arg ref="status"/>
        <!--  Activate cleanup functionality -->
        <property name="cleanActivated" value="true" />
        <property name="cleanIfRootExpiredActivated" value="true" />
        <property name="cleanIfIntermediateExpiredActivated" value="true" />
        <property name="cleanIfGhostUrlActivated" value="true" />
        <property name="cleanIfGhostSerialNumberActivated" 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

Code Block
languagexml
   <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

Code Block
languagexml
    <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.

CRL Stub

Når  CRA servicen skal hente crl filer, så kalder sender den et http request. Det er dog ikke altid at disse services der  udstiller CRL filerne er tilgængelige.
For at undgå afhængigheder  til andre services, så er det nu muligt at placere CRL filer i modulet cra-crl-stub.

For at CRA servicen sender sit request til stubben, så skal følgende gøres:

...

4202

Findings fundet ifm. brug af CRA på KIH rettet.

Der er også fundet en uhensigtsmæssighed ifm. et af oprydningsjobbene, cleanIfGhostSerialNumberActivated, som gør at dette oprydningsjob ikke bør aktiveres.

Ændringer til konfiguration:

I filen services.xml er rettet følgende. cleanIfGhostSerialNumberActivated er sat til false og checkDatabaseConnection er tilføjet:

Code Block
<bean id="certificateRevocationCleanUp" class="dk.nsi.nsp.cra.CertificateRevocationCleanUpImpl">
	    <constructor-arg ref="certificateRevocationStoreDatabase"/>
        <constructor-arg ref="certificateRevocationSources"/>
        <constructor-arg ref="status"/>
        <!--  Activate cleanup functionality -->
        <property name="cleanActivated" value="true" />
        <property name="cleanIfRootExpiredActivated" value="true" />
        <property name="cleanIfIntermediateExpiredActivated" value="true" />
        <property name="cleanIfGhostUrlActivated" value="true" />
        <!-- Sat til false, da den bruger al CPU hvis aktiveret -->
        <property name="cleanIfGhostSerialNumberActivated" value="false" />
        <!-- Tilføjet i forbindelse med KIH rettelserne -->
        <property name="checkDatabaseConnection" value="true" />
    </bean>


Release 1.1.9

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-4037

Release 1.1.8

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-3813

CRA er blevet opdelt i maven-moduler.

Rettet  følgende:

Code Block
languageyml
titleservices.xml
<bean id="certificateRevocationStoreDatabase" class="dk.nsi.nsp.cra.db.DBCertificateRevocationStoreImpl" init-method="init">
	<constructor-arg ref="cra.db"/>
	<property name="rewriteBatchedStatements" value="true"/>
	<property name="cleanupSerialNumbersBatchSize" value="500"/>
	<property name="initialWaitForDatabaseConnection" value="20000"/>
	<property name="retriesWhenDatabaseConnectionFail" value="6"/>
	<property name="waitBetweenDatabaseConnectionRetries" value="5000"/>
</bean>
Code Block
languageyml
titleschedule.xml
<task:scheduled-tasks scheduler="scheduler">
	<!--  Execute  dk.nsi.nsp.cra.CertificateRevocationAuthorityImpl.update -->
	<!--  initial-delay: milliseconds until first run (1 minutes)-->
    <!--  fixed-delay: 30 minutes-->
    <task:scheduled ref="certificateRevocationAuthority" method="update" initial-delay="60000" fixed-delay="1800000"/>

    <!--  Execute  dk.nsi.nsp.cra.CertificateRevocationCleanUpImpl.cleanup -->
    <!--  initial-delay: milliseconds until first run (2 minutes)-->
    <!--  fixed-delay: milliseconds until next run from completion of previous run (1 min)-->
   	<task:scheduled ref="certificateRevocationCleanUp" method="cleanup" initial-delay="120000" fixed-delay="60000"/>
</task:scheduled-tasks>

Release 1.1.7

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-3092

Release 1.1.6

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-3884

Tilføjet følgende:
<property name="cleanupSerialNumbersBatchSize" value="500"/>

til certificateRevocationStoreDatabase-bean i services.xml.

Release 1.1.5

Leverancen er tagget som release-1.1.5.

Rettelse af kode efter finding ved release.

Parameter til aktivering af oprydning af udløbet rod-certifikat var ikke stavet ens i opsætning og i koden. Ændret værdien fra "cleanIfRootExpiredActivate" til "cleanIfRootExpiredActivated" i koden.

Release 1.1.4

Leverancen er tagget som release-1.1.4.

Rettelse af kode efter QA findings:

  • Status opdateres ved alle fejl
  • Fjernet udkommenteret kode.
  • Flyttet kode fra CertificateRevocationAuthorityImpl ud til oprydning ud i egen klasse CertificateRevocationCleanUpImpl.
  • Ændret struktur i oprydningskoden, så retur-værdier sendes vha. ny klasse CertificateRevocationCleanUpData.

Release 1.1.3

Leverancen er tagget som release-1.1.3.

Følgende JIRA sager indgår i leverancen.

Jira
serverNSI JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIde64c3bc3-001c-3439-bc53-f7a235a8cd61
keySDS-2554

...

I docker-compose tilføjes crl.XYZ.com som alias

Code Block
languageyml
titledocker-compose.yml
crl-stub:
  networks:
    cra_net:
      aliases:
        - crl.XYZ.com

...