Stvaranje, upravljanje i konverzija SSL certifikata pomoću OpenSSL-a
Jedan od najčešće korišćenih alata u SSL svetu za generisanje, preoblikovanje i kontrolu SSL certifikata jeste OpenSSL.
Često ćete se naći u situacijama gde je potrebno rukovati OpenSSL-om na različite načine, a ovde vam predstavljam korisne smernice.
U ovom tekstu objasniću najčešće korišćene OpenSSL komande koje će vam biti od koristi u praksi.
Neke od skraćenica su vezane za certifikate.
- SSL – Secure Socket Layer (Sloj sigurnih utičnica)
- CSR – Certificate Signing Request (Zahtev za potpisivanje certifikata)
- TLS – Transport Layer Security (Sigurnost transportnog sloja)
- PEM – Privacy Enhanced Mail (Pošta sa poboljšanom privatnošću)
- DER – Distinguished Encoding Rules (Pravila za razlikovno kodiranje)
- SHA – Secure Hash Algorithm (Algoritam sigurnog heširanja)
- PKCS – Public Key Cryptography Standards (Standardi kriptografije javnog ključa)
Napomena: Kurs SSL/TLS operacije može biti koristan ako niste upoznati sa ovim pojmovima.
Kreiranje novog privatnog ključa i zahteva za potpisivanje certifikata
openssl req -out techblog.co.rs.csr -newkey rsa:2048 -nodes -keyout techblog.co.rs.key
Gornja naredba će stvoriti CSR i 2048-bitnu RSA ključnu datoteku. Ako planirate da upotrebite ovaj certifikat na Apache ili Nginx serveru, neophodno je da pošaljete ovaj CSR fajl certifikacionom telu, koje će vam izdati potpisani certifikat, obično u DER ili PEM formatu. Taj certifikat potom treba da konfigurišete na Apache ili Nginx veb serveru.
Generisanje samopotpisanog certifikata
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
Ova naredba će proizvesti samopotpisani certifikat i ključnu datoteku sa 2048-bitnim RSA algoritmom. Uključio sam i sha256 jer se trenutno smatra najsigurnijim.
Savet: Podrazumevano, generisaće se samopotpisani certifikat sa rokom važenja od samo mesec dana, pa možete razmisliti o definisanju parametra –days kako biste produžili taj period.
Na primer: Samopotpisani certifikat sa rokom važenja od dve godine:
openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
Provera CSR datoteke
openssl req -noout -text -in techblog.co.rs.csr
Verifikacija je neophodna da biste bili sigurni da šaljete CSR sa svim potrebnim detaljima nadležnom organu.
Stvaranje RSA privatnog ključa
openssl genrsa -out private.key 2048
Ako vam je potrebno samo da generišete RSA privatni ključ, možete koristiti gornju naredbu. Uključio sam 2048 za jaču enkripciju.
Uklanjanje pristupne fraze iz ključa
openssl rsa -in certkey.key -out nopassphrase.key
Ako koristite pristupnu frazu u ključnoj datoteci, a koristite Apache, svaki put kada pokrenete server, morate uneti lozinku. Ako vam smeta unos lozinke, možete koristiti opciju `openssl rsa -in vdzvdz.key -check` da uklonite pristupnu frazu iz postojećeg ključa.
Provera privatnog ključa
openssl rsa -in certkey.key –check
Ako sumnjate u ispravnost svoje ključne datoteke, možete je proveriti pomoću ove naredbe.
Provera certifikatske datoteke
openssl x509 -in certfile.pem -text –noout
Ako želite da proverite podatke o certifikatu kao što su CN, OU itd., možete koristiti gornju naredbu koja će prikazati detalje certifikata.
Provera autoriteta potpisnika certifikata
openssl x509 -in certfile.pem -noout -issuer -issuer_hash
Svaki certifikat potpisuje autoritet za izdavanje certifikata, i ovu informaciju možete proveriti.
Provera heš vrednosti certifikata
openssl x509 -noout -hash -in bestflare.pem
Konverzija DER u PEM format
openssl x509 –inform der –in sslcert.der –out sslcert.pem
Često će vam certifikaciono telo dostaviti SSL certifikat u .der formatu, a ako ga treba koristiti na Apache ili u .pem formatu, ova komanda će vam pomoći.
Konverzija PEM u DER format
openssl x509 –outform der –in sslcert.pem –out sslcert.der
U slučaju da treba da promenite .pem format u .der.
Konverzija certifikata i privatnog ključa u PKCS#12 format
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem
Ako treba da koristite certifikat sa Java aplikacijom ili nekom drugom koja prihvata samo PKCS#12 format, možete koristiti ovu naredbu koja će generisati jedan pfx fajl koji sadrži i certifikat i ključnu datoteku.
Savet: Možete uključiti i certifikat lanca prenošenjem –chain kao u nastavku.
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem -chain cacert.pem
Stvaranje CSR-a pomoću postojećeg privatnog ključa
openssl req –out certificate.csr –key existing.key –new
Ako ne želite da kreirate novi privatni ključ, već da koristite postojeći, možete koristiti ovu naredbu.
Provera sadržaja certifikata u PKCS12 formatu
openssl pkcs12 –info –nodes –in cert.p12
PKCS12 je binarni format, tako da nećete moći da vidite sadržaj u notepadu ili drugom tekst editoru. Ova naredba će vam pomoći da vidite sadržaj PKCS12 datoteke.
Konverzija PKCS12 formata u PEM certifikat
openssl pkcs12 –in cert.p12 –out cert.pem
Ako želite da koristite postojeći pkcs12 format sa Apache ili samo u pem formatu, ovo će biti korisno.
Testiranje SSL certifikata određene URL adrese
openssl s_client -connect yoururl.com:443 –showcerts
Ovo često koristim za validaciju SSL certifikata određene URL adrese sa servera. Ovo je vrlo korisno za proveru detalja protokola, šifre i certifikata.
Saznavanje verzije OpenSSL-a
openssl version
Ako ste zaduženi da osigurate da je OpenSSL siguran, verovatno je jedna od prvih stvari koju treba da uradite da proverite verziju.
Provera datuma isteka certifikata PEM datoteke
openssl x509 -noout -in certificate.pem -dates
Korisno ako planirate da postavite nadzor radi provere validnosti. Prikazaće vam datum u sintaksi notBefore i notAfter. notAfter je onaj koji treba da proverite da biste bili sigurni da li je certifikat istekao ili je još uvek važeći.
npr.
[[email protected] opt]# openssl x509 -noout -in bestflare.pem -dates notBefore=Jul 4 14:02:45 2015 GMT notAfter=Aug 4 09:46:42 2015 GMT [[email protected] opt]#
Provera datuma isteka certifikata za SSL URL
openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate
Još jedna korisna naredba ako planirate daljinski da nadgledate datum isteka SSL certifikata određene URL adrese.
npr.
[[email protected] opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate notAfter=Dec 8 00:00:00 2015 GMT
Provera da li je SSL V2 ili V3 prihvaćen na URL-u
Za proveru SSL V2:
openssl s_client -connect secureurl.com:443 -ssl2
Za proveru SSL V3:
openssl s_client -connect secureurl.com:443 –ssl3
Za proveru TLS 1.0:
openssl s_client -connect secureurl.com:443 –tls1
Za proveru TLS 1.1:
openssl s_client -connect secureurl.com:443 –tls1_1
Za proveru TLS 1.2:
openssl s_client -connect secureurl.com:443 –tls1_2
Ako obezbeđujete veb server i morate da proverite da li je SSL V2/V3 omogućen ili ne, možete koristiti ovu naredbu. Ako je aktiviran, dobićete „POVEZANO“ u suprotnom „Neuspešno rukovanje“.
Provera da li je određena šifra prihvaćena na URL-u
openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443
Ako radite na bezbednosnim problemima i rezultati testova penetracije pokazuju da su neke od slabih šifri prihvaćene, a vi želite da ih potvrdite, možete koristiti ovu naredbu.
Naravno, moraćete da promenite šifru i URL, prema kojima želite da testirate. Ako se pomenuta šifra prihvati, dobićete „POVEZANO“ u suprotnom „neuspelo rukovanje“.
Nadam se da će vam ove komande pomoći da saznate više o OpenSSL-u za upravljanje SSL certifikatima za vašu veb lokaciju.