Stvaranje samopotpisanih certifikata u Windows okruženju – naredba OpenSSL

Drugi alat za stvaranje samopotpisanih certifikata putem naredbenog retka je naredba OpenSSL, izvorno besplatan Linuxov projekt. U ovom ćemo se članku koristiti verzijom za Windows okruženje. Ako ovaj alat pokušate naći nekim od internetskih pretraživača, vidjeti ćete da ima više izvora, više verzija datoteke odnosno instalacije OpenSSL-a.

Već sam dosta puta naglašavao da u člancima uvijek želim pokazati osnove temeljene na konkretnim primjerima, pa će tako biti i sada. Ovo naglašavam zato jer na internetu možete pronaći dosta stranica koje nadugo i naširoko opisuju parametre ove naredbe, pa vam se može desiti da od šume ne vidite drvo.

Za potrebe ovog prikaza koristit ćemo se verzijom OpenSSL-a koju nije potrebno instalirati (openssl-1.0.2j-fips-x86_64.zip), a možemo je preuzeti s ove poveznice.

Nakon preuzimanja, zip datoteku raspakirajte u vrh C diska (C:\ OpenSSL) jer ćete u protivnom kasnije dobivati razne poruke o nepostojanju nekih datoteka zato što ih program traži baš u toj mapi. Osim toga, nakon raspakiravanja trebate datoteku openssl.cnf iz mape C:\OpenSSL\bin kopirati u mapu C:\OpenSSL jer je aplikacija pri svom izvođenju traži na toj lokaciji. Možda je to slučaj samo s ovom našom verzijom, ali druge nismo testirali. Općenito se ovakvi problemi mogu susresti u aplikacijama koje dolaze iz "Linux svijeta", a naknadno su preuređene za Windows okruženje.

Openssl.exe, datoteka koja nam treba, nakon raspakiravanja paketa nalazi se u mapi c:\OpenSSL\bin.

Još jedna mogućnost kako doći do openssl.exe je instalacija iz izvora na ovoj poveznici.

 

Mi smo isprobali verziju Win64 OpenSSL v1.1.1 Light. Ustvari, nema puno razlike u odnosu na "zip verziju". Prednost ovog načina je ta što ne moramo ništa ručno raspakiravati, već installer sve radi sam. No, krajnji rezultat je isti, stvorena je mapa u kojoj imamo traženu openssl.exe datoteku. Različite verzije ovog paketa imaju različitu putanju kamo se raspakiravaju, pa pratite postupak instalacije da uočite taj dio.

 

Dva su načina kako iskoristiti ovu naredbu: korištenje preko skripte te korištenje preko konfiguracijske datoteke.

 

Primjer naredbe preko skripte:

openssl req -x509 -nodes -days 365 -sha256 -subj "/C=HR/ST=Zagrebacka/L=Zagreb/CN=www.nb-damir.srce.hr " -newkey rsa:2048 -keyout ime_privatnog_kljuca.pem -out ime_certifikata.srce.hr.cer

 

Ovom naredbom s pripadajućim parametrima prvo će se stvoriti privatni ključ (ime_privatnog_kljuca.pem) iz kojeg će se generirati CSR (Certificate Signing Request) potpisan tim privatnim ključem. Ovu naredbu s istim ili sličnim parametrima naći ćete na dosta mjesta na internetu, jedino je razlika da smo mi u zadnjem dijelu promijenili ekstenziju iz "pem" u "cer", jer pem nećete moći bez konverzije učitati u Windows konzolu s certifikatima.

 

1_openssl.jpg

 

Krajnji rezultat ovoga je da ćemo u mapi c:\OpenSSL\bin stvoriti datoteku ime_certifikata.srce.hr.cer koju trebamo učitati u sustav desnim klikom na nju, pa izborom "Install Certificate" ili preko čarobnjaka za učitavanje certifikata iz adminstrativne konzole "Certificates" (certmgr.msc). Ako se koristimo Install Certificateom, certifikat se učitava u Current User – Intermediate Certification Authority – Certificates, bez podešavanja parametara u čarobnjaku za uvoz.

 

2_openssl.jpg

 

Pojašnjenje parametara:

req parametar koji aktivira stvaranje certifikata

X509 oznaka za generiranje self-signed certifikata

nodes definira da privatni ključ u PKCS#12 datoteci nije kriptiran. Ovo se čita "no DES", nisu "nodovi". Ako ga želimo kriptirati, možemo jednostavno izostaviti parametar –nodes i tada će ključ biti kriptiran s 3DES-CBC. U tom slučaju će se u postupku pojaviti korak u kojem ćete morati upisati zaporku preko koje će se generirati enkripcijski ključ. U nekim verzijama OpenSSL-a moguće je koristiti se i drugim argumentima za enkripciju (-des, -des3, -aes256...), ali nama to s ovom verzijom nije funkcioniralo.

days - vrijeme valjanosti certifikata u danima

sha256 vrsta Hash algoritma

subj detaljniji podaci o certifikatu (/C= država, /ST= županija, /L= grad, /O= organizacija, /OU= organizacijska jedinica, /CN= ime)

newkey generira se novi CSR (certificate request) i novi privatni ključ

rsa:2048 oznaka da se generira RSA ključ duljine 2048 bita

keyout definira ime datoteke u koju će se spremiti novogenerirani privatni ključ

out definira ime datoteke i putanju na disku u koju će se spremiti stvoreni certifikat, ako ne definiramo putanju, tada će biti u mapi gdje smo pokrenuli naredbu.

 

Primijetite da je struktura parametara uglavnom "crtica –> ime parametra –> vrijednost".  Pri tome nema veze da li neke stvari stavimo u navodnike ili ne, pa je svejedno je li napisano:

 

"/C=HR/ST=Zagrebacka/L=Zagreb/CN=www.nb-damir.srce.hr"

"d:\Certifikati\www.nb-damir.srce.hr.cer"

 

ili

 

/C=HR/ST=Zagrebacka/L=Zagreb/CN=www.nb-damir.srce.hr

d:\Certifikati\www.nb-damir.srce.hr.cer

 

Primjer s podešavanjem lokacije spremanja certifikata:

openssl req -x509 -nodes -days 731 -sha256 -subj "/C=HR/ST=Zagrebacka/L=Zagreb/CN=www.nb-damir.srce.hr" -newkey rsa:2048 -keyout ime_privatnog_kljuca.pem -out d:\Certifikati\ime_certifikata.srce.hr.cer

 

3_openssl.jpg

 

Iskoristili smo parametar -out kojim, podsjetimo, određujemo lokaciju gdje će se pohraniti datoteka sa stvorenim certifikatom, a ako ne definiramo putanju, već samo ime datoteke, tada će ona biti stvorena u mapi u kojoj smo pokrenuli naredbu.

 

Korištenje konfiguracijske datoteke (proizvoljno_ime.cfg)

Naredba OpenSSL ima mogućnost pozivanja konfiguracijske datoteke u koju se mogu upisati parametri koje smo u prethodnim primjerima upisivali zajedno s naredbom. Navest ćemo primjer naredbe i primjer konfiguracijske datoteke. U konfiguracijskoj datoteci stavili smo napomene pa ćete prepoznati koji parametar je prije bio "vani", a sad je upisan u cfg datoteku.

 

Treba napomenuti da u konfiguracijsku datoteku možete upisati jako puno parametara, a mi ćemo iskoristiti samo dio koji nam je potreban za generiranje samopotpisanog certifikata.

 

Za ovo ćemo iskoristiti parametar -config kojim se definira putanja do konfiguracijske datotete. Datoteka ima ekstenziju cfg, ali to je, ustvari, obična tekstualna datoteka koju možemo otvoriti i uređivati u bilo kojem tekst editoru, Notepadu ili slično.

 

Primjer parametra:

-config C:\OpenSSL\bin\custom_Srce.cfg

 

Primjer naredbe s korištenjem konfiguracijske datoteke:

openssl req -x509 -nodes  -days 731 -config C:\OpenSSL\bin\custom_Srce.cfg -keyout d:\Certifikati\ime_privatnog_kljuca.pem -out d:\Certifikati\ime_certifikata.srce.hr.cer

 

Znači, u mapi C:\OpenSSL\bin\ stvorili smo tekstualnu datoteku imena custom_Srce.cfg sljedećeg sadržaja:

 

# U sekciji [ req ] osim pojedinih parametara, definiramo "imena" nizih odjeljaka u kojima

# pak definiramo vrijednosti varijabli i parametara

# Imena odjeljaka mogu biti i proizvoljna, npr. "req_distinguished_name" možemo zvati i "podaci o certifikatu"...

 

[ req ]

default_bits         = 2048

prompt               = no

default_md           = sha256

x509_extensions      = my server exts

distinguished_name   = req_distinguished_name

 

 

[ req_distinguished_name ]

# minimum je navesti commonName, može biti i u skracenom obliku, npr. CN=...

# CN

commonName = www.nb-damir.srce.hr

 

# C

countryName = HR

 

# L

localityName = Zagreb

 

# O

organizationName = Srce

 

# OU

organizationalUnitName = RMI

 

# ST

stateOrProvinceName = ZG

 

# E

emailAddress = test_cert@srce.hr

 

# G

givenName = Damir

 

# SN

surname = Glavac

 

# I

initials = DG

 

 

[ my server exts ]

extendedKeyUsage = 1.3.6.1.5.5.7.3.1, 1.3.6.1.5.5.7.3.2

# 1.3.6.1.5.5.7.3.1 možemo pisati i kao serverAuth...

# extendedKeyUsage = serverAuth

 

# 1.3.6.1.5.5.7.3.2 možemo pisati i kao clientAuth...

# extendedKeyUsage = clientAuth

 

Vjerujemo da ćete lako primijetiti koji parametri su "nestali" iz naredbe, a "pojavili" su se u konfiguracijskoj datoteci. Također, možete primijetiti da ovdje imamo parametar extendedKeyUsage koji nismo imali u prijašnjim primjerima gdje nismo imali konfiguracijsku datoteku.