Vecina servisa na internetu putem weba zahtjeva unos korisnickog imena i lozinke. Kao sto znamo da obican
HTTP promet po portu
80 nije kriptiran lako ga je presresti i ocitati lozinku koja se prenosi putem tog protokola. Kako bismo zastitili prijenos podataka koristi se secure kanal prometa
HTTPS na portu
443, ali za prijenos koristi certifikat. Certifikat u nasem slucaju salje posluzitelj pomocu kojega klijent i posluzitelj dogovaraju kriptiranje.
Postupak generiranja i potpisivanja certifikata za
SSL apache2 posluzitelj na Linuxu slijedi u nastavku. Objasniti cemo sljedece:
- Generiranje samopotpisanih certifikata
- Dodavanje SSL podrske u apache2 posluzitelj
- Dodavanje SSL Virtualnog posluzitelja unutar apache2 servisa
Sve naredbe u nastavku je potrebno izvrsavati s pravima '
root' korisnika.
Kako biste mogli podesiti
HTTP ili
HTTPS server potrebno je instalirati apache posluzitelj, na
Debian/Ubuntu linuxu to ucinite naredbom:
apt-get install apache2
Nakon uspjesne instalacije mozemo na kreiranje certifikata.
Generiranje samopotpisanih certifikata:Na debianu postoji laksi nacin kreiranja certifikata sa naredbom
# apache2-ssl-certificate
ali druge distribucije nemaju namijenjenu naredbu stoga moramo to uciniti na tezi nacin (pjeske).
Prvo se pozicioniramo u direktorij u kojem zelimo generirati certifikate, npr:
cd /etc/apache2/
mkdir certs
cd certs/
Provjeru pozicije na sustavu mozete provjeriti naredbom
pwd.
Pocinjemo, generiranje privatnog kljuca napravimo na sljedeci nacin:
# openssl genrsa -des3 -out https_server.key 1024
Za vrijeme izvrsavanje naredbe vidimo sljedeci ispis:
Generating RSA private key, 1024 bit long modulus
..............++++++
.....++++++
e is 65537 (0x10001)
Enter pass phrase for https_server.key:
Verifying - Enter pass phrase for https_server.key:
Prilikom upita za kljuc (
pass phrase) mozete ostaviti
prazno kako bi nam olaksalo daljnju proceduru.
Sada trebamo generirati zahtjev za potpisivanjem certifikata eng. "Certificate Signing Request". Obavezno paziti prilikom unosa na polje “
Common Name”, potrebno je upisati vas ispravni
FQDN (
Fully Qualified Domain Name).
# openssl req -new -key https_server.key -out https_server.csr
Ispis naredbe izgleda ovako:
Enter pass phrase for https_server.key:
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 '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Berlin
Locality Name (eg, city) []:Berlin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:mavswelt.de
Organizational Unit Name (eg, section) []:Website
Common Name (eg, YOUR name) []:subversion.mavswelt.de
Email Address []:info@mavswelt.de
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Sada treba magnuti kljuc (
pass phrase) iz certifikata kako ga nebi morali upisivati svaki puta prilikom ponovnog pokretanja apache2 servisa:
# cp https_server.key https_server.key.org
# openssl rsa -in https_server.key.org -out https_server.key
Enter pass phrase for https_server.key.org:
writing RSA key
Sada smo spremni kreirati nas samopotpisani certifikat na sljedeci nacin:
# openssl x509 -req -days 365 -in https_server.csr -signkey \
https_server.key -out https_server.crt
izvodenje naredbe ispisuje
Signature ok
subject=/C=DE/ST=Berlin/L=Berlin/O=mavswelt.de/OU=Website/CN=subversion.mavswelt.de/emailAddress=info@mavswelt.de
Getting Private key
Dodavanje SSL podrske u apache2 posluzitelj:Posto smo sve certifikte generirali u datoteci
/etc/apache2/certs mozemo uciniti sljedece kako bismo aktivirali servis da odgovara na
HTTPS upite.
# cd /etc/apache2/sites-available
# cp /usr/share/doc/apache2/examples/ssl.conf.gz /etc/apache2/sites-available
# gunzip ssl.conf.gz
Ova naredba stvara
ssl.conf datoteku u folderu
/etc/apache2/sites-available. U tu datoteku cemo upisati bilo koji virtualni posluzitelj koji zahtjeva
HTTPS pristup (port 443) dok normalni
HTTP (port 80) promet ostaje definiran u
default datoteci.
Aktivacija SSLa u servisu apache2:
# a2ensite ssl.conf
# a2enmod ssl
Nakon izvrsavanja navdenih naredbi obavezno restartati posluzitelj na nacin
/etc/init.d/apache2 restart.
Ukoliko Vam se pojavi sljedeca greska prilikom ponovnog pokretanja posluzitelja:
# /etc/init.d/apache2 restart
Forcing reload of web server: Apache2 ... no pidfile found! not running?(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
znaci da u konfiguracijskim datotekama imate definiran pojam
Listen 443, a to smije biti upisamo samo u datoteci
/etc/apache2/ports.conf.
Dodavanje SSL Virtualnog posluzitelja unutar apache2 servisa:Potrebno je obrisati svu konfiguraciju vezanu za SSL u datoteci
/etc/apache2/sites-available/default te ju preseliti u novo stvorenu datoteku
/etc/apache2/sites-available/ssl.conf.
Izgled testne
ssl.conf datoteke (potrebno prilagoditi vasoj konfiguraciji):
<virtualhost *:443>
ServerAdmin root@mavswelt.de
ServerName subversion.mavswelt.de
DocumentRoot /usr/share/websvn/
<location />
Options FollowSymLinks
AllowOverride None
order allow,deny
allow from all
AuthType Basic
AuthName "Subversion Repository"
Require valid-user
AuthUserFile /etc/apache2/dav_svn.passwd
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/certs/https_server.crt
SSLCertificateKeyFile /etc/apache2/certs/https_server.key
<files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</files>
<directory "/usr/lib/cgi-bin">
SSLOptions +StdEnvVars
</directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /var/log/apache2/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</virtualhost>
Nakon svega opet potrebno restartati vas apache2 servis na nacin
/etc/init.d/apache2 restart.