Table of Contents
Úvod
Dokumentace TeskaLabs SeaCat PKI¶
Vítejte v dokumentaci TeskaLabs SeaCat PKI.
TeskaLabs SeaCat PKI¶
TeskaLabs SeaCat PKI je produkt kybernetické bezpečnosti pro správu infrastruktury veřejných klíčů (PKI). Tato aplikace je navržena pro vytváření a správu X.509 certifikátů, žádostí o certifikáty (CSR), RSA a EC soukromých klíčů a seznamů odvolaných certifikátů (CRL).
Poskytuje vše, co je potřeba pro provozování certifikační autority (CA).
Vyrobeno s ❤️ od TeskaLabs
TeskaLabs SeaCat PKI je produktem TeskaLabs.
Snímky obrazovky¶
Zde jsou příklady webové aplikace TeskaLabs SeaCat PKI.
Picture: Správa dostupných soukromých klíčů.
Picture: Vytváření nové žádosti o certifikát.
Technická specifikace¶
TeskaLabs SeaCat PKI se skládá z webové aplikace a mikroservisu. Mikroservis poskytuje REST API. Data jsou uložena v databázi MongoDB. TeskaLabs SeaCat PKI může používat různé moduly hardwarové bezpečnosti (HSM) prostřednictvím rozhraní PKCS#11. Uživatelská autentizace se provádí pomocí OAuth 2.0 s protokolem OpenID Connect.
TeskaLabs SeaCat PKI je navržena tak, aby byla provozována jako systém s vysokou dostupností (tj. geograficky distribuovaný cluster). Jednoduché nasazení na jednom uzlu je také možné.
Produkt je multi-tenant, což znamená, že každý nájemce má svá vlastní data (certifikáty, klíče atd.) a může být provozován nezávisle.
Produkt může být nasazen jako on-premises nebo dodán jako služba.
Funkce¶
-
Obecné
- Webové uživatelské rozhraní
- Podporované veřejné klíče: RSA, EC
- Rozhraní PKCS#11 pro moduly hardwarové bezpečnosti (HSM) a soukromé klíče vázané na HSM
- REST API
- Multi-tenant: Může provozovat více certifikačních autorit (CA) atd.
- Vysoká dostupnost
- Geograficky distribuovaný cluster
- Vysoký objem operací CA
-
X.509
-
C-ITS Security (ETSI ITS-G5), C-V2X Security (LTE-V2X)
- ETSI TS 103 097 v1.3.1
- ETSI TS 102 941 v1.3.1
-
Autentizace a autorizace uživatelů
- OAuth 2.0
- Protokol OpenID Connect
- Integrace s Microsoft Active Directory
- Role-Based Access Control
Note
TeskaLabs SeaCat PKI je postavena pomocí Python, cryptography.io a OpenSSL
C-ITS Bezpečnost¶
TeskaLabs SeaCat PKI poskytuje podporu pro C-ITS (Kooperativní Inteligentní Dopravní Systémy) bezpečnostní kryptografický systém publikovaný ETSI.
C-ITS Bezpečnost je definována následujícími standardy:
ETSI¶
- ETSI TS 102 941 v1.3.1, v1.2.1 - Bezpečnost; Správa důvěry a soukromí [PDF]
- ETSI TS 103 097 v1.3.1 - Formáty certifikátů [PDF]
- ASN.1 specifikace
Evropská komise / JRC¶
- C-ITS Politika certifikátů (EU CP)
- C-ITS Politika bezpečnosti (EU SP)
IEEE¶
- IEEE 1609.2-2016 - Bezpečnostní služby pro aplikace a zprávy o správě [placené]
Návody
Příručky¶
Tato sekce obsahuje příručky pro používání TeskaLabs SeaCat PKI v různých scénářích.
První kroky¶
Jako první věc byste měli Vytvořit certifikační autoritu, abyste mohli vydávat certifikáty pro své uživatele a zařízení.
Vytvoření certifikační autority¶
Certifikační autorita (CA) je důvěryhodná entita, která vydává digitální certifikáty. Aby se tato důvěra ustanovila, musí mít samotná CA certifikát. Tento certifikát je obvykle samopodepsaný, což znamená, že CA podepisuje svůj vlastní certifikát. Tento samopodepsaný certifikát slouží jako základ důvěry pro všechny certifikáty vydané CA. Bez tohoto samopodepsaného certifikátu by CA nebyla schopna ověřit pravost certifikátů, které vydává, a celá řetěz důvěry by byl přerušen. Proto je vytvoření samopodepsaného certifikátu pro CA zásadním prvním krokem při nastavování infrastruktury veřejných klíčů (PKI).
Požadavky¶
- TeskaLabs SeaCat PKI běží v základním nastavení (SoftHSMv2 nakonfigurován pro aktivního nájemce).
- Přístup k webovému uživatelskému rozhraní
Kroky¶
-
Přejděte na obrazovku "Certifikáty" > "Vytvořit certifikát"
-
Vyplňte formulář
- Vyberte možnost "Vytvořit samopodepsaný certifikát" na kartě "Zdroj"
- Vyberte možnost "Vygenerovat nový soukromý klíč" v rozbalovacím seznamu "Soukromý klíč"
- Zadejte název pro soukromý klíč, tj. "Můj soukromý klíč CA"
- Vyberte "SoftHSM" v rozbalovacím seznamu Poskytovatel soukromého klíče, soukromý klíč bude vygenerován v HSM
- Vyberte "MySoftHSMToken" v rozbalovacím seznamu Token PKCS#11
- Vyberte "RSA" v rozbalovacím seznamu Typ klíče
- Vyberte "4096" v rozbalovacím seznamu Velikost klíče
- Vyberte "Certifikační autorita" v rozbalovacím seznamu "Použít šablonu"
- Vyplňte název CA na kartě "Obecné", tj. "Můj CA"
- Prodloužte platnost certifikátu CA na "Platný do", 10 let je dobrý výchozí čas
- Vyplňte Obecný název pro CA na kartě "Subjekt", tj. "Můj CA", neváhejte přidat další pole do subjektu
- Klikněte na tlačítko "Vytvořit" pro vytvoření certifikátu
Můžete také upravit další atributy certifikátu podle svých konkrétních potřeb.
-
Zkontrolujte vytvořený certifikát CA
Gratulujeme! Vytvořili jste certifikát CA.
Certifikát CA si můžete stáhnout pomocí ikony "Stáhnout" v pravém horním rohu karty.
Nyní můžete vytvořit certifikát pro uživatele nebo zařízení.
Schválení žádosti o podepsání certifikátu¶
Žádost o podepsání certifikátu (CSR) je žádost o digitální certifikát od certifikační autority (CA). CSR obsahuje informace o veřejném klíči žadatele, subjektu požadovaného certifikátu a další relevantní detaily. CA tyto informace používá k vygenerování certifikátu, který lze použít k ověření identity žadatele a šifrování dat.
Požadavky¶
- TeskaLabs SeaCat PKI běží v základním nastavení (SoftHSMv2 nakonfigurován pro aktivního nájemce).
- Přístup k webovému uživatelskému rozhraní
- CSR vytvořená uživatelem
- Certifikát CA a soukromý klíč v rámci CA
Krok za krokem¶
-
Přejděte na obrazovku "Import"
Vyplňte formulář:
- Typ importovaného materiálu: "CSR"
- Formát: "PEM" nebo "DER" podle skutečného formátu souboru CSR
- Soubor: nahrajte soubor CSR
-
Zkontrolujte importovaný CSR
Pokud CSR obsahuje správné informace, klikněte na tlačítko "Schválit". CSR můžete také smazat, abyste zrušili žádost.
-
Vytvořte certifikát
Na této obrazovce vyplňte:
- Certifikační autoritu do pole "Vydavatel".
- Stiskněte "Kopírovat žádost o podepsání certifikátu do certifikátu", pokud chcete zkopírovat atributy z CSR
- Zkontrolujte, změňte nebo přidejte atributy na zbývajících záložkách
- Stiskněte "Odeslat" pro vytvoření certifikátu
-
Zkontrolujte vytvořený certifikát
Gratulujeme! Vytvořili jste certifikát.
Certifikát si můžete stáhnout pomocí ikony "Stáhnout" v pravém horním rohu karty.
SCEP¶
SeaCat PKI podporuje SCEP, také známý jako Protokol pro jednoduchou registraci certifikátů.
Konfigurace¶
Založte X.509 certifikační autoritu schopnou SCEP.
-
Zadejte nového nájemce
v
etc/seacatpki.conf
:[tenants] ids=TENANT_ROOT_CA
Poznámka: Název nájemce (např. "TENANT_ROOT_CA") je libovolný.
-
Určete základní URL SeaCat PKI API
export ROOT_CA_URL=http://localhost:8080/TENANT_ROOT_CA
-
Vygenerujte soukromý klíč CA, RSA 4096 (nebo více).
openssl genrsa -out ca-private-key.pem 4096
-
Nakonfigurujte nájemce a soukromý klíč CA v PKI
v
seacatpki.conf
:[tenants] ids=TENANT_ROOT_CA [seacatpki:x509:ca:scep-tenant] # Standardní konfigurace certifikační autority X.509 ca_key=scep-ca-key [seacatpki:private_key:scep-ca-key] keyfile=${THIS_DIR}/ca-private-key.pem tenants=TENANT_ROOT_CA
-
Restartujte SeaCat PKI
-
Vygenerujte samopodepsaný certifikát Root CA
Použijte šablonu rootca.json a upravte především název subjektu.
curl -X PUT "${ROOT_CA_URL}/x509/self-signed" \ --header 'Content-Type: application/json' \ -d @rootca.json
Poznamenejte si
pbid
certifikátu CA pro pozdější použití. -
Dokončete konfiguraci SeaCat PKI
v
seacatpki.conf
:[tenants] ids=scep-tenant [seacatpki:x509:ca:scep-tenant] # Standardní konfigurace certifikační autority X.509 ca_key=scep-ca-key ca_cert=scep-tenant:4fec087429f00360e314894c79f4d6d59405b131624ce70fccb44154641084a743b855d8c5f230ec69f74e04475e5056 # To umožňuje použití SCEP scep=yes [seacatpki:private_key:scep-ca-key] keyfile=${THIS_DIR}/ca-private-key.pem tenants=scep-tenant
-
Restartujte SeaCat PKI
-
SCEP povolená X.509 CA je připravena k použití.
Zdroje¶
- Protokol pro jednoduchou registraci certifikátů (SCEP) Specifikace, draft-gutmann-scep-16
- RFC 2315 PKCS #7: Syntaxe kryptografických zpráv
- RFC 5652 Syntaxe kryptografických zpráv (CMS)
Registrace/Obnova certifikátu¶
Postup registrace certifikátu¶
Klient C
(také sscep)
Certifikační autorita CA
(také SeaCat PKI)
C
vygeneruje pár soukromého/verejného klíčeC
vygeneruje CSR (také Žádost o podepsání certifikátu, PKCS#10)- Přidejte atributy
- Přidejte veřejný klíč
- Podepište CSR soukromým klíčem (Proof-of-Possession nebo PoP)
C
odešle CSRCA
přes SCEP (žádost je ve formátu PKCS#7, také CMS)CA
přijme CSR (přes SCEP rozhraní, včetně PKCS# ověření)CA
ověří CSRCA
uloží CSR do úložiště- V tuto chvíli se
CA
může rozhodnout, že schválení bude zpožděno, a vrátíPENDING
C
. Proces může být zde obnoven.C
musí pravidelně kontrolovat stav registrace uCA
. CA
schválí CSR a tento krok implicitně vytvoří certifikát klienta- Přidejte vybrané atributy z CSR
- Přidejte veřejný klíč z CSR
- Podepište nový certifikát svým soukromým klíčem CA
CA
uloží nový certifikát klienta do úložištěC
získá tento certifikát klienta odCA
(přes SCEP)C
uloží certifikát klienta na místní disk
Poznámka: Proces obnovy je podobný registraci.
Nástroj sscep
¶
SSCEP je příkazový řádkový klient pro protokol SCEP.
Může být použit jako klient pro SeaCat PKI.
-
Nakonfigurujte vstupní bod SCEP pro SeaCat PKI.
% export SCEP_URL="http://example.com/scep-tenant/scep"
-
Získejte certifikát CA
% sscep getca -c ca.cert -u ${SCEP_URL}
Uloží certifikát CA do souboru
ca.cert
. -
Připravte CSR
% openssl req -newkey rsa:2048 -sha256 -nodes -out local.csr -keyout local.key -subj "/C=GB/L=London/O=TeskaLabs/OU=SeaCat/CN=example.com"
To vytvoří
local.key
alocal.csr
. -
Registrace certifikátu
% sscep enroll -v -k local.key -r local.csr -c ca.cert -l local.cert -t 2 -u ${SCEP_URL}
-
Obnova certifikátu
% sscep enroll -v -k local.key -r local.csr -c ca.cert -O local.cert -K local.key -l local.cert -u ${SCEP_URL}
Podpora SCEP od Apple¶
Apple umožňuje specifikovat profil pro macOS a iOS, který obsahuje specifikace SCEP umožňující automatizovanou registraci zařízení.
Dokumentace:
- Reference profilu konfigurace (Apple, PDF)
- Profily konfigurace (Online, proměnné pro substituci pro profily)
SCEP profil¶
./scep-apple-profile.mobileconfig
Profil je XML soubor. Apple poskytuje nástroj "Apple Configurator 2" pro správu profilů. Profil může být distribuován jako soubor nebo stažen přes HTTP(S) s MIME typem 'application/x-apple-aspen-config'.
TR-069¶
Jak implementovat TR-069, ACS a vzájemnou TLS autentizaci pomocí TeskaLabs SeaCat PKI.
Tento dokument podrobně popisuje, jak implementovat zabezpečenou, vzájemně autentizovanou TLS komunikaci mezi CPE a ACS pro TR-069. Základem této technické specifikace je Technická zpráva "TR-069 CPE WAN Management Protocol Issue: 1 Amendment 6" publikovaná The Broadband Forum.
Podrobně popisuje, jak zaregistrovat CPE pomocí SCEP.
Architektura¶
Poznámky¶
- TR-069 klient na CPE je HTTPS klient
- ACS je HTTP server
- NGINX poskytuje ukončení HTTPS a vzájemnou TLS autentizaci
- SeaCat PKI poskytuje schopnost CA (Certifikační autorita)
- SCEP klient na CPE používá protokol HTTP/1.0, který je předepsán specifikací SCEP
Certifikáty¶
Server CA Certifikát¶
Dlouhodobý (20+ let) X.509 certifikát, který je přednahrán do CPE během výroby. Také nazýván "důvěryhodný kořenový certifikát".
CPE CA Certifikát¶
Dlouhodobý (20+ let) X.509 certifikát, který je stažen do CPE pomocí SCEP nástroje. Certifikační autorita (CA) CPE je provozována SeaCat PKI. Toto je typicky jiný certifikát než Server CA certifikát.
CPE Certifikát¶
Krátkodobý (~ 1 rok) unikátní CPE klientský certifikát, který je generován (registrace) a obnovován během životního cyklu CPE pomocí SCEP. Je generován certifikační autoritou SeaCat PKI, pomocí CPE CA certifikátu, na základě SCEP žádosti z CPE (registrace nebo obnova). Soukromý klíč CPE je generován a uložen na CPE. Také nazýván "klientský certifikát".
Server Certifikát¶
Vydán Server CA na 3 měsíce, pravidelně obnovován.
Podrobné CPE ceremonie pro unikátní CPE klientský certifikát¶
Ceremonie jsou zpracovávány pomocí SCEP.
Registrace¶
Toto je počáteční ceremonie, která získává první klientský certifikát pro CPE.
Spuštěno: Po dostupnosti síťového připojení CPE, může být spuštěno pravidelně.
Předpoklad: CPE nemá klientský certifikát.
- CPE generuje pár soukromého/verejného klíče (CPK)
- CPE generuje žádost o podepsání certifikátu (CSR) pomocí CPK
- CPE odesílá CSR na SeaCat PKI přes HTTPS PUT volání (klientský certifikát není potřeba).
- Odpověď obsahuje Klientský certifikát nebo chybový kód.
- Pokud dojde k chybě, ceremonie registrace se restartuje po 1 minutě.
- Klientský certifikát je uložen na trvalém úložišti CPE a používán s CPK pro TR-069 / HTTPS volání na ACS.
Podrobnosti CSR:
- Hodnota pole CN v CSR (a klientském certifikátu) MUSÍ být globálně unikátní pro každé CPE. Konkrétně, pole CN MUSÍ dodržovat formát doporučený pro uživatelské jméno/id v TR-069 CPE WAN Management Protocol Issue: 1 Amendment 6 Section 3.4.4.
Obnova¶
Toto je pravidelná ceremonie, která obnovuje klientský certifikát, když se blíží konec jeho životního cyklu.
Spuštěno: Po dostupnosti síťového připojení CPE a pravidelně 4x denně.
Předpoklad: CPE má klientský certifikát (i když vypršel).
- CPE kontroluje, zda se klientský certifikát blíží k vypršení nebo již vypršel
- Pokud klientský certifikát vyprší, CPE generuje nový CSR
- CPE odesílá CSR na SeaCat PKI přes HTTPS PUT volání (klientský certifikát není potřeba).
- Odpověď obsahuje Klientský certifikát nebo chybový kód.
- Pokud dojde k chybě, tato ceremonie se restartuje po 1 minutě, když je klientský certifikát vypršel, nebo po 4 hodinách, když ještě nevypršel.
- Klientský certifikát je uložen na trvalém úložišti CPE a používán s CPK pro TR-069 / HTTPS volání na ACS.
Poznámka: Požadavky na CSR jsou stejné jako pro Registraci.
Poznámka: Ceremonie obnovy je velmi podobná registraci.
Tok komunikace¶
HTTPS/TLS specifikace¶
- TLS v1.2+
- RSA 2048 pro CPE
- RSA 4096 pro Server
- RSA 8192 pro CA
TLS_RSA_WITH_AES_128_CBC_SHA
Reference¶
-
RFC 2986
PKCS #10: Specifikace syntaxe žádosti o certifikát
CSR, PKCS#10 -
TR-069 / CPE WAN Management Protocol
Issue: 1 Amendment 6
The Broadband Forum -
SCEP: Simple Certificate Enrolment Protocol
Internet Draft
Network Working Group, Internet Engineering Task Force (IETF)
SeaCat Mutual TLS¶
PKI pro mobilní aplikace a IoT.
Toto je rozšíření SeaCat pro kryptografickou rodinu certifikátů X.509.
Inicializace PKI¶
$ openssl ecparam -name prime256v1 -genkey -noout -out seacat_private_key.pem
[tenants]
ids=TENANT
[seacatpki:private_key:TENANT_seacat_private_key]
tenants=TENANT
keyfile=./TENANT/seacat_private_key.pem
[seacatpki:x509:ca:TENANT]
ca_key=TENANT_seacat_private_key
Poznámka: Předpokládá se, že "TENANT" je název nájemce.
Certifikační autorita klienta¶
curl -X PUT \
'http://localhost:8080/TENANT/x509/self-signed' \
-H 'Content-Type: application/json' \
-d '{
"serialNumber": 1,
"subject": {
"O": "My Org", "CN": "Root CA"
},
"validity": {
"notBefore": "now",
"notAfter": { "weeks": 1040 }
},
"extensions": [
{ "basicConstraints": {
"CA": true,
"pathLen": 0
}, "critical": true } ,
{ "keyUsage": [
"keyCertSign",
"cRLSign"
] }
]
}'
[tenants]
ids=TENANT
[seacatpki:private_key:TENANT_seacat_private_key]
tenants=TENANT
keyfile=./TENANT/seacat_private_key.pem
[seacatpki:x509:ca:TENANT]
ca_key=TENANT_seacat_private_key
ca_cert=TENANT:18222c51d1c5e96f9a3ceb5b2b739943ce7c0b5e2dcb639c7fd0c1cab06a088f74dfd9988bade47bb18273d039753ef8
seacat=yes
Specifikace SeaCat TLS¶
Vzájemná autentizace TLS/SSL
Certifikační autorita klienta¶
CA se používá k registraci klientů SeaCat a v procesu ověřování klienta během TLS handshake.
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: ecdsa-with-SHA256
Issuer: O=TeskaLabs, OU=SeaCat, CN=Devel Root CA
Validity
Not Before: Sep 22 00:00:00 2019 GMT
Not After : Sep 21 23:59:59 2039 GMT
Subject: O=TeskaLabs, OU=SeaCat, CN=Devel Root CA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:db:16:df:53:73:9a:b4:22:aa:e9:21:22:0c:de:
84:c4:2f:23:1e:eb:86:37:1f:54:7b:6d:b6:47:04:
37:e2:fb:b2:34:e1:0f:a2:95:0e:c8:c7:ab:fc:78:
fc:ae:9f:78:72:e7:03:d2:19:2f:dd:4c:1e:e3:57:
a9:f1:ae:a5:c0
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Subject Key Identifier:
75:BD:5E:00:9E:C3:F5:1D:8E:7B:AD:33:C5:C9:0C:E9:79:B8:A7:22
X509v3 Key Usage:
Certificate Sign, CRL Sign
Signature Algorithm: ecdsa-with-SHA256
30:45:02:20:1c:6e:54:ba:70:a5:46:e0:a4:b0:d3:70:90:ce:
35:f6:2d:ec:e4:2e:c6:96:91:47:00:1b:d7:30:d7:b8:92:dc:
02:21:00:c2:88:0c:ac:51:c4:bd:66:44:85:c8:53:84:8e:b3:
0f:db:37:27:63:ab:d1:7c:dd:5a:1a:c1:02:9a:11:a4:1c
Hlavní body:
- Samopodepsaný (root) certifikát
- EC Nist P-256 / prime256v1
- CA:TRUE, pathlen:0
- Použití klíče: Certificate Sign, CRL Sign
Brána¶
- EC Klíč NIST P-256 aka secp256r1 a prime256r1 (P-384 je podporován iOS a Android > 7)
- Šifry: ECDHE-ECDSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-ECDSA-CHACHA20-POLY1305
- ID relace povoleno
- Relace Tickets zakázány
- Odeslat certifikát CA klienta (z SeaCat PKI)
- Ověření hloubky: 1
Příklad konfigurace z OpenSSL:
openssl s_server -www -accept "*:443" \
-key seacat_gw.key \
-cert seacat_gw.cert \
-Verify 1 \
-CAfile seacat_client_ca.pem
Poznámka: V tomto příkladu je pokryto pouze ověření klienta.
NGINX jako brána¶
proxy_cache_path seacat_auth.cache keys_zone=seacat_auth:40m max_size=100m;
server {
listen 80 default_server;
server_name _;
server_tokens off;
access_log /log/nginx-access.log;
error_log /log/nginx-error.log;
# Používáme acme.sh pro certifikát brány
location /.well-known/acme-challenge/ {
default_type text/plain;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://acme-sh;
}
location / {
return 301 https://teskalabs.com;
}
}
server {
listen 443 default_server ssl http2;
server_name _;
server_tokens off;
access_log /log/nginx-access-ssl.log;
error_log /log/nginx-error-ssl.log;
ssl_certificate /acme.sh/example.com_ecc/fullchain.cer;
ssl_certificate_key /acme.sh/example.com_ecc/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES256:DH+AES256:ECDH+AES128:!aNULL:!MD5:!DSS:!AESCCM;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 4h;
add_header Strict-Transport-Security max-age=31536000;
# Ověření certifikátů klienta
ssl_verify_client optional;
ssl_client_certificate conf.d/seacat_ca.pem;
# Veřejné API SeaCat PKI
location /seacat {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://seacatpki:8080/seacat/seacat;
}
# Umístění, které je omezeno pouze na autentizované klienty
location /restricted {
# Autentizace pomocí SeaCat PKI
auth_request /_seacat_pki_auth;
# Nastavit hlavičku X-SeaCat-Identity na základě hodnoty přijaté z volání autentizace SeaCat PKI
auth_request_set $seacat_identity $upstream_http_x_seacat_identity;
proxy_set_header X-SeaCat-Identity $seacat_identity;
#proxy_pass https://restricted.example.com;
#proxy_ssl_server_name on;
}
# Toto je interní autentizační volání na SeaCat PKI pro ověření identity klienta
location = /_seacat_pki_auth {
internal;
proxy_method PUT;
proxy_set_header X-SSL-Client-Verify $ssl_client_verify;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Request $request;
proxy_set_body "$ssl_client_raw_cert";
proxy_pass http://seacatpki:8080/seacat-tenant/seacat/nginx_authenticate;
# Odpovědi jsou ukládány do cache, aby se snížila zátěž na SeaCat PKI
proxy_cache seacat_auth;
proxy_cache_key $ssl_client_fingerprint;
proxy_cache_lock on;
proxy_cache_valid 200 360s;
proxy_ignore_headers Cache-Control Expires Set-Cookie;
}
location / {
return 301 https://teskalabs.com;
}
}
Poznámka: Pro více informací viz kapitola docker.
Let's Encrypt pro certifikát brány¶
Certifikát brány (nebo serverový certifikát) může být vydán např. Let's Encrypt.
Je nutné použít klienta acme.sh
, protože je potřeba EC klíčový pár (ne RSA).
Příklad z Docker Compose:
docker-compose exec acme-sh acme.sh --standalone --keylength ec-256 --issue -d CHANGEME.seacat.io
Poznámka: Klient certbot má omezenou podporu pro ECC (v zásadě, automatická obnova je velmi složitá).
Je možné použít certbot, ale důrazně to nedoporučujeme.
Klient¶
TODO: Jakýkoli druh pinning certifikátu serveru?
Ověření registrace¶
Toto je REST volání klienta, které SeaCat PKI může provést na externí službu, aby ověřilo, zda může být CR schválen a tím pádem udělena identita SeaCat klientovi.
URL konfigurace jde do položky konfigurace approve
[seacat:seacat]
ca_cert=...
ca_key=...
approve=http://example.com/validate_cr
SeaCat PKI provede POST
volání s následujícím tělem:
{
'_c': '2019-12-13T13:31:11.158000',
'_id': '...',
'_m': '2019-12-13T13:31:11.158000',
'_v': 1,
'data': '3081f2a0819a800219028119636f6d2e7465736b616c6162732e7365616361742e64656d6f820d3139313231333134333131305a830d3139313231333134333631305aa459a01380072a8648ce3d020181082a8648ce3d03010781420004161ed21a40c02116ff718edd3333e68ef1976627d790548a084fd9dcaee8cb95df5b49a81d403a3ef7a3ba41c662d731fc5ca8523333b02a542411d5953a4ef2a500a10a80082a8648ce3d0403028247304502210086b3c27afb163412a655b89f62a3a969a1d7732857e2598240ae8e61e614b76a022042e159e02c8b5cd7892587f4ad76caf68796197bc58d4204c3dd3c90f6926c4d',
'family': 'seacat',
'info': {
'application': 'com.teskalabs.seacat.demo',
'identity': 'HDKXPDREZADFK4G2'
},
'label': 'HDKXPDREZADFK4G2 (com.teskalabs.seacat.demo)',
'seacat_application': 'com.teskalabs.seacat.demo',
'seacat_identity': 'HDKXPDREZADFK4G2',
'tenant': 'seacat',
'type': 'cr'
}
Poznámka: Je to ekvivalentní informace k REST volání "Získat meta informace o kryptomateriálu" SeaCat PKI.
Očekávaná odpověď MUSÍ BÝT JSON.
CR bude schválen pouze tehdy, pokud obsah má následující strukturu:
{ "result": "OK" }
Administrace
Cluster¶
TeskaLabs SeaCat PKI může být nasazen jako jediná instance nebo jako cluster. Cluster může být geograficky distribuován pro zajištění vysoké dostupnosti a obnovy po havárii.
Architektura Clustera¶
Diagram architektury ilustruje možnosti nasazení TeskaLabs SeaCat PKI v kontejnerech a zdůrazňuje komponenty zapojené jak v konfiguracích s jedinou instancí, tak v clusterových konfiguracích:
-
Jediná Instance (Levá strana diagramu):
- Komponenty:
- NGINX: Působí jako reverzní proxy pro zpracování příchozích požadavků a jejich směrování na příslušné služby.
- Web UI: Poskytuje rozhraní pro správu PKI.
- SeaCat PKI: Hlavní PKI mikroservis, který vydává a spravuje certifikáty.
- HSM (Hardware Security Module): Volitelná integrace pro bezpečné ukládání klíčů.
- MongoDB: Slouží jako databázový backend pro ukládání dat certifikátů a konfigurací.
- Všechny komponenty jsou kontejnerizovány v jediné instanci Docker/Podman, což zajišťuje jednoduchost v nasazení a údržbě.
- Komponenty:
-
Clusterová Konfigurace (Pravá strana diagramu):
- Charakteristiky Clustera:
- Komponenty jsou identické s nastavením jediné instance, ale jsou distribuovány napříč více uzly.
- Více instancí SeaCat PKI a MongoDB zajišťuje redundanci a vysokou dostupnost.
- Geografická Distribuce:
- Uzly v clusteru mohou být nasazeny na různých geografických místech, což umožňuje obnovu po havárii a zlepšuje odolnost proti chybám.
- Synchronizace:
- Instance MongoDB se synchronizují napříč clusterem, aby udržely konzistenci dat.
- Obsah HSM musí být synchronizován napříč clusterem pomocí nástrojů pro správu HSM.
- Charakteristiky Clustera:
Obě konfigurace umožňují flexibilní nasazení, aby splnily různé požadavky na škálovatelnost, spolehlivost a výkon.
Kontejnorizace¶
TeskaLabs SeaCat PKI je přátelský k Docker a Podman.
Backendová mikroservis může být nasazena jako kontejner spolu s ostatními komponentami aplikačního ekosystému (NGINX, MongoDB atd.).
Celé kontejnerizované nasazení může být orchestráno pomocí docker compose
, Kubernetes a dalších nástrojů pro orchestraci kontejnerů.
Nasazení pomocí docker-compose
¶
Použité kontejnery:
mongo
: MongoDB databázenginx
: NGINX API Gatewayseacatpki
: TeskaLabs SeaCat PKI mikroservisacme.sh
: acme.sh klient Let's Encrypt (volitelně)
Struktura adresářů¶
docker-compose.yaml
conf-nginx/
nginx.conf
conf-seacatpki/
seacatpki.conf
seacatpki/
# Klon Git repozitáře SeaCat PKIdata-mongo/
# Trvalá složka pro data Mongo DBlog/
# Logovací souboryacme.sh/
# Soubory Let's Encrypt / acme.sh
docker-compose.yaml¶
services:
mongo:
image: mongo
volumes:
- ./data-mongo:/data/db
- ./log:/log
networks:
- seacatpkinet
nginx:
image: nginx:latest
depends_on:
- seacatpki
ports:
- 80:80/tcp
- 443:443/tcp
volumes:
- ./conf-nginx:/etc/nginx/conf.d
- ./log:/log
- ./acme.sh:/acme.sh
networks:
- seacatpkinet
seacatpki:
build: .
depends_on:
- mongo
volumes:
- ./conf-seacatpki:/conf
- ./log:/log
networks:
- seacatpkinet
acme-sh:
image: neilpang/acme.sh
command: daemon
volumes:
- ./acme.sh:/acme.sh
networks:
- seacatpkinet
networks:
seacatpkinet:
driver: bridge
nginx.conf¶
server {
listen 80 default_server;
server_name _;
server_tokens off;
access_log /log/nginx-access.log;
error_log /log/nginx-error.log;
location /.well-known/acme-challenge/ {
default_type text/plain;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://acme-sh;
}
}
server {
listen 443 default_server ssl http2;
server_name _;
server_tokens off;
access_log /log/nginx-access-ssl.log;
error_log /log/nginx-error-ssl.log;
ssl_certificate /acme.sh/example.com_ecc/fullchain.cer;
ssl_certificate_key /acme.sh/example.com_ecc/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 4h;
add_header Strict-Transport-Security max-age=31536000;
location / {
return 301 https://example.com;
}
}
Note
Část SSL (443) může být přidána až po vydání certifikátu acme.sh
(níže).
seacatpki.conf¶
[asab:storage]
type=mongodb
mongodb_uri=mongodb://mongo:27017/
mongodb_database=seacatpkidb
[web]
listen=0.0.0.0 8080
[logging:file]
path=/log/seacatpki.log
acme.sh¶
Skript acme.sh
se používá k získání certifikátu Let's Encrypt.
$ docker-compose exec acme-sh acme.sh \
--update-account --accountemail you@yourdomain.com
$ docker-compose exec acme-sh acme.sh \
--standalone --keylength ec-384 --issue -d example.com
Tip
Automatické obnovování je také zajištěno tímto kontejnerem.
Obraz kontejneru¶
Obraz mikroservisu TeskaLabs SeaCat PKI je založen na Alpine Linux. TeskaLabs distribuuje obraz kontejneru prostřednictvím svého soukromého registru kontejnerů.
Obraz kontejneru obsahuje knihovny SoftHSM2 a OpenSSL.
Dockerfile
V kořenovém adresáři repozitáře mikroservisu SeaCat PKI je k dispozici Dockerfile
.
Nasazení do LXD kontejneru¶
Nastavení kontejneru¶
1) Spusťte nový LXC kontejner založený na Alpine.
$ lxc launch images:alpine/3.21 seacat-pki
$ lxc exec seacat-pki /bin/ash
2) Nainstalujte požadované balíčky.
V nově spuštěném LXC kontejneru:
$ apk update
$ apk upgrade
$ apk add --no-cache \
python3 \
py3-pip \
libstdc++ \
openssl
$ apk add --no-cache --virtual buildenv \
openssh-client \
git \
python3-dev \
libffi-dev \
openssl-dev \
gcc \
g++ \
swig \
musl-dev
$ pip3 install --upgrade pip
$ pip3 install --no-cache-dir aiohttp
$ pip3 install --no-cache-dir asn1tools
$ pip3 install --no-cache-dir motor
$ pip3 install --no-cache-dir cryptography
$ pip3 install --no-cache-dir fastjsonschema
$ pip3 install --no-cache-dir asn1crypto
$ pip3 install --no-cache-dir PyKCS11
$ pip3 install --no-cache-dir git+https://github.com/TeskaLabs/asab.git
$ apk del buildenv
$ cd /opt
$ ... nasadit repozitář SeaCat PKI do /opt/seacat-pki ...
$ mkdir /opt/site-xxx
$ vi /opt/site-xxx/seacatpki.conf
3) Vytvořte init.d (autostart) skript.
Název souboru: /etc/init.d/seacatpki
#!/sbin/openrc-run
name="seacatpki"
command="/usr/bin/python3 /opt/seacat-pki/seacatpki.py -c /opt/site-xxx/seacatpki.conf"
pidfile="/var/run/$SVCNAME.pid"
command_background="yes"
depend() {
need net
use dns
}
3) Spusťte službu.
$ rc-service seacatpki start
Reference
HSM
Hardware Security Modules (HSM)¶
TeskaLabs SeaCat PKI podporuje hardwarové bezpečnostní moduly (HSM) s rozhraním PKCS#11.
Konkrétně se HSM používají pro generaci a správu privátních klíčů a také pro generaci náhodných čísel.
Warning
TeskaLabs SeaCat PKI v současnosti podporuje pouze jeden nakonfigurovaný modul PKCS#11, nelze nakonfigurovat více modulů v jedné instanci PKI. Můžete použít více tokenů stejného modulu.
Konfigurace¶
seacatpki.conf
:
[seacatpki:pkcs11:<identifikace>]
path=/cesta/k/pkcs11modulu.so
identifikace
je interní název PKCS#11 poskytovatele (např.softhsm2
)-
path
je umístění modulu PKCS#11 v souborovém systému -
session_persistence
je boolean příznak, který určuje, zda by měla být relace PKCS#11 udržována otevřená po použití (výchozí hodnota jetrue
). Některé tokeny uzavírají relaci po použití, takže tento příznak by měl být nastaven nafalse
pro takové tokeny. Nastavení tohoto příznaku nafalse
ovlivní výkon HSM.
Konfigurace autoskenování¶
Tento přístup znamená, že PKI automaticky prohledá tokeny PKCS#11 na dostupné privátní klíče.
seacatpki.conf
:
[seacatpki:pkcs11:<identifikace>]
path=/cesta/k/pkcs11modulu.so
tokens=
SoftHSMToken1,PIN1,tenant1
SoftHSMToken2,PIN2,tenant2
SoftHSMToken3,PIN2,tenant3
...
tokens
je seznam tokenů v HSM
Každý token je definován následovně:
token_name
je název tokenu (např.SoftHSMToken1
)pin
je PIN tokenu (např.PIN1
)tenant
je název nájemce, který má přístup k tokenu (např.tenant1
)
Explicitní konfigurace¶
Tento přístup znamená, že PKI použije pouze privátní klíče, které jsou explicitně nakonfigurovány v souboru seacatpki.conf
.
[seacatpki:pkcs11:<identifikace>]
path=/cesta/k/pkcs11modulu.so
[seacatpki:private_key:<nazev_klice>]
provider=pkcs11:<identifikace>
tenants=tenant1,tenant2
token_label=SoftHSMToken1
pin=PIN
cka_id=100002
nazev_klice
je interní název privátního klíče (např.my_rsa_key
)provider
je interní název modulu PKCS#11 (např.softhsm2
)tenants
je seznam nájemců, kteří mají přístup k tokenu (např.tenant1,tenant2
)token_label
je štítek tokenu (např.SoftHSMToken1
)pin
je PIN tokenu (např.PIN
)cka_id
je ID privátního klíče (např.100002
)
Požadavky na privátní klíče¶
Privátní klíče umístěné na tokeny PKCS#11 musí splňovat následující požadavky:
CKA_CLASS
musí býtCKO_PRIVATE_KEY
CKA_LABEL
musí být nastavenCKA_ID
musí být nastaven a unikátní pro každý privátní klíč- Musí existovat exportovatelný veřejný klíč (
CKA_CLASS
musí býtCKO_PUBLIC_KEY
) se stejnýmCKA_ID
SoftHSMv2¶
SoftHSM je softwarový kryptografický úložiště přístupné prostřednictvím rozhraní PKCS#11.
Je emulátorem hardwarového bezpečnostního modulu (HSM), který běží na hlavním CPU.
TeskaLabs SeaCat PKI podporuje SoftHSMv2.
Více na: http://www.softhsm.org
Tip
SoftHSMv2 je k dispozici v TeskaLabs SeaCat PKI kontejnerovém obraze.
Příprava SoftHSM2¶
1) Připravte konfigurační soubor SoftHSM2
softhsm2.conf
:
directories.tokendir = ...softhsm/tokens/
objectstore.backend = file
log.level = INFO
Note
directories.tokendir
je umístění, kde SoftHSM2 ukládá soukromé klíče a další objekty.
2) Specifikujte umístění konfiguračního souboru SoftHSM2
export SOFTHSM2_CONF=.../softhsm2.conf
Note
Proměnná prostředí SOFTHSM2_CONF
musí být nastavena také pro runtime mikroservisu TeskaLabs SeaCat PKI.
3) Inicializujte token
% softhsm2-util --init-token --free --label "MySoftHSMToken"
Slot 0 má volný/neinicializovaný token.
=== SO PIN (4-255 znaků) ===
Zadejte SO PIN: ********
Znovu zadejte SO PIN: ********
=== Uživatelský PIN (4-255 znaků) ===
Zadejte uživatelský PIN: ******
Znovu zadejte uživatelský PIN: ******
Token byl inicializován a je přiřazen ke slotu 1735718982
--free
znamená, že bude použit první volný/neinicializovaný token v instanci SoftHSM2.
Uživatelský PIN se používá v konfiguraci tokenu v secatpki.conf
.
Danger
label
musí být jedinečný název tokenu v instanci SoftHSM2.
Spuštění softhsm2-util v Docker kontejneru
$ docker exec -it
4) Přidejte modul SoftHSM2 do konfigurace SeaCat PKI
secatpki.conf
:
[seacatpki:pkcs11:softhsm2]
path=.../libsofthsm2.so
tokens=
MySoftHSMToken,<pin>,mytenant
Token "MySoftHSMToken" bude zpřístupněn nájemci "mytenant".
Tip
softhsm2
je interní název poskytovatele a může být zvolen libovolně.
4) Restartujte mikroservis SeaCat PKI
Generování soukromého klíče¶
Soukromé klíče mohou být generovány z webového rozhraní SeaCat PKI nebo pomocí příkazového nástroje pkcs11-tool
.
Druhá metoda je popsána zde.
Generování EC soukromého klíče¶
pkcs11-tool --module .../libsofthsm2.so --login --token-label "MySoftHSMToken" --keypairgen --label "ECKey" --id 100001 --key-type EC:brainpoolP384r1
Generování RSA soukromého klíče¶
pkcs11-tool --module .../libsofthsm2.so --login --token-label "MySoftHSMToken" --keypairgen --label "RSAKey" --id 100002 --key-type RSA:2048
Danger
--id
je jedinečný identifikátor soukromého klíče v tokenu a musí být poskytnut.
Přidání soukromého klíče SoftHSM2 explicitně¶
Můžete chtít explicitně přidat soukromý klíč do konfigurace SeaCat PKI.
secatpki.conf
:
[seacatpki:private_key:softhsm2_key]
provider=pkcs11:softhsm2
tenants=tenant1,tenant2
token_label=MySoftHSMToken
pin=<PIN>
cka_id=100001
Generátor náhodných čísel¶
SoftHSM2 může být použit jako generátor náhodných čísel (RNG) v TeskaLabs SeaCat PKI.
Není to praktické, ale možné.
Inicializujte dedikovaný token pro RNG:
$ softhsm2-util --init-token --free --label "MyRandomNumberGenerator"
secatpki.conf
:
[seacatpki:random]
provider=pkcs11:softhsm2
pin=<PIN>
token_label=MyRandomNumberGenerator
Řešení problémů¶
RuntimeError: Chyba inicializace (není inicializováno). Toto by se nikdy nemělo objevit.
Musíte správně nastavit proměnnou prostředí SOFTHSM2_CONF
.
YubiHSM 2¶
YubiHSM 2 je malý modul hardwarové bezpečnosti (HSM), který se vejde do USB portu.
Příprava YubiHSM 2¶
1) Připravte konfigurační soubor YubiHSM2
Konfigurační soubor yubihsm2_pkcs11.conf
musí být umístěn v pracovním adresáři mikroservisu TeskaLabs SeaCat PKI.
.../yubihsm2_pkcs11.conf
:
connector = http://yubihsm:12345
yubihsm
je hostitel, který spouští software YubiHSM2.
YubiHSM 2 funguje tak, že hostitel s USB spouští server YubiHSM2, který poskytuje HTTPS API na portu 12345.
2) Konfigurujte SeaCat PKI pro použití tokenu YubiHSM 2
seacatpki.conf
:
[seacatpki:pkcs11:yubihsm2]
path=.../yubihsm_pkcs11.dylib
tokens=YubiHSM,0001password,mytenant
path
je umístění knihovny YubiHSM2 PKCS11 (yubihsm_pkcs11.dylib
neboyubihsm_pkcs11.so
).tokens
je konfigurace instance YubiHSM2:- YubiHSM je název tokenu
0001password
je PIN (změňte ho na svůj vlastní)mytenant
je nájemce, který má přístup k tokenu YubiHSM 2
Warning
YubiHSM2 nabízí jediný token s názvem "YubiHSM".
3) Restartujte mikroservis SeaCat PKI
Generátor náhodných čísel¶
YubiHSM 2 může být použit jako generátor náhodných čísel (RNG) v TeskaLabs SeaCat PKI.
secatpki.conf
:
[seacatpki:random]
provider=pkcs11:yubihsm2
token_label=YubiHSM
YubiKey¶
Token YubiKey může být také použit jako "chudý" hardwarový bezpečnostní modul (HSM) v TeskaLabs SeaCat PKI.
secatpki.conf
:
[seacatpki:pkcs11:yubikey]
path=/usr/local/lib/libykcs11.dylib
tokens=
YubiKey PIV #xxxxxx,<PIN>,mytenant
session_persistence=false
Danger
session_persistence
musí být nastaven na false
pro token YubiKey.
Utimaco CryptoServer CP5¶
TeskaLabs SeaCat PKI podporuje rodinu HSM Utimaco CryptoServer CP5.
p11-kit¶
p11-kit je proxy PKCS#11 modul.
Tento p11-kit proxy modul funguje jako normální PKCS#11 modul, ale interně načítá předkonfigurovanou sadu PKCS#11 modulů a spravuje jejich funkce, jak bylo popsáno dříve.
Každý slot v konfigurovaných modulech je vystaven jako slot p11-kit proxy modulu.
V podstatě umožňuje kombinovat více PKCS#11 modulů (tj. HSM) pro použití najednou.
TeskaLabs SeaCat PKI podporuje p11-kit.
Více na: p11-glue.github.io (Manual), konkrétně "Proxy Module".
p11-kit konfigurace¶
Každý modul je konfigurován pomocí specializovaného konfiguračního souboru v adresáři pkcs11/modules/
.
Jednoduchý příklad:
/opt/local/etc/pkcs11/modules/softhsm2
:
module: /opt/local/lib/softhsm/libsofthsm2.so
Konfigurace jednoduše obsahuje cestu k podkladovému PKCS#11 modulu, v tomto případě je to SoftHSM2.
Generátory náhodných čísel¶
TeskaLabs SeaCat PKI používá výchozí software generátory náhodných čísel (RNG), konkrétně Python modul secrets
, respektive funkce OpenSSL RNG.
TeskaLabs SeaCat PKI také podporuje hardwarové generátory náhodných čísel (RNG) prostřednictvím PKCS#11.
Warning
Hardwarové RNG se používají pouze pro určité kryptografické operace, např. generování klíčů.
Softwarové klíče (pokud se používají) jsou generovány pomocí softwarového RNG.
Konfigurace poskytovatele RNG PKCS#11¶
Úryvek z seacatpki.conf
:
[seacatpki:pkcs11:myhsm]
path=/usr/lib/softhsm/myhsm.dylib
[seacatpki:random]
provider=pkcs11:myhsm
token_label=RNGToken
pin=<PIN>
provider
je identifikace poskytovatele, předponapkcs11:
znamená, že poskytovatel je PKCS#11 tokentoken_label
je štítek tokenu v rámci poskytovatelepin
je PIN tokenu (volitelné, pokud je token již nakonfigurován)
Tip
Vyhrazený PKCS#11 token pro generátor náhodných čísel je doporučen.
C-ITS Security
Nastavení C-ITS bezpečnostní PKI¶
Note
Technické standardy: ETSI TS 102 941 v1.3.1, v1.2.1 & ETSI TS 103 097 v1.3.1
Tip
Šablony pro certifikáty, žádosti o certifikáty, CTL a CRL jsou ve složce templates
.
Vygenerování certifikátu kořenové CA¶
Předpoklad: SeaCat PKI je nainstalováno, nakonfigurováno a zastaveno.
-
Zadejte nového nájemce
Přidejte
TENANT_ROOT_CA
do nájemců, vyberte popisný název pouze malými písmeny ASCII vetc/seacatpki.conf
:[tenants] ids=TENANT_ROOT_CA
-
Určete základní URL API SeaCat PKI
export ROOT_CA_URL=http://localhost:8080/TENANT_ROOT_CA
-
Vygenerujte pár soukromého/verejného klíče kořenové CA
Vyberte jednu z následujících EC křivek:
Brainpool P-386 (
brainpoolP384r1
)openssl ecparam -name brainpoolP384r1 -genkey -noout -out root-ca-private-key.pem
Varianta PKCS#11:
pkcs11-tool --module ... --login --keypairgen --id 10001 --key-type EC:brainpoolP384r1
Brainpool P-256 (
brainpoolP256r1
)openssl ecparam -name brainpoolP256r1 -genkey -noout -out root-ca-private-key.pem
NIST P-256 (
prime256v1
,secp256r1
)openssl ecparam -name prime256v1 -genkey -noout -out root-ca-private-key.pem
Poznámka: Můžete sdílet stejný soukromý klíč mezi různými verzemi C-ITS nebo dokonce X.509.
-
Přidejte nový soukromý klíč do konfiguračního souboru
v
etc/seacatpki.conf
:[seacatpki:private_key:TENANT_ROOT_CA_KEY_NAME] keyfile=${THIS_DIR}/root-ca-private-key.pem tenants=TENANT_ROOT_CA
-
Spusťte SeaCat PKI
-
Vytvořte samopodepsaný certifikát kořenové CA
Použijte šablonu rootca.json a upravte, pokud je to potřeba.
curl -X PUT "${ROOT_CA_URL}/cits/rca/self-signed?ca_private_key=TENANT_ROOT_CA_KEY_NAME" \ --header 'Content-Type: application/json' \ -d @templates/rootca.json
Poznamenejte si hodnotu atributu
pbid
z odpovědi, je to veřejný objektový ID nového certifikátu. -
Zadejte nového nájemce pro důvěryhodnou doménu
Poznámka: Krok důvěryhodné domény může být přeskočen, pokud důvěryhodná doména již existuje.
Přidejte
TENANT_TRUST_DOMAIN
do nájemců, vyberte popisný název pouze malými písmeny ASCII vetc/seacatpki.conf
:[tenants] ids=TENANT_ROOT_CA TENANT_TRUST_DOMAIN
-
Nastavte důvěryhodnou doménu
v
etc/seacatpki.conf
:Důvěryhodná doména EU ECTL TLM L0:
[seacatpki:cits:trust:TENANT_TRUST_DOMAIN] tlm_certificate=https://cpoc.jrc.ec.europa.eu/L0/gettlmcertificate/
Příklad prázdné důvěryhodné domény:
[seacatpki:cits:trust:TENANT_TRUST_DOMAIN] ; Toto je prázdná důvěryhodná doména
-
Nakonfigurujte novou kořenovou CA v konfiguračním souboru SeaCat PKI
v
etc/seacatpki.conf
:[seacatpki:cits:ca:TENANT_ROOT_CA] certificate=<pbid> trust_domain=<TENANT_TRUST_DOMAIN>
Určete
pbid
nově vygenerovaného certifikátu kořenové CA z předchozího kroku. -
Restartujte SeaCat PKI
-
Vytvořte seznam důvěryhodných certifikátů kořenové CA (CTL)
Použijte počáteční šablonu CTL rootca-ctl-init.json a zkopírujte ji do
templates/rootca-ctl.json
.DŮLEŽITÉ: Upravte URL kořenové CA DC v souboru.
curl -X PUT --url "${ROOT_CA_URL}/cits/rca/ctl" \ --header 'Content-Type: application/json' \ -d @templates/rootca-ctl-init.json.json
-
Vytvořte seznam odvolání certifikátů kořenové CA (CRL)
Použijte prázdnou počáteční šablonu CRL rootca-crl-init.json a zkopírujte ji do
templates/rootca-crl.json
.curl -X PUT --url "${ROOT_CA_URL}/cits/rca/crl" \ --header 'Content-Type: application/json' \ -d @templates/rootca-crl-init.json
-
Kořenová CA je nyní nakonfigurována a dostupná k použití.
Vygenerování certifikátu autority pro registraci (EA)¶
-
Zadejte nového nájemce
v
etc/seacatpki.conf
:[tenants] ids=TENANT_SUBCA
Poznámka: Můžete znovu použít existujícího nájemce, např. s kořenovou CA. Není možné provozovat více EA v jednom nájemci.
-
Určete základní URL API SeaCat PKI
export ROOT_CA_URL=http://localhost:8080/TENANT_ROOT_CA export EA_URL=http://localhost:8080/TENANT_SUBCA
-
Vygenerujte ověřovací soukromý klíč autority pro registraci
Vyberte jednu z následujících EC:
Brainpool P-386 (
brainpoolP384r1
)openssl ecparam -name brainpoolP384r1 -genkey -noout -out ea-verification-private-key.pem
Brainpool P-256 (
brainpoolP256r1
)openssl ecparam -name brainpoolP256r1 -genkey -noout -out ea-verification-private-key.pem
NIST P-256 (
prime256v1
,secp256r1
)openssl ecparam -name prime256v1 -genkey -noout -out ea-verification-private-key.pem
-
Vygenerujte šifrovací soukromý klíč autority pro registraci
Vyberte jednu z následujících EC:
Brainpool P-256 (
brainpoolP256r1
)openssl ecparam -name brainpoolP256r1 -genkey -noout -out ea-encryption-private-key.pem
NIST P-256 (
prime256v1
,secp256r1
)openssl ecparam -name prime256v1 -genkey -noout -out ea-encryption-private-key.pem
-
Nakonfigurujte klíče v SeaCat PKI
v
etc/seacatpki.conf
:[seacatpki:private_key:TENANT_SUBCA-verification-key] keyfile=${THIS_DIR}/ea-verification-private-key.pem tenants=TENANT_SUBCA [seacatpki:private_key:TENANT_SUBCA-encryption-key] keyfile=${THIS_DIR}/ea-encryption-private-key.pem tenants=TENANT_SUBCA
-
Restartujte SeaCat PKI
-
Vygenerujte žádost o certifikát EA CA.
Použijte šablonu ea-cacr.json a upravte. Vyplňte hodnoty
verification_key
(TENANT_SUBCA-verification-key
) aencryption_key
(TENANT_SUBCA-encryption-key
).curl -X PUT ${EA_URL}/cits/ea/ca-certificate-request \ --header 'Content-Type: application/json' \ -d @templates/ea-cacr.json
Poznamenejte si hodnotu atributu
pbid
z odpovědi, je to veřejný objektový ID žádosti o certifikát CA. -
Stáhněte žádost o certifikát CA z EA
curl -o ea-cacr.coer ${EA_URL}/sa/<pbid>
Poznámka: Pokud EA a kořenová CA sdílejí stejný nájemce, kroky stahování a nahrávání mohou být přeskočeny.
-
Nahrajte žádost o certifikát CA do kořenové CA
curl -X PUT "${ROOT_CA_URL}/sa?family=cits&type=cacr" --upload-file ea-cacr.coer
Poznamenejte si
pbid
. -
Schvalte žádost o certifikát EA CA v kořenové CA
Použijte šablonu rootca-ea-cacr-approve.json a upravte.
cacr
,ca_certificate
.curl -X PUT --url "${ROOT_CA_URL}/cits/rca/approve-ca-certificate-request" \ --header 'Content-Type: application/json' \ -d @templates/rootca-ea-cacr-approve.json
Poznamenejte si
pbid
jakoea_cert_pbid
, odkazuje na nově vytvořený certifikát EA. -
Stáhněte certifikáty z kořenové CA
curl -o ea-cert.coer ${ROOT_CA_URL}/sa/<ea_cert_pbid> curl -o rootca-cert.coer ${ROOT_CA_URL}/cits/dc/getcert/<rca_certificate_digest>
Certifikát autority pro registraci je uložen v souboru
ea-cert.coer
.Poznámka: Pokud EA a kořenová CA sdílejí stejný nájemce, kroky stahování a nahrávání mohou být přeskočeny.
-
Nahrajte certifikáty do autority pro registraci
curl -X PUT "${EA_URL}/sa?family=cits&type=cert" --upload-file rootca-cert.coer curl -X PUT "${EA_URL}/sa?family=cits&type=cert" --upload-file ea-cert.coer
-
Nakonfigurujte autoritu pro registraci
v
etc/seacatpki.conf
:[seacatpki:cits:ea:TENANT_SUBCA] certificate=<ea_certificate_pbid> encryption_key=TENANT_SUBCA-encryption-key verification_key=TENANT_SUBCA-verification-key trust_domain=<trust_domain_tenant>
Použijte
ea_cert_pbid
jako odkaz na certifikát EA z předchozích kroků.encryption_key
averification_key
jsou odkazy na příslušné soukromé klíče nakonfigurované výše.Volitelně vyplňte také název nájemce, který obsahuje
trust_domain
, jehož součástí by měla být tato EA. -
Přidejte EA do CTL kořenové CA
Použijte šablonu rootca-ctl.json nebo předchozí šablonu CTL a upravte.
curl -X PUT --url "${ROOT_CA_URL}/cits/rca/create-certificate-trust-list" \ --header 'Content-Type: application/json' \ -d @templates/rootca-ctl.json
Úryvek toho, co přidat do CTL:
... { "add": { "ea": { "eaCertificate": "79C2F0762BC405D9", "aaAccessPoint": "http://pki.seacat.io/etsi-plugtest-bp-ea/cits/ea/authorization-validation", "itsAccessPoint": "http://pki.seacat.io/etsi-plugtest-bp-ea/cits/ea/enrolment" } } } ...
-
Restartujte SeaCat PKI
Vygenerování certifikátu autority pro autorizaci (AA)¶
-
Zadejte nového nájemce
v
etc/seacatpki.conf
:[tenants] ids=TENANT_SUBCA
-
Určete základní URL API SeaCat PKI
export ROOT_CA_URL=http://localhost:8080/TENANT_ROOT_CA export AA_URL=http://localhost:8080/TENANT_SUBCA
-
Vygenerujte ověřovací soukromý klíč autority pro autorizaci
Vyberte jednu z následujících EC:
Brainpool P-386 (
brainpoolP384r1
)openssl ecparam -name brainpoolP384r1 -genkey -noout -out aa-verification-private-key.pem
Brainpool P-256 (
brainpoolP256r1
)openssl ecparam -name brainpoolP256r1 -genkey -noout -out aa-verification-private-key.pem
NIST P-256 (
prime256v1
,secp256r1
)openssl ecparam -name prime256v1 -genkey -noout -out aa-verification-private-key.pem
-
Vygenerujte šifrovací soukromý klíč autority pro autorizaci
Vyberte jednu z následujících EC:
Brainpool P-256 (
brainpoolP256r1
)openssl ecparam -name brainpoolP256r1 -genkey -noout -out aa-encryption-private-key.pem
NIST P-256 (
prime256v1
,secp256r1
)openssl ecparam -name prime256v1 -genkey -noout -out aa-encryption-private-key.pem
-
Nakonfigurujte klíče v SeaCat PKI
v
etc/seacatpki.conf
:[seacatpki:private_key:TENANT_SUBCA-verification-key] keyfile=${THIS_DIR}/aa-verification-private-key.pem tenants=TENANT_SUBCA [seacatpki:private_key:TENANT_SUBCA-encryption-key] keyfile=${THIS_DIR}/aa-encryption-private-key.pem tenants=TENANT_SUBCA
-
Restartujte SeaCat PKI
-
Vygenerujte žádost o certifikát AA CA.
Použijte šablonu aa-cacr.json a upravte.
curl -X PUT ${AA_URL}/cits/aa/ca-certificate-request \ --header 'Content-Type: application/json' \ -d @templates/aa-cacr.json
Odpověď
{ "result": "OK", "pbid": "etsi-plugtest-nist-aa2:d09833dafcdb1b7d44614b28500a2ee2eb50c94a918155023b68b65bd1862bb8", "fingerprint": "d09833dafcdb1b7d44614b28500a2ee2eb50c94a918155023b68b65bd1862bb8" }
-
Stáhněte žádost o certifikát CA z AA
curl -o aa-cacr.coer ${AA_URL}/sa/<pbid>
Tím se uloží žádost o certifikát CA do souboru
aa-cacr.coer
.Poznámka: Pokud AA a kořenová CA sdílejí stejný nájemce, kroky stahování a nahrávání mohou být přeskočeny.
-
Nahrajte žádost o certifikát CA do kořenové CA
curl -X PUT "${ROOT_CA_URL}/sa?family=cits&type=cacr" --upload-file aa-cacr.coer
Odpověď:
{ "result": "OK", "pbid": "etsi-plugtest-nist-rca:d09833dafcdb1b7d44614b28500a2ee2eb50c94a918155023b68b65bd1862bb8" }
Poznamenejte si
pbid
jakocacr_pbid
. -
Schvalte žádost o certifikát AA CA v kořenové CA
Použijte šablonu rootca-aa-cacr-approve.json a upravte.
curl -X
Technická specifikace nové C-ITS PKI¶
Tento dotazník musí být vyplněn poskytovatelem C-ITS PKI před instalací PKI.
TeskaLabs může poskytnout rozumné výchozí hodnoty, kde je to možné, na základě standardizace a zkušeností s nasazením.
TLM, do kterého bude vlořen nový certifikát Root CA¶
V případě EU TLM by měla být určená úroveň (L0, L1, L2) definována podle protokolu EU TLM CPOC.
Také název certifikátu Root CA má být přidělen CPA CPOC.
Odpověď: __
Poznámka: Tento předpoklad je volitelný, TLM může být přeskočen nebo zaveden později.
Požadované komponenty¶
- Počet certifikačních autorit Root (RCA): __
- Počet autorit pro registraci (EA): __
- Počet autorit pro autorizaci (AA): __
Typická C-ITS PKI obsahuje 1 RCA, 1 EA a 1 AA.
Počet EA a AA může být rozšířen během životního cyklu PKI.
Název nájemce¶
Může se stát součástí URL PKI.
Odpověď: __
Příklad: croads_cz_l0
Základní URL(s) autorit PKI¶
Odpověď: http://__
Může být stejná pro RCA, EA a AA nebo specifická pro každou komponentu.
Musí začínat http://
Klíčová křivka certifikátu Root CA¶
Vyberte jednu z:
- Brainpool P-386
- Brainpool P-256
- NIST P-256
Doporučujeme Brainpool P-386.
Certifikát Root CA¶
Použijte přiloženou šablonu JSON rootca.json
.
Důležité informace:
- Název certifikátu Root CA, příklad
0_My-New-Root-CA_L0
Poznámka: Pokud má být certifikát Root CA zaveden do TLM, musí název vyhovovat požadavkům TLM.
Klíčová křivka pro ověřovací klíč certifikátu EA¶
Vyberte jednu pro ověřovací klíč:
- Brainpool P-386
- Brainpool P-256
- NIST P-256
Doporučujeme Brainpool P-256.
Klíčová křivka pro šifrovací klíč certifikátu EA¶
Vyberte jednu pro šifrovací klíč:
- Brainpool P-256
- NIST P-256
Doporučujeme Brainpool P-256.
Žádost o certifikát EA¶
Použijte přiloženou šablonu JSON ea-cacr.json
.
Důležité informace:
- Název certifikátu EA
Klíčová křivka pro ověřovací klíč certifikátu AA¶
Vyberte jednu pro ověřovací klíč:
- Brainpool P-386
- Brainpool P-256
- NIST P-256
Doporučujeme Brainpool P-256.
Klíčová křivka pro šifrovací klíč certifikátu AA¶
Vyberte jednu pro šifrovací klíč:
- Brainpool P-256
- NIST P-256
Doporučujeme Brainpool P-256.
Žádost o certifikát AA¶
Použijte přiloženou šablonu JSON aa-cacr.json
.
Důležité informace:
- Název certifikátu AA