Kao što vam je poznato, od 1.1.2017 preglednik Google Chrome proglašava nesigurnim sve web‑stranice koje se za sigurnost prometa koriste algoritmom SHA1, što znači da moramo prijeći na noviji i sigurniji SHA2 (SHA256). Pokazat ćemo nekoliko načina kako stvoriti samopotpisani (engl. self-signed) certifikat kojim se možemo koristiti za interne primjene, dok za produkcijsko okruženje morate imati certifikat generiran od strane pouzdanih davatelja certifikata kojima web‑preglednici vjeruju.
Naravno, osim za web-stranice, certifikate možemo upotrebljavati i za druge primjene. Samopotpisani certifikat možemo generirati na više načina, preko naredbenog retka ili u grafičkom okruženju. Prednost naredbenog retka je što možemo napraviti skriptu u koju unesemo sve parametre i poslije toga je koristimo "s dva klika" uz lako i brzo mijenjanje parametara u nekom tekst editoru. Mana je što morate napamet znati parametre ili morate njihova pojašnjenja imati spremljena negdje u blizini. U grafičkom okruženju je obrnuto, pojašnjenja parametara uglavnom su lako vidljiva i dostupna, ali pri svakom generiranju certifikata trebamo prolaziti postupak od nule.
Prvi način koji ćemo opisati u ovom članku je, sad već malo starija, naredba MAKECERT, ali s obzirom na to da podržava i algoritam SHA256, još je uvijek možemo iskoristiti.
Naredba Makecert nije dio operacijskog sustava Windows, pa je moramo samostalno "nabaviti". Tu odmah nailazimo na jedan banalan problem u tome što Microsoft nije omogućio da se makecert.exe preuzme kao mala samostalna aplikacija, već moramo preuzeti i instalirati paket imena "Windows Software Develepment Kit" (WSDK). Taj paket može biti u različitim verzijama, za različite verzije Windows OS-a. Mi smo preuzeli verziju "10.0.10586.212" za Windows 10 s poveznice https://go.microsoft.com/fwlink/?LinkID=698771.
Nakon preuzimanja i pokretanja instalacije WSDK, u čarobnjaku za instalaciju dolazimo do koraka u kojem izabiremo komponente za instalaciju. Dovoljno je označiti samo komponentu "Windows Software Develeopment Kit".
Nakon instalacije, makecert.exe pronaći ćemo u mapi "C:\Program Files (x86)\Windows Kits\10\bin\x64 ili x86, ovisno o tome kojom verzijom ćete se koristiti. Mi ćemo se koristiti verzijom x64.
Dobra je stvar što sad makecert.exe možemo jednostavno kopirati i negdje spremiti pa više nema potrebe da bilo gdje instaliramo ovaj softverski paket. Ustvari, najbolje je da instalaciju Windows SDK napravite na nekom testnom računalu (zašto instalirati nepotrebne stvari po produkciji (oko 1.4GB) kad trebamo samo jednu malu datoteku od oko 65KB). Naša verzija datoteke iz ovog paketa bila je 10.0.10586.22.
Drugi način kako doći do datoteke je da je pokušate naći negdje na internetu kao samostalnu datoteku.
Detaljnije o naredbi makecert možete pročitati na donjoj poveznici gdje možete vidjeti i popis svih mogućih parametara:
https://docs.microsoft.com/en-us/windows/desktop/seccrypto/makecert
Pojasnit ćemo nekoliko osnovnih parametara na jednom konkretnom primjeru. Znači, pokrenemo naredbeni redak (CMD), obvezno s administratorskim ovlastima, i pozicioniramo se u mapu u koju smo spremili našu datoteku makecert.exe.
Primjer naredbe:
---------------------------------------------------------
makecert -a SHA256 -r -len 2048 -pe -n "CN=ime_certifikata" -b 01/23/2018 -e 01/23/2025 -eku 1.3.6.1.5.5.7.3.1 -ss My -sr LocalMachine -sky Exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
Konkretno:
---------------------------------------------------------
makecert -a SHA256 -r -len 2048 -pe -n "CN=nb-damir.srce.hr" -b 01/23/2018 -e 01/23/2025 -eku 1.3.6.1.5.5.7.3.1 -ss My -sr LocalMachine -sky Exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
Pojasnit ćemo parametre koje smo upotrijebili:
-a -> vrsta hash algoritma (može biti MD5, SHA-1, SHA256), u službenoj dokumentaciji nije navedena podrška za SHA256, ali radi i za njega
-r -> označava da stvaramo samopotpisani certifikat
-len -> duljina RSA ključa (2048). Da bismo imali mogućnost generiranja RSA ključa većeg od 1024, verzija makecerta treba biti najmanje 6.1.7600.16385. Starije verzije imaju opciju samo do 1024.
-pe -> označava privatni ključ eksportabilnim
-n -> ime certifikata
-b -> datum početka valjanosti certifikata (u obliku mjesec/dan/godina)
-e -> datum isteka valjanosti certifikata (u obliku mjesec/dan/godina)
-eku -> oznaka autentikacije, klijent ili server ili oboje (tada se pišu jedan iza drugog odvojeni zarezom bez razmaka):
OID: 1.3.6.1.5.5.7.3.1 - SSL serverski certifikat, njime se server predstavlja klijentu te se kriptira i dekriptira sadržaj
OID: 1.3.6.1.5.5.7.3.2 - SSL klijentski certifikat, njime se klijent predstavlja udaljenom računalu. Ako bismo ovaj certifikat pokušali koristiti na serverskoj strani, dobili bismo poruku/grešku o nemogućnosti korištenja za serverske potrebe.
-ss -> lokacija, tj. ime spremišta gdje će certifikat biti spremljen u konzoli s certifikatima. Npr:
My-> certifikat se sprema u: Certificates (Local Computer) - Personal – Certificates
AuthRoot-> certifikat se sprema u: Certificates (Local Computer) - Third-party Root Certification Authorities - Certificates
CA-> certifikat se sprema u: Certificates (Local Computer) - Intermediate Certification Authorities - Certificates
Root-> certifikat se sprema u: Certificates (Local Computer) - Trusted Root Certification Authorities - Certificates
Samopotpisani - > certifikat se sprema na novu lokaciju proizvoljno definiranog imena, u ovom slučaju imena "Samopotpisani": Certificates (Local Computer) - Samopotpisani – Certificates
-sr -> certstore lokacija u registryju, može biti:
LocalMachine -> sprema se u registry ključ HKEY_LOCAL_MACHINE
CurrentUser -> sprema se u registry ključ HKEY_CURRENT_USER. CurrentUser je osnovno podešavanje, ako –sr parametar nije definiran.
-sky -> Tip ključa subjekta. Može biti: Exchange, Signature ili broj (1 za Exchange, 2 za Signature). Signatureom se koristimo pri stvaranju digitalnih potpisa ili potvrda identiteta, a Exchange za enkripciju prometa. Samo izborom Exchange (ili broja 1) certifikat će biti stvoren i vidljiv u konzoli s certifikatima.
-sp -> CryptoAPI davatelj
-sy -> CryptoAPI tip davatelja.
Konkretnom naredbom s parametrima koje smo pokazali, certifikat se automatski importira u sustav na lokaciju Certificates (Local Computer)\Personal\Certificates, što možemo vidjeti pokretanjem administrativne konzole Certificates (certmgr.msc).
Ako ne želimo da se certifikat automatski importira u sustav, već ga stvaramo, npr. kako bismo ga mogli iskoristiti kasnije ili na nekom drugom računalu, treba nam dodatni parametar "–sv":
-sv proizvoljno_ime.pvk proizvoljno_ime.cer
Umjesto " proizvoljno_ime " možemo napisati bilo koje ime ili izraz, kako nam je lakše za praćenje i upotrebu.
Kao primjer zamislimo istu situaciju u kojoj trebamo stvoriti certifikat imena "nb-damir.srce.hr" koji na kraju također treba biti u konzoli Certificates, samo ovaj put ne ide automatikom, nego ćemo ga stvoriti kao datoteku, a zatim ćemo ga ručno importirati.
Konkretno:
--------------------------------------------
makecert -a SHA256 -r -len 2048 -pe -n "CN=nb-damir.srce.hr" -b 01/23/2018 -e 01/23/2025 -eku 1.3.6.1.5.5.7.3.1 -ss My -sr LocalMachine -sky Exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv makecert.pvk makecert.cer
U ovom slučaju certifikat neće biti automatski učitan u sustav nego ćemo ovako stvoriti dvije datoteke ekstenzija pvk i cer, a onda ćemo u konzolu Certificates preko čarobnjaka uvesti datoteku cer. Ili jednostavno kliknuti desnom tipkom na datoteku cer pa nakon izbora Install Certificate slijediti upute čarobnjaka za uvoz.
Ovom će nam se naredbom i kombinacijom parametara u postupku stvaranja pvk i cer datoteka pojaviti prozor u koji ćemo upisati proizvoljnu lozinku za stvaranje privatnog ključa.
Naravno, ovo su samo dva primjera za koje mislimo da su dovoljni da se nauči i shvati podloga i osnove, a onda je lako krenuti dalje u detalje i konkretnije primjene.
Za kraj ćemo pokazati postavke stvorenog certifikata u kojima se vide bitni parametri.
U svojstvima (Properties) Certifikata, nama su bitna polja:
- "Signature algorithm" koji treba biti "sha256RSA"
- "Signature hash algorithm" koji treba biti "sha256".
Na dnu imamo još jedno polje koje može biti zbunjujuće:
- "Thumbprint algorithm" koji je "sha1" i to je u redu jer se to polje ne koristi za sigurnost već samo kao način preko kojeg se generira "Thumbprint".