Majdnem minden szerver funkcióhoz kell ma már SSL kulcs és tanúsítvány. Persze lehet élni nélküle, de ha valamit is adsz a biztonságra, akkor jobb vele. Legyen szó webről (https) vagy levelezésről (IMAPS vagy IMAP+STARTTLS, de ugyan ez igaz POP3 és SMTP esetén is), a biztonságos kommunikáció alapja a megfelelő "SSL" kulcs és tanúsítvány. Persze az SSL csak egy vivőréteg és a kulcs az többnyire RSA, a tanúsítvány pedig X.509, de a köznyelv (és ebben az esetben a rendszergazdai köznyelv is), egyszerűen SSL-nek nevezi, így most én is ilyen hanyagul hivatkozok csak rá.
Az SSL nyújtotta biztonsághoz három úton juthatsz el, és ezek más-más biztonsági szintet és kényelmet fognak jelenteni. A leggyakoribb, egyben legegyszerűbb és mint nyilván kitaláltad a legkevesebb biztonságot nyújtó variáns a saját magával aláírt tanúsítvány. Ez a biztonság helyett sokkal inkább a hamis biztonságérzet keltését szolgálja, bár bizonyos környezetben és kellő odafigyeléssel jelent valamennyi biztonságot.
A következő szint, ha saját tanúsító szervezettel rendelkezel házon belül (cégen belül). Ez kiváló megoldás olyan esetekre, ha az SSL-t használó szerverekhez kizárólag céges gépekről kapcsolódnak, melyekre fel tudod telepíteni a saját CA tanúsítványodat. Ilyenkor a biztonság már értékelhető szintű, mindössze a CA kulcsára kell nagyon vigyáznod.
A harmadik szint, ha egy független, megbízható hitelesítő szervezetet kérsz fel arra, hogy a szervered számára készítsen általa hitelesített tanúsítványt. Ennek a szerepe az, hogy ő lesz a közvetítő közted és az általad nem ismert, nem elérhető látogatók, felhasználók között. A legismertebb példája a https-t használó weboldalakat tanúsító cégek és a böngészőkbe beépített CA tanúsítványok (ezen cégek tanúsító tanúsítványai).
Nyilván létezik még más szint is, de ez a három a leggyakoribb. Most az elsővel és az utolsóval szeretnék egy kicsit foglalkozni. A saját CA-t kihagyom, mert az hosszabb magyarázatot igényel, mint ami most ebbe az írásomba belefér. A példa kedvéért készítsünk egy webszerver tanúsítványt!
Linux alatt ha SSL tanúsítványt készítesz, a legjobban a GNUTLS eszközeivel jársz. Debian és Ubuntu esetén a szükséges szoftverek telepítése nagyon egyszerű:
sudo apt-get install gnutls-bin
Ha a szoftverek megvannak, jöhet a kulcs elkészítése. Ez lesz az a fájl, amit soha, semmilyen körülmények között nem szabad másnak odaadni:
certtool --bits 2048 -p --outfile https.key
Ha a kulcs kész, a folytatás attól függ, hogy saját magával aláírt tanúsítványt készítesz, vagy csak egy kérelmet, amit eljuttatsz a megfelelő tanúsító szervezetnek. Lássuk először az utóbbit!
certtol -q --load-privkey https.key --outfile https.csr
Itt már jön pár kérdés is a programtól, mely a kérelembe kerülő információkról érdeklődik:
Generating a PKCS #10 certificate request... Country name (2 chars): HU Organization name: Linux Akadémia Kft. Organizational unit name: Locality name: Budapest State or province name: Budapest Common name: www.linuxakademia.hu UID: Enter a dnsName of the subject of the certificate: www.linuxakademia.hu Enter a dnsName of the subject of the certificate: linuxakademia.hu Enter a dnsName of the subject of the certificate: Enter the IP address of the subject of the certificate: 212.52.163.57 Enter the e-mail of the subject of the certificate: Enter a challenge password: Does the certificate belong to an authority? (y/N): n Will the certificate be used for signing (DHE and RSA-EXPORT ciphersuites)? (y/N): n Will the certificate be used for encryption (RSA ciphersuites)? (y/N): n Is this a TLS web client certificate? (y/N): n Is this also a TLS web server certificate? (y/N): y
A kitöltés során figyelj, hogy az adatokat helyesen add meg! Ezt a tanúsító szervezet ellenőrizni fogja és ha nem stimmel, új kérelmet kell beadnod. Az ország kétbetűs kódja és a szervezeted neve egyértelmű. A "locality", azaz helység név a szervezet székhelye szerinti helység (város) kell legyen. A "state or province" pedig Magyarországon a megye (vagy megyei jogú városnál ismét a város neve). A "common name" a szervered elsődleges neve. Ez biztos benne lesz a tanúsítványban és ha ez nem egyezik azzal, amit a felhasználó a böngészőbe beír, kapni fogja a kellemetlen hibaüzenetet. A "dnsName" mezőket kitöltheted, tanúsító szervezete válogatja, hogy ki engedi és ki nem ezen mező használatát. Itt adhatsz meg további neveket, amin "illetik" a szervered. Ha nincs több, üss egy entert magában. AZ "IP" cím hasonló opcionális célt szolgál. Ezt követően kizárólag a "TLS web server certificate" kérdésre válaszolj igennel!
Az egy elkészült https.csr fájlt (és csak azt!) juttasd el a tanúsító szervezetnek az általa kért módon. Tőle (ha minden rendben van), egy crt fájlt kapsz vissza, amit már használhatsz a webszervereden (a key fájllal együtt).
Ha magadnak írod alá, a folyamat egyszerűbb:
certtool -s --load-privkey https.key --outfile https.crt
A kérdések és a kitöltés módja hasonló az előző lépéshez. Ami itt extra, hogy meg kell adnod az érvényesség idejét. Az előző esetben ezt a kiállító adta meg és többnyire egy év. Általában javaslom, hogy magadnak is legalább évente újítsd meg a kulcsot is és a tanúsítványt is. Ez (is) javítja a biztonságot.
Ha már van egy tanúsítványod, annak adatait könnyen meg tudod nézni. Különösen a lejárati dátumra figyelj oda!
certtool -i --infile https.crt