Přeskočit obsah

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.

  1. Zadejte nového nájemce

    Přidejte TENANT_ROOT_CA do nájemců, vyberte popisný název pouze malými písmeny ASCII v etc/seacatpki.conf:

    [tenants]
    ids=TENANT_ROOT_CA
    
  2. Určete základní URL API SeaCat PKI

    export ROOT_CA_URL=http://localhost:8080/TENANT_ROOT_CA
    
  3. 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.

  4. 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
    
  5. Spusťte SeaCat PKI

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

  7. 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 v etc/seacatpki.conf:

    [tenants]
    ids=TENANT_ROOT_CA TENANT_TRUST_DOMAIN
    
  8. 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
    
  9. 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.

  10. Restartujte SeaCat PKI

  11. 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
    
  12. 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
    
  13. Kořenová CA je nyní nakonfigurována a dostupná k použití.

Vygenerování certifikátu autority pro registraci (EA)

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

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

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

  5. 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
    
  6. Restartujte SeaCat PKI

  7. Vygenerujte žádost o certifikát EA CA.

    Použijte šablonu ea-cacr.json a upravte. Vyplňte hodnoty verification_key (TENANT_SUBCA-verification-key) a encryption_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.

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

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

  10. 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 jako ea_cert_pbid, odkazuje na nově vytvořený certifikát EA.

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

  12. 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
    
  13. 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 a verification_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.

  14. 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"
    } } }
    ...
    
  15. Restartujte SeaCat PKI

Vygenerování certifikátu autority pro autorizaci (AA)

  1. Zadejte nového nájemce

    v etc/seacatpki.conf:

    [tenants]
    ids=TENANT_SUBCA
    
  2. 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
    
  3. 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
    

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

  5. 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
    
  6. Restartujte SeaCat PKI

  7. 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"
    }
    
  8. 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.

  9. 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 jako cacr_pbid.

  10. Schvalte žádost o certifikát AA CA v kořenové CA

    Použijte šablonu rootca-aa-cacr-approve.json a upravte.

    curl -X