Přeskočit obsah

Generování a správa klientských certifikátů

Generování certifikátů

Ke generování certifikátů slouží služba pmc-scep, která implementuje SCEP. Tuto službu volá PMC BE na základě požadavku z instalačního souboru. Viz schéma níže.

Správa certifikátů 01

Instalace SCEP serveru a vytvoření certifikační autority

Info

Pokud instalace PMC proběhla podle popisu základní instalace, není tyto kroky třeba dělat. SCEP server je již součástí docker-compose souboru.

Vytvoření CA

mkdir /var/lib/pmc/scep
cd /var/lib/pmc/scep
mkdir certs private
echo 01 > serial
touch index.txt
cp /etc/ssl/openssl.cnf .
vim ./openssl.cnf

Editujte soubor ./openssl.cnf, aby vypadal následovně.

./openssl.cnf
[ ca ]
default_ca      = CA_default            # The default ca section

[ CA_default ]
dir             = /var/lib/pmc/scep     # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
database        = $dir/index.txt        # database index file.
                                        # several certs with same subject.
new_certs_dir   = $dir/certs            # default place for new certs.
certificate     = $dir/certs/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
private_key     = $dir/private/cakey.pem # The private key

name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

default_days    = 3650                  # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = sha256                # use SHA-256 by default
preserve        = no                    # keep passed DN ordering
policy          = policy_match

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = CZ
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Czechia
localityName                    = Locality Name (eg, city)
localityName_default            = Prague
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Green Center s.r.o
organizationalUnitName          = Organizational Unit Name (eg, section)
commonName                      = Common Name (eg, your name or your server\'s hostname)
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_max                = 64

[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

Poté vytvořte privátní klíč kořenové CA a změňte formát certifikátu

# (10)!
openssl genrsa -des3 -out private/cakey.pem 4096

# (9)!
openssl req -new -x509 -days 3650 -config openssl.cnf -extensions v3_ca -key private/cakey.pem -out certs/cacert.pem

# (8)!
openssl x509 -in certs/cacert.pem -out certs/cacert.pem -outform PEM

# (7)!
openssl x509 -noout -text -in certs/cacert.pem

mkdir intermediate
mkdir intermediate/depot
cd intermediate/depot
touch index.txt
echo 01 > serial
echo 01 > crlnumber
#copy the configuration file and make following changes
cp ../../openssl.cnf ../openssl.cnf
vim ../openssl.cnf # (1)!
vim index.txt.attr # (2)!

# (3)!
openssl genrsa -des3 -out ./ca.key 4096
openssl req -new -sha256 -config ../openssl.cnf -key ca.key -out intermediate.csr.pem # (4)!

# (5)! 
openssl ca -config ../../openssl.cnf -extensions v3_intermediate_ca -days 2650 -notext -batch -in intermediate.csr.pem -out ca.pem

# (6)!
openssl x509 -noout -text -in ca.pem
  1. V souboru udělejte následující úpravy

    ../openssl.cnf
    dir          = /var/lib/pmc/scep/intermediate  # Where everything is kept
    certificate  = $dir/depot/ca.pem               # The CA certificate
    private_key  = $dir/depot/ca.key               # The private key
    policy       = policy_anything
    

  2. Vytvoření souboru index.txt.attr s obsahem níže

    index.txt.attr
    unique_subject = yes
    

  3. Vytvoření klíče a CSR
  4. V parametrech vyplnit následující:
    Country Name (2 letter code) [CZ]:  
    State or Province Name (full name) [Czechia]:  
    Locality Name (eg, city) []:Prague  
    Organization Name (eg, company) [Green Center s.r.o]:  
    Organizational Unit Name (eg, section) []:Kbely  
    Common Name (e.g. server FQDN or YOUR name) []:Intermediate CA  
    Email Address []:  
    Please enter the following 'extra' attributes  
    to be sent with your certificate request  
    A challenge password []:  
    An optional company name []:  
    
  5. Podepsání CSR a vytvoření certifikátu pro immediate CA
  6. Ověření - příkaz vypíše certifikát v textové podobě
  7. Ověření - příkaz vypíše certifikát v textové podobě
  8. Export certifikátu do formátu PEM
  9. Vytvoření nového certifikátu
  10. Generování privátního klíče

Zdroj: https://www.golinuxcloud.com/openssl-create-certificate-chain-linux/

Instalace SCEP serveru

  1. Stažení Binárního souboru
  2. Příprava souborů v adresáři /var/lib/pmc/scep

    cd /var/lib/pmc/scep/intermediate
    echo "capassword" > capas
    echo "challenge" > challenge
    chmod 400 capas challenge
    

    Do adresáře /var/lib/pmc/scep/ nakopírujte také soubor scepserver-linux-amd64.

    tip

    Pokud nemáte vlastní CA, je možné ji vytvořit příkazem níže (doporučeno pouze pro testovací účely)

    ./scepserver-linux-amd64 ca -init -country "CZ" -key-password "CAPASSWORD" -organization "GREEN" -organizational_unit "GREEN PHA"
    

  3. Vytvoření SCEP služby - Nejdříve vytvoříme soubor /etc/systemd/system/scep.service

    /etc/systemd/system/scep.service
    [Unit]
    Description = SCEP Server
    After = network.target
    
    [Service]
    Type = simple
    Restart=on-failure
    RestartSec=5s
    User = pmc
    Group = pmc
    WorkingDirectory= /var/lib/pmc/scep/intermediate
    ExecStart = /var/lib/pmc/scep/intermediate/scepserver-linux-amd64 -capassFile /var/lib/pmc/scep/intermediate/capas -port 8099 -challengeFile /var/lib/pmc/scep/intermediate/challenge -crtvalid 1825
    ExecStop= /bin/kill "$MAINPID"
    
    [Install]
    WantedBy = multi-user.target
    

    A následně provedeme příkazy níže:

    # (1)!
    sudo systemctl daemon-reload
    
    # (2)!
    sudo systemctl start scep
    
    # (3)!
    sudo systemctl status scep
    
    sudo systemctl enable scep
    
    1. Reload konfigurace
    2. Spuštění SCEP služby
    3. Kontrola zda služba naběhla. Pokud ano, nastavíme příkazem níže automatické spouštění

    Tip

    Pro kontrolu logů můžete použít následující příkaz:

    sudo journalctl -a -u scep
    

  4. Úprava konfigurace reverse proxy Pokud jsme službu nakonfigurovali podle návodu, je třeba do konfigurace reverse proxy přidat tyto řádky - viz konfigurace reverse proxy

    ProxyPass /scep http://127.0.0.1:8099/scep
    ProxyPassReverse /scep http://127.0.0.1:8099/scep
    

    Po úpravě souboru je třeba restartovat apache příkazem sudo systemctl restart apache2.

Instalace SCEP klienta

Scep klienta spouští PMC. V případě, že instalace PMC proběhla podle popisu základní instalace, není třeba klientskou část vůbec řešit, protože je součástí docker kontejneru pmc-be. Pro ostatní případy je třeba klienta zpřístupnit na cestě, která je nakonfigurovaná v konfiguračním souboru pmc-be a ujistit se, že uživatel který spouští službu PMC má právo na spuštění tohoto souboru.