Sertifikaadid

Allikas: Kuutõrvaja

Kõnekeeli öeldakse sertifikaadi kohta mugavalt "sert" ehk mitmuses "serdid".

Juhendi kasutamiseks on vajalik OpenSSL ver 0.9.7 või uuem.

Oletame, et meil on 2 asutust: sertifitseerimiskeskuse rollis "AS AgentuurC" ja teine asutus "OÜ Kasutaja", kes tahab oma veebi- või postiserverile sertifikaati.

CA, ehk sertifitseerimiskeskuse tekitamine

Tekita CA võtmed (2011 seisuga on soovituslik kasutada 2048-bitist RSA võtit)

$ openssl genrsa -des3 -out ca.key 2048

Allkirjasta CA sertifikaat iseendaga

$ openssl req -new -x509 -sha256 -days 1095 -key ca.key -out ca.crt
EE
.
Tallinn
AS AgentuurC
.
AgentuurC Test Root CA
helpdesk@agentuurc.ee

Kasutaja sertifikaadi tegemine

Tekita kasutaja võtmed

$ openssl genrsa -out kasutaja.key 2048

Tekita sertifikaadi allakirjutamise päring ja saada see (.csr fail) CA-le

$ openssl req -new -sha256 -key kasutaja.key -out kasutaja.csr
EE
.
Tartu
OÜ Kasutaja
Müügiosakond
www.oukasutaja.ee
info@oukasutaja.ee

CA uurib päringut ja allkirjastab sertifikaadi

$ openssl req -text -noout -in kasutaja.csr
...
$ openssl x509 -req -sha256 -days 1095 -CA ca.crt -CAkey ca.key -CAcreateserial \
-out kasutaja.crt -in kasutaja.csr

Kui masinal on mitu nime

Tekita sertifikaadi laiendusfail cext.txt ja saada ta koos .csr failiga CA-le

$ cat cext.txt
subjectAltName = DNS:www.oukasutaja.ee,DNS:mail.oukasutaja.ee
basicConstraints = critical,CA:FALSE

CA allkirjastab sertifikaadi ja lisab laiendused

$ openssl x509 -req -sha256 -days 1095 -CA ca.crt -CAkey ca.key -CAcreateserial \
-out kasutaja.crt -in kasutaja.csr -extfile cext.txt

Sertifikaadi sisu vaatamine

$ openssl x509 -noout -text -in kasutaja.crt

Sertifikaadi tühistamine

Vaja on tühistada üks kasutajasertifikaat

$ openssl ca -config ca.conf -revoke taotlused/kasutaja.crt 

Mis tekitab index.txt faili kirje (seal on näha R tähte õige rea ees, mis tähendab revoked)

$ openssl ca -gencrl -out "crl.pem" -config ca.conf

Mis tekitab crl.pem faili mida meil vaja. Configuratsioonifail ca.conf ise võiks olla järgnev


 [ ca ]
 default_ca      = CA_default            # The default ca section
 
 [ CA_default ]
 dir            = ./              # top dir
 database       = index.txt        # index file.
 new_certs_dir  = newcerts         # new certs dir
  
 certificate             = ca.crt       # The CA cert
 private_key             = ca.key # CA private key
 
 default_days   = 1024                   # how long to certify for
 default_crl_days= 30                   # how long before next CRL
 default_md     = md5                   # md to use

 policy         = policy_any            # default policy
 email_in_dn    = no                    # Don't add the email into cert DN

 name_opt       = ca_default            # Subject name display option
 cert_opt       = ca_default            # Certificate display option
 copy_extensions = none                 # Don't copy extensions from request

 [ policy_any ]
 countryName            = supplied
 stateOrProvinceName    = optional
 organizationName       = optional
 organizationalUnitName = optional
 commonName             = supplied
 emailAddress           = optional

Näiteks OpenVPNi puhul tuleb tekkinud crl.pem lisada configuratsiooni järgnevalt

crl-verfiy crl.pem

Selle faili sisu vaatamiseks on käsk

$ openssl crl -in crl.pem  -noout -text

Iseallkirjastatud sertifikaat

Lihtsamal juhul võib pruukida iseallkirjastatud sertifikaati (i.k. self-signed certificate)

$ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout kasutaja.key -out kasutaja.crt

Kui skriptimisel on vaja vältida konsoolilt pärimist, saab parameetrid kõik käsureal anda

$ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout kasutaja.key -out kasutaja.crt -subj "/C=EE/ST=/L=Tartu/O=Kasutaja/CN=www.oukasutaja.ee" -batch

Krüpteerida või mittekrüpteerida võtit?

Krüpteeritud võti tähendab põhimõtteliselt seda, kas kasutades enda privaatset võtit küsitakse täiendavat parooli või ei. Tavaliselt küsib openssl võtme genereerimise ajal parooli ning kui selle sisestamise asemel enterit vajutada jäetakse krüpteerimine tegemata.

Üldiselt on soovitatav jätta serverite võtmed ilma täiendava krüpteerimiseta ning kasutaja sertifikaadid (nt VPN) jms jaoks krüpteerida, kuna kasutajate võtmed võivad kergemini kompromiteeruda, nt varastadakse läpakas ära vms. Serverite puhul on vaja aga sageli teenuseid automaatselt või kaugelt restartida ning sel juhul pole võimalik pidevalt võtit sisestada. Et kontrollida, kas võtmel on kood (näitab ka õiguste probleemid, kui neid on)

# ssh-keygen -y -f kasutaja.key

-f annad siis faili ette, ilma selleta võtab kodukaustast .ssh/id_dsa või id_rsa, mis saadaval on.

Kui kood on/ei ole/tahad muuta

# ssh-keygen -p -f kasutaja.key