Indhold

Introduktion

Dette dokument indeholder en beskrivelse af hvordan Certificate Revocation Authority (herefter CRA) driftes på et NSP Backend miljø.

Komponenter

Dette dokument dækker følgende komponenter på NSP:

  • Certificate Revocation Authority

  • Type: Webservice

  • Filnavn: cra.war

  • Servicecheckurl: <serverurl>/cra/status

  • Versionurl: <serverurl>/cra/version

Konfiguration

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

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.

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

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

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


Opsætning af FetchIntermediateCraJob til brug ifm. hent og gem intermediate CA certifikater.

    <bean id="caIntermediateCertificateStoreDatabase" class="dk.nsi.nsp.cra.db.DBCaIntermediateCertificateStore">
        <constructor-arg ref="cra.db"/>
    </bean>
  
    <bean id="caIntermediateCertificateFetch" class="dk.nsi.nsp.cra.CaIntermediateCertificateFetchImpl">
		<constructor-arg ref="caIntermediateCertificateStoreDatabase"/>
        <constructor-arg ref="caIntermediateCertificateSources"/>
    </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. For hver caIntermediateCertificateSources der defineres vil CRA hente de angivne 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"/>
        <constructor-arg value="PT5M" type="java.lang.String"/>
    </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. Her efter følger argumentet "certificateResolver". Sidste argument angiver den periode der skal tillægges NextUpdate. Perioden angives i ISO-8601 format. Dvs. hvis perioden skal være 5 minutter, så angives den som "PT5M".

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"/>
        <constructor-arg value="PT5M" type="java.lang.String"/>
    </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. Her efter følger argumenterne "certificateStore" og "certificateResolver". Sidste argument angiver den periode der skal tillægges NextUpdate. Perioden angives i ISO-8601 format. Dvs. hvis perioden skal være 5 minutter, så angives den som "PT5M".

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

Intermediate CA certifikater

    <util:list id="caIntermediateCertificateSources" value-type="dk.nsi.nsp.cra.bootstrap.CaIntermediateCertificateSource">
    	<value>http://ca1.cti-gov.dk/oces/issuing/1/cacert/issuing.cer</value>
    </util:list>

Logning

CRA logger til filen cra.log

Overvågning

Der er følgende muligheder for at overvåge CRA.

cra-servlet.xml

Der er defineret følgende endpoints i der giver følgende muligheder:

URLBeskrivelse
<serverurl>/cra/statusViser en statusside hvis servicen er ok, og der vil være information om hvilken aktivitet der har været. Data tages fra cachen og databasen for hvert opkald.
<serverurl>/cra/versionViser den kørende version af CRA

<serverurl>/cra/job/revokeUpdate/start

Denne URL starter opdateringen af revokeringslisterne inkl indlæsning af cache.

<serverurl>/cra/job/revokeUpdate/status

Denne URL viser status af det seneste udførte revokeUpdate job

<serverurl>/cra/job/cleanupRevocationLists/start

Denne URL starter oprydning af revokeringslisterne

<serverurl>/cra/job/cleanupRevocationLists/status

Denne URL viser status af det seneste udførte cleanupRevocationLists job

<serverurl>/cra/job/fetchIntermediateCert/start

Denne URL starter hent af CA Intermediate Certificaterne

<serverurl>/cra/job/fetchIntermediateCert/status

Denne URL viser status af det seneste udførte FetchIntermediateCra  job

Oprydning

Der kan foretages løbende oprydning 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 af driften ved at kalde oprydningsjobbet.

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

  • 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.
  • No labels