14.9. OpenSSL
Vissza | 14. fejezet - Biztonság | Előre

## 14.9. OpenSSL

Írta: Rhodes, Tom.

A FreeBSD-hez adott OpenSSL az egyik olyan tényező, amit a legtöbb felhasználó figyelmen kívül hagy. Az OpenSSL egy titkosítási réteget nyújt a hagyományos kommunikációs csatorna felett, így rengeteg hálózati alkalmazásba és szolgáltatásba bele lehet szőni.

Az OpenSSL felhasználható többek közt a levelező kliensek titkosított hitelesítésére, hitelkártyás fizetések weben keresztüli lebonyolítására alkalmas, és még sok minden másra. Sok port, köztük a www/apache13-ssl és a mail/sylpheed-claws is felajánlja az OpenSSL felhasználását.

### Megjegyzés:

A legtöbb esetben a Portgyűjtemény megpróbálja lefordítani a security/openssl portot, hacsak a `WITH_OPENSSL_BASE` változót határozottan a "yes" értékre nem állítjuk.

A FreeBSD-hez mellékelt OpenSSL ismeri a Secure Sockets Layer v2/v3 (SSLv2/SSLv3) és Transport Layer Security v1 (TLSv1) hálózatbiztonsági protokollokat, és általános célú titkosítási könyvtárként is alkalmazható.

### Megjegyzés:

Noha az OpenSSL ismeri az IDEA algoritmusát is, az Egyesült Államokban érvényben levő szabadalmak miatt alapértelmezés szerint nem engedélyezett. A használatához el kell olvasni a hozzá tartozó licencet, és ha elfogadjuk a benne foglaltakat, akkor állítsuk be a `MAKE_IDEA` változót a `make.conf` állományban.

Az OpenSSL-t leginkább a szoftverek tanúsítványainak elkészítéséhez használják. Ilyen tanúsítvánnyokkal lehet szavatolni, hogy az érte felelős cég vagy egyén valóban megbízható és nem szélhámos. Amennyiben a kérdéses tanúsítványt nem vizsgálta be valamelyik "tanúsítványok hitelesítésével foglalkozó hatóság" (Certificate Authority, vagy CA), akkor erről általában kap egy figyelmeztetést a felhasználó. A tanúsítványokat hitelesítő cégek, mint például a VeriSign, írják alá ezeket a tanúsítványokat és ezzel érvényesítik az egyes cégek vagy egyének megbízhatóságát. Ez ugyan pénzbe kerül, de használatuk egyáltalán nem is kötelező. Azonban az átlagosnál paranoidabb felhasználók számára megnyugvást jelenthet.

### 14.9.1. Tanúsítványok előállítása

A tanúsítványok létrehozására a következő parancs áll rendelkezésre:

    # openssl req -new -nodes -out req.pem -keyout cert.pem
    Generating a 1024 bit RSA private key
    ................++++++
    .......................................++++++
    writing new private key to 'cert.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:országnév (kétbetűs kóddal)
    State or Province Name (full name) [Some-State]:állam vagy tartomány teljes neve
    Locality Name (eg, city) []:település neve
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:szervezet neve
    Organizational Unit Name (eg, section) []:szervezeti egység neve
    Common Name (eg, YOUR name) []:általános név (hálózati név!)
    Email Address []:e-mail cím

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:VALAMILYEN JELSZÓ
    An optional company name []:egy másik szervezet neve

Az adatok bekérésére előtt megjelenő figyelmeztető üzenet fordítása:

    Itt a tanúsítvány igénylésével kapcsolatos információkat kell
    megadnunk. Itt egy ún. "ismertetőnevet" (Distinguished
    Name, DN) kell megadnunk. Ezen kívül van még néhány más mező is, de
    ezeket akár üresen is hagyhatjuk. Néhány mezőnek van alapértelmezett
    értéke, de ha oda egy pontot írunk, akkor kitöröljük.

A "Common Name" mezőnél ellenőrzési okokból egy hálózati nevet, tehát a szerverünk nevét kell megadnunk. Ha nem így járunk el, akkor lényegében egy használhatatlan tanúsítványt kapunk. További opciók is elérhetőek, mint például a lejárati idő (expire time) megadása, a titkosítási algoritmus megváltoztatása stb. Ezek teljes listája megtalálható az openssl(1) man oldalon.

Az előbbi parancs kiadása után két állománynak kell létrejönnie az aktuális könyvtárban. A tanúsítványkérést, vagyis az `req.pem` állományt kell eljuttatnunk a tanúsítványok hitelesítésével foglakozó szervhez, aki majd érvényesíti az imént megadott adatainkat. A második, `cert.pem` nevű állomány a tanúsítványhoz tartozó privát kulcs, amit semmilyen körülmények között sem szabad kiadnunk. Ha ez mások kezébe kerül, akkor el tudnak játszani bennünket (vagy a szerverünket).

Amikor a hitelesítő szerv aláírása nem feltétlenül szükséges, akkor készíthetünk egy saját magunk által aláírt tanúsítványt is. Ehhez először is generálnunk kell egy RSA-kulcsot:

    # openssl dsaparam -rand -genkey -out saját_RSA.kulcs 1024

Most pedig készítsünk el a hitelesítő szerv kulcsát is:

    # openssl gendsa -des3 -out hitelesítő.kulcs saját_RSA.kulcs

Ezzel a kulccsal most gyártsunk le egy tanúsítványt:

    # openssl req -new -x509 -days 365 -key hitelesítő.kulcs -out új.tanúsítvány

Ekkor két új állomány keletkezik a könyvtárunkban: a hitelesítő szerv aláírása, a `hitelesítő.kulcs` és maga a tanúsítvány, az `új.tanúsítvány` állomány. Ezeket tegyük az `/etc` könyvtáron belül egy olyan könyvtárba, amelyet csak a `root` tud olvasni. A `chmod` paranccsal állítsunk be rá 0700-as kódú engedélyeket.

### 14.9.2. Példa a tanúsítványok használatára

Mire is jók ezek az állományok? Például kitűnően alkalmazhatóak a Sendmail levelező szerverhez beérkező kapcsolatot titkosítására. Így lényegében felszámoljuk minden olyan felhasználó titkosítatlan módon zajló hitelesítését, aki a helyi levelező szerveren keresztül küldi a leveleit.

### Megjegyzés:

Ez általában nem a legjobb megoldás, mivel egyes levelező kliensek hibát jeleneznek a felhasználónak, ha nem rendelkezik a tanúsítvánnyal. A tanúsítványok telepítésével kapcsolatban olvassuk el a szoftverhez adott leírást.

A helyi `.mc` állományba ezeket a sorokat kell beletenni:

    dnl SSL Options
    define(`confCACERT_PATH',`/etc/certs')dnl
    define(`confCACERT',`/etc/certs/új.tanúsítvány')dnl
    define(`confSERVER_CERT',`/etc/certs/új.tanúsítvány')dnl
    define(`confSERVER_KEY',`/etc/certs/hitelesítő.kulcs')dnl
    define(`confTLS_SRV_OPTIONS', `V')dnl

Itt a `/etc/certs/` az a könyvtár, amit tanúsítványok és kulcsok helyi tárolására használunk. Végezetül még újra kell generálnunk a helyi `.cf` állományokat. Ezt a `/etc/mail` könyvtárban a `make install` parancs kiadásával könnyen elvégezhetjük. Miután ez megtörtént, akkor Sendmailhoz tartozó démont a `make restart` paraméterével indíthatjuk újra.

Ha minden jól ment, akkor a `/var/log/maillog` állományban nem találunk egyetlen hibaüzenetet sem, és a Sendmail is megjelenik a futó programok között.

A telnet(1) segédprogrammal így probálhatjuk ki a levelező szervert:

    # telnet example.com 25
    Trying 192.0.34.166...
    Connected to example.com.
    Escape character is '^]'.
    220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
    ehlo example.com
    250-example.com Hello example.com [192.0.34.166], pleased to meet you
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE
    250-DSN
    250-ETRN
    250-AUTH LOGIN PLAIN
    250-STARTTLS
    250-DELIVERBY
    250 HELP
    quit
    221 2.0.0 example.com closing connection
    Connection closed by foreign host.

Ha itt megjelenik a "STARTTLS" sor, akkor mindent sikerült beállítanunk.

Vissza | Fel | Előre
14.8. Kerberos5 | Főoldal | 14.10. VPN IPsec felett

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.