StartSSL és Apache

Bevezető, certificate

Üdvözlök mindenkit!

Manapság egyre nagyobb súly tevődik az adatvédelemre és a titkosításra. Az utóbbi hónapok adatkezelési botrányai adták az ötletet, hogy megírjam ezt a cikket nektek.

Több megoldás is létezik arra, hogy biztonságossá tegyük a kapcsolatot weboldalunk és a látogatók között. Erre az egyik legjobb az SSL tanúsítvány. Több fajta létezik, ennek részleteibe nem szeretnék belefolyni, ezért szorítkozzunk két nagy csoportra, az ún. önaláírt és az ingyenes tanúsítványokra.

Kattintsatok a továbbra és többet is megtudhattok a certekről!

Mi az a certificate?

Kezdjük ott, hogy amikor megnyitsz egy URL-t (pl. http://logout.hu), akkor a tartalmak sima szövegként (plain text) utaznak a szerver és a kliens (böngésző) között. Ez lehetőséget ad arra, hogy harmadik fél is hozzáférjen (lehallgassa) a kommunikációhoz, ezáltal "ellopva" pl. a felhasználónevünket / jelszavunkat, elolvashatja e-mailjeinket ...stb.

A fenti probléma megoldására született az SSL - Secure Socket Layer (Protocol). A technológia tanúsítvány által hitelesíti és titkosítja a kommunikációt a szerver és a kliens között.

Tanúsítványt kétféleképpen szerezhetünk be.

Az egyik módja az ún. önaláírt tanúsítvány, ekkor saját magunknak generálunk certificate-et. Ezzel megvalósul ugyan a titkosítás, de mivel bárki generálhat magának, így a tulajdonosa nem hitelesített. Ekkor a böngésző felhívja a figyelmet erre, mint ahogy az a lenti képen is látható.

Erre ad megoldást a "fizetős" (vagy ingyenes) certificate, amikor egy erre szakosodott cég "garantálja" a tanúsítvány tulajdonosának kilétét. Ilyenkor a böngészőnk sem riaszt. A fizetős tanúsítványok skálája elég nagy, biztonsági szinttől függően, áruk a pár ezer forinttól az éves szinten több százezres kategóriáig terjed.

A továbbiakban egy alap ingyenes tanúsítványt fogunk beüzemelni egy weblapra a StartSSL ingyenes certjével.

StartSSL

Először is regisztrálnunk kell a StartSSL.com oldalon.
A bal oldali menüben kattintsuk a Control Panel menüpontra, utána pedig a Sign-up gombra. Itt értelemszerűen töltsük ki a szükséges mezőket. A regisztrációs procedúra végén egy tanúsítványt fog telepíteni a gépünkre, mellyel felhasználónév / jelszó nélkül tudunk majd a továbbiakban belépni a weblapra.

A Control Panel Validations Wizzard menüjében hozzá kell adnunk a domaint, melyre szeretnénk certet kiállítani.

Fontos, hogy a domainünkhöz legyen létrehozva egy az alábbi e-mail cimek közül:

Ezután itt megadjuk a mailben kapott megerősítő kódot.

Ezzel hozzáadtuk a domainünket, most következik a cert igénylése a Certificates Wizard menüben

Ezzel el is készült a privát kulcsunk, amit ssl.key néven mentsünk el. Fontos, hogy sima plain text formátumba mentsük le a textbox tartalmát.

Hozzáadjuk a domainünkhöz.

Kötelező megadnunk egy aldomaint, a www tökéletes lesz, az minden weblapnál létezik.

Most pedig legenerálja a tanúsítványt

Másoljuk ki az elkészült certet és mentsük el ssl.crt néven

Biztonsági okokból a legelőször legenerált privát kulcsunk (amit korábban ssl.key néven mentettünk le) titkosítva van, viszont a webszervernek a titkosítatlan verzió kell, ezt az alábbi paranccsal generálhatjuk le, miután felmásoltuk a fájlt a webszerverünkre (nálam /etc/apache/ssl/oldalam.hu). A StartSSL oldalán is van lehetőség a generálásra a Decrypt Private Key menüben. Ezután a szerverünkön nincs tovább szükség az ssl.key fájlra.

openssl rsa -in ssl.key -out private.key

Ezzel létrejön a private.key fájl, amit már az Apache is tud használni.

Szükségünk van még a StartSSL CA tanúsítványaira is, amit a képen látható menüben tudunk letölteni:

Összesen 4 fájlt, kell a szerverünkön a kívánt helyre másolnunk, ezek pedig a következők:

ca.pem - StartSSL CA tanúsítványa
private.key - A titkosítatlan privát kulcsunk
sub.class1.server.ca.pem - A StartSSL közbülső certje
ssl.crt - A tanúsítványunk

Apache config

Elérkeztünk arra a pontra, amikor beállítjuk a certeket az Apache siteu-nkhoz.

FONTOS: MIELŐTT BÁRMIT MÓDOSÍTOTOK KÉSZÍTSETEK BIZTONSÁGI MENTÉST A FÁJLOKRÓL

Szükségünk van az ssl Apache modulra, amit az alábbi paranccsal tudunk aktiválni

a2enmod ssl
service apache2 restart

Most meg kell mondanunk az Apache-nak, hogy a 443-as HTTPS porton is fogadja a kéréseket, ehhez szerkesszük a /etc/apache/ports.conf fájlt.

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
NameVirtualHost *:443
Listen 80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Szerkesszük az oldalunkhoz tartozó config fájlt
nano /etc/apache2/sites-enabled/oldalunk

Valahogy így kell majd kinéznie:

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

A configban az elérési utakra figyeljetek!
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem

Ezután indítsuk újra az Apacheot
service apache2 restart

A böngészőbe beírva a https://domainünk.hu címet máris titkosított a kapcsolat, melyet a böngészők a címsorban egy kis lakattal jeleznek.

Köszönöm a figyelmet, jó utánépítést!

Előzmények