Sertifikaadid
Kõnekeeli öeldakse sertifikaadi kohta mugavalt "sert" ehk mitmuses "serdid".
Juhendi kasutamiseks on vajalik OpenSSL ver 1.1.1 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.
Sisukord
CA, ehk sertifitseerimiskeskuse tekitamine
Tekita CA võtmed
$ openssl genrsa -des3 -out ca.key 4096
Allkirjasta CA sertifikaat iseendaga
$ openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -addext "keyUsage=critical,cRLSign,keyCertSign" 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 -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 -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. Serverite puhul on vaja aga sageli teenuseid automaatselt või kaugelt restartida ning sel juhul pole võimalik pidevalt võtit sisestada.