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