Page History
...
1.1.2 | 2016-01-01 | Initielt Dokument | Arosii |
1.1.3 | 2019-08-19 | Tilføjet oprydningsjob til schedule | KvalitetsIT |
1.1.4 | 2019-11-06 | Rettet kode efter QA | KvalitetsIT |
1.1.5 | 2020-01-07 | Rettet kode efter release issue | KvalitetsIT |
1.1.8 | 2020-06-29 | Containerization af CRA | KvalitetsIT |
Release
Release 1.1.8
Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
...
Code Block |
---|
svn co https://svn.nspop.dk/svn/nspcomponents/tags/tools/cra/release-x.y.z cra |
Efter checkout skal projektet bygges med Maven således:
...
Følgende filer udgør nu leverancen og skal anvendes i resten af installationsvejledningen:
Code Block |
---|
cra/cra-app/target/cra-x.y.z.war cracompose/etcconfiguration/cra/bootstrap.xml cracompose/etcconfiguration/cra/config.xml cracompose/etcconfiguration/cra/schedule.xml cracompose/etcconfiguration/cra/seal.xml cracompose/etcconfiguration/cra/services.xml cracompose/etcconfiguration/cra-ds.xml cracompose/configuration/etcdatabase/drop-create-db.sql cracompose/etcconfiguration/log4j-cra.xml cracompose/etcconfiguration/log4j-nspslalog-cra.properties cracompose/etcconfiguration/nspslalog-cra.properties |
Konfiguration
Inden CRA kan deployes skal konfigurationsfilerne kopieres over i biblioteket /pack/jboss8/standalone/configuration. Følgende filer skal herefter findes:
Code Block |
---|
/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
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.
I leverancen er værdien for oprydning sat til at starte 600000 (10 minutter) millisekunder efter applikationen er startet og derefter scheduleres oprydningen til 86400000 millisekunder (24 timer).
Code Block | ||
---|---|---|
| ||
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="certificateRevocationAuthority" method="update" fixed-delay="1800000"/>
</task:scheduled-tasks>
<task:scheduled-tasks>
<task:scheduled ref="certificateRevocationAuthority" method="cleanup" initial-delay="600000" fixed-delay="86400000"/>
</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
Code Block | ||
---|---|---|
| ||
<bean id="certificateRevocationStoreDatabase" class="dk.nsi.nsp.cra.db.DBCertificateRevocationStoreImpl" init-method="init">
<constructor-arg ref="cra.db"/>
<property name="rewriteBatchedStatements" value="true"/>
</bean> |
Opsætning af certificateRevocationAuthority til brug ifm. schedulering af opdatering og oprydning skal også være heri.
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<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 | ||
---|---|---|
| ||
<bean id="testCertificateRevocationSource" class="dk.nsi.nsp.cra.bootstrap.KeyStoreCertificateRevocationSource" | ||
Code Block | ||
| ||
<bean id="certificateRevocationAuthority" class="dk.nsi.nsp.cra.CertificateRevocationAuthorityImpl"> <constructor-arg ref="certificateRevocationStoreDatabase"/> <constructor-arg ref="certificateRevocationSources"/> <constructor-arg ref="status"/>arg> <constructor-arg ref="federation"/> <property<bean nameid="revocationBatchSizetestKeystore" valueclass="20000java.io.File"/> <!-- Activate cleanup functionality <constructor-arg value="/pack/cra/cra-test.keystore" type="java.lang.String" /> <property name="cleanActivated" value="true" /> </bean> <property name="cleanIfRootExpiredActivated" value="true" </>constructor-arg> <property<constructor-arg namevalue="cleanIfIntermediateExpiredActivated!234Qwer" valuetype="truejava.lang.String" /> <property<constructor-arg namevalue="cleanIfGhostUrlActivatedSOSI:ALIAS_SYSTEM" valuetype="truejava.lang.String" /> <property name="cleanIfGhostSerialNumberActivated" value="true" <constructor-arg ref="certificateResolver"/> </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.
...
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 | ||
---|---|---|
| ||
<bean id="testCertificateRevocationSourcesystemtest10CertificateRevocationSource" class="dk.nsi.nsp.cra.bootstrap.KeyStoreCertificateRevocationSource"> <constructor-arg> <bean id="testKeystore" class="java.io.File"> .nsp.cra.bootstrap.RemoteCertificateRevocationSource"> <constructor-arg value="http:/pack/cra/cra-test.keystore/m.aia.systemtest10.trust2408.com/systemtest10-ca.cer" type="java.lang.String" /> </bean> </constructor-arg> <constructor-arg value="!234Qwerhttp://crl.systemtest10.trust2408.com/systemtest10.crl" type="java.lang.String" /> <constructor-arg valueref="SOSI:ALIAS_SYSTEM" type="java.lang.String" certificateStore"/> <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 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 til en KeyStoreCertificateRevocationSource. Det De to sidste argument argumenter skal altid være certificateStore og 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 | ||
---|---|---|
| ||
<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.
...
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:
- Hvis vi antager at den CRL file vi skal bruge finde på denne http adresse: http://crl.XYZ.com/ABC.crl
I docker-compose tilføjes crl.XYZ.com som alias
Code Block language yml title docker-compose.yml crl-stub: networks: cra_net: aliases: - crl.XYZ.com
- Under compose/configuration/crl/resources oprettes en folder 'crl.XYZ.com'
- Filen ABC.crl downloades fra http://crl.XYZ.com/ABC.crl og placeres i folderen 'compose/configuration/crl/resources/crl.XYZ.com/'
- Applikationerne skal genstartes vha. "docker-compose down" og "docker-compose up"