-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
213 lines (207 loc) · 8.49 KB
/
Copy pathdocker-compose.yml
File metadata and controls
213 lines (207 loc) · 8.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# Pile de démonstration Open eIDAS : autorité de certification, autorité
# d'horodatage et répondeur OCSP — trois binaires Go, une base PostgreSQL.
#
# Il n'y a plus de moteur de PKI tiers : le remplacement d'OpenXPKI par
# cmd/ca-server (voir INDEPENDANCE.md) a fait disparaître quatre conteneurs
# Perl, MariaDB et les contournements de permissions qui allaient avec.
services:
db:
container_name: openeidas_db
image: postgres:17-alpine
# Dimensionné par mesure directe (voir docs/SIZING.md) : échec net
# (OOM pendant initdb) en dessous de 32 Mio, marche fiable dès 40 Mio.
# 64/256 laisse une marge confortable sans sur-provisionner.
mem_reservation: 64m
mem_limit: 256m
cpus: 0.5
environment:
POSTGRES_DB: openeidas
POSTGRES_USER: openeidas
POSTGRES_PASSWORD: ${OPENEIDAS_DB_PASSWORD:-openeidas}
volumes:
- cadb:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U openeidas -d openeidas"]
interval: 5s
timeout: 3s
retries: 20
# Autorité de certification et d'enregistrement. Le conteneur exécute la
# cérémonie de clé au démarrage (idempotente), puis sert l'API d'enrôlement,
# le certificat de la CA et la CRL.
ca:
container_name: openeidas_ca
# La cérémonie de clé (2x RSA-4096) réussit même au plancher minimal
# accepté par Docker (6 Mio) ; le régime `serve` sous charge réelle
# d'enrôlement est stable dès 16 Mio (usage observé : 4-5 Mio). 32/128
# garde une marge large. Le CPU n'est limitant que pour la durée de la
# cérémonie (0,25 CPU -> ~9 s, 0,05 CPU -> ~40 s) ; 1 CPU de limite la
# ramène à ~2 s (voir docs/SIZING.md).
mem_reservation: 32m
mem_limit: 128m
cpus: 1.0
build:
context: .
dockerfile: deploy/ca-server/Dockerfile
args:
VERSION: ${OPENEIDAS_VERSION:-dev}
ports:
- "8320:8320"
environment:
OPENEIDAS_DB_DSN: postgres://openeidas:${OPENEIDAS_DB_PASSWORD:-openeidas}@db:5432/openeidas?sslmode=disable
OPENEIDAS_ISSUING_PIN: ${OPENEIDAS_CA_PIN:-1234}
OPENEIDAS_ROOT_PIN: ${OPENEIDAS_CA_ROOT_PIN:-1234}
OPENEIDAS_CA_KEY_BITS: "4096"
# Adresse publique gravée dans les extensions CDP et AIA des certificats
# émis : elle doit être joignable par qui vérifie un certificat. En
# local, seul http://localhost:8320 l'est.
OPENEIDAS_PKI_PUBLIC_URL: ${OPENEIDAS_PKI_PUBLIC_URL:-http://localhost:8320}
OPENEIDAS_OCSP_PUBLIC_URL: ${OPENEIDAS_OCSP_PUBLIC_URL:-http://localhost:8319}
# Authentifie les demandes d'enrôlement — généré et persisté par
# scripts/bootstrap.sh, partagé avec la TSA et le répondeur OCSP.
OPENEIDAS_ENROLL_HMAC_KEY: ${OPENEIDAS_ENROLL_HMAC_KEY:-}
# Identité consignée au procès-verbal de cérémonie (ETSI EN 319 411-1
# §6.5.1). En production, une personne nommée, pas un compte technique.
OPENEIDAS_CEREMONY_OPERATOR: ${OPENEIDAS_CEREMONY_OPERATOR:-ci-bootstrap}
OPENEIDAS_CRL_VALIDITY: 24h
OPENEIDAS_CRL_REFRESH: 1h
OPENEIDAS_AUDIT_FILE: /var/lib/open-eidas/state/ca-audit.log
OPENEIDAS_AUDIT_RETENTION: ${OPENEIDAS_AUDIT_RETENTION:-8760h}
volumes:
- catokens:/var/lib/softhsm/tokens
- castate:/var/lib/open-eidas/state
healthcheck:
test: ["CMD", "ca-server", "healthcheck"]
interval: 5s
timeout: 3s
retries: 30
depends_on:
db:
condition: service_healthy
# Cible de réplication hors site du journal d'audit pour la démonstration
# locale : n'importe quel serveur WebDAV authentifié convient en
# production (Nextcloud, stockage d'objets exposé en WebDAV, etc.).
audit-replica:
container_name: openeidas_audit_replica
image: bytemark/webdav:2.4
mem_reservation: 24m
mem_limit: 96m
cpus: 0.10
environment:
AUTH_TYPE: Basic
USERNAME: ${OPENEIDAS_AUDIT_REPLICA_USER:-openeidas}
PASSWORD: ${OPENEIDAS_AUDIT_REPLICA_PASSWORD:-changeme}
volumes:
- auditreplica:/var/lib/dav
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null --header=\"Authorization: Basic $$(printf '%s:%s' \"$$USERNAME\" \"$$PASSWORD\" | base64)\" http://localhost/"]
interval: 5s
timeout: 3s
retries: 10
tsa:
container_name: openeidas_tsa
# Enrôlement (1x RSA-3072) et signature de jetons sous charge stables
# dès 16 Mio (usage observé : jusqu'à 9,3 Mio après dix horodatages
# consécutifs). 32/128 garde une marge large.
mem_reservation: 32m
mem_limit: 128m
cpus: 0.25
build:
context: .
dockerfile: deploy/tsa/Dockerfile
args:
VERSION: ${OPENEIDAS_VERSION:-dev}
ports:
- "8318:8318"
environment:
OPENEIDAS_PIN: ${OPENEIDAS_PIN:-1234}
OPENEIDAS_TOKEN_LABEL: open-eidas-tsa
OPENEIDAS_KEY_LABEL: tsu-signing-key
OPENEIDAS_KEY_BITS: "3072"
OPENEIDAS_POLICY_OID: ${OPENEIDAS_POLICY_OID:-1.3.6.1.4.1.99999.1.1.1}
OPENEIDAS_ACCURACY: 1s
# Traçabilité de l'heure : le service cesse de signer si la dérive
# dépasse le seuil ou si le quorum de sources n'est plus joignable.
# Sans accès sortant en UDP/123, basculer sur OPENEIDAS_TIME_POLICY=monitor.
OPENEIDAS_TIME_POLICY: ${OPENEIDAS_TIME_POLICY:-enforce}
OPENEIDAS_TIME_SOURCES: ${OPENEIDAS_TIME_SOURCES:-ntp.obspm.fr,ptbtime1.ptb.de}
OPENEIDAS_TIME_MIN_SOURCES: "2"
OPENEIDAS_TIME_MAX_OFFSET: 500ms
OPENEIDAS_AUDIT_FILE: /var/lib/open-eidas/state/audit.log
OPENEIDAS_AUDIT_SEAL_INTERVAL: 1h
OPENEIDAS_CROSS_TSA_URLS: ${OPENEIDAS_CROSS_TSA_URLS:-https://freetsa.org/tsr,http://timestamp.digicert.com}
OPENEIDAS_AUDIT_REPLICA_URL: http://audit-replica/
OPENEIDAS_AUDIT_REPLICA_USER: ${OPENEIDAS_AUDIT_REPLICA_USER:-openeidas}
OPENEIDAS_AUDIT_REPLICA_PASSWORD: ${OPENEIDAS_AUDIT_REPLICA_PASSWORD:-changeme}
OPENEIDAS_CERT_FILE: /var/lib/open-eidas/state/tsu.pem
OPENEIDAS_CHAIN_FILE: /var/lib/open-eidas/state/chain.pem
# Adresse INTERNE de la CA : le certificat, lui, portera l'adresse
# publique (OPENEIDAS_PKI_PUBLIC_URL, côté service ca).
OPENEIDAS_ENROLL_ENDPOINT: http://ca:8320/api/v1/enroll
OPENEIDAS_ENROLL_PROFILE: tsa_signer
OPENEIDAS_ENROLL_HMAC_KEY: ${OPENEIDAS_ENROLL_HMAC_KEY:-}
OPENEIDAS_SUBJECT_CN: ${OPENEIDAS_SUBJECT_CN:-Open eIDAS Time-Stamping Unit 1}
volumes:
- softhsmtokens:/var/lib/softhsm/tokens
- tsastate:/var/lib/open-eidas/state
healthcheck:
test: ["CMD", "tsa-server", "version"]
interval: 10s
timeout: 3s
retries: 5
depends_on:
ca:
condition: service_healthy
audit-replica:
condition: service_healthy
# Répondeur OCSP (RFC 6960) pour la CA émettrice. Il s'appuie sur la CRL
# publiée par le service ca plutôt que sur un accès direct au registre :
# il ne voit ainsi que ce qu'un tiers pourrait voir lui-même.
ocsp-responder:
container_name: openeidas_ocsp_responder
# Même profil que la TSA, en plus léger (usage observé : 3,3 Mio sous
# charge à 16 Mio de limite).
mem_reservation: 24m
mem_limit: 96m
cpus: 0.15
build:
context: .
dockerfile: deploy/ocsp-responder/Dockerfile
args:
VERSION: ${OPENEIDAS_VERSION:-dev}
ports:
- "8319:8319"
environment:
OPENEIDAS_PIN: ${OPENEIDAS_OCSP_PIN:-1234}
OPENEIDAS_TOKEN_LABEL: open-eidas-ocsp
OPENEIDAS_KEY_LABEL: ocsp-signing-key
OPENEIDAS_KEY_BITS: "3072"
OPENEIDAS_CERT_FILE: /var/lib/open-eidas/state/ocsp.pem
OPENEIDAS_CHAIN_FILE: /var/lib/open-eidas/state/chain.pem
OPENEIDAS_ENROLL_ENDPOINT: http://ca:8320/api/v1/enroll
OPENEIDAS_ENROLL_PROFILE: ocsp_responder
OPENEIDAS_ENROLL_HMAC_KEY: ${OPENEIDAS_ENROLL_HMAC_KEY:-}
OPENEIDAS_SUBJECT_CN: ${OPENEIDAS_OCSP_SUBJECT_CN:-Open eIDAS OCSP Responder 1}
# Adresse à laquelle CE SERVICE joint la CA pour interroger sa CRL —
# interne au réseau docker-compose, à ne pas confondre avec
# OPENEIDAS_PKI_PUBLIC_URL (adresse gravée dans les certificats).
OPENEIDAS_PKI_INTERNAL_URL: http://ca:8320
volumes:
- ocsptokens:/var/lib/softhsm/tokens
- ocspstate:/var/lib/open-eidas/state
healthcheck:
test: ["CMD", "ocsp-responder", "version"]
interval: 10s
timeout: 3s
retries: 5
depends_on:
ca:
condition: service_healthy
volumes:
cadb:
catokens:
castate:
softhsmtokens:
tsastate:
auditreplica:
ocsptokens:
ocspstate: