Domeka
06.02.2012., 10:21:41 *
Welcome, Guest. Please login or register.

Login with username, password and session length
 
   Home   Help Search GoogleTagged Contact Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: Apache2 - Koko generirati i potpisati certifikate za SSL pristup  (Read 1019 times)
0 Members and 1 Guest are viewing this topic.
The MasteR
Administrator
Full Member
*****

Karma: +20/-0
Offline Offline

Gender: Male
Posts: 168



View Profile WWW
« on: 25.04.2009., 15:10:23 »

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:

Code:
apt-get install apache2

Nakon uspjesne instalacije mozemo na kreiranje certifikata.

Generiranje samopotpisanih certifikata:


Na debianu postoji laksi nacin kreiranja certifikata sa naredbom

Code:
# 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:

Code:
cd /etc/apache2/
mkdir certs
cd certs/

Provjeru pozicije na sustavu mozete provjeriti naredbom pwd.

Pocinjemo, generiranje privatnog kljuca napravimo na sljedeci nacin:

Code:
# openssl genrsa -des3 -out https_server.key 1024

Za vrijeme izvrsavanje naredbe vidimo sljedeci ispis:

Code:
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).

Code:
# openssl req -new -key https_server.key -out https_server.csr

Ispis naredbe izgleda ovako:

Code:
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:

Code:
# cp https_server.key https_server.key.org
# openssl rsa -in https_server.key.org -out https_server.key

Code:
Enter pass phrase for https_server.key.org:
writing RSA key

Sada smo spremni kreirati nas samopotpisani certifikat na sljedeci nacin:

Code:
# openssl x509 -req -days 365 -in https_server.csr -signkey \
https_server.key -out https_server.crt

izvodenje naredbe ispisuje

Code:
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.

Code:
# 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:

Code:
# 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:

Code:
# /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):

Code:
<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.
« Last Edit: 05.05.2009., 19:56:30 by The MasteR » Logged

Bavim se mreznom implementacijom - sistemac - Linux, CCNA, CCNP
Hrvoje Kusulja
Administrator
Full Member
*****

Karma: +2/-0
Offline Offline

Gender: Male
Posts: 107



View Profile WWW
« Reply #1 on: 25.04.2009., 15:11:23 »

Bilo bi dobro napomentu kako nije moguce se igrati s NameBased Virtualhostovima, zbog toga sto sam SSL radi drugacije.

Konkretnije, dodaje jos jedan sloj gdje se radi SSL enkripcija i to se bazira na IP adresi i Portu, no ne i na DNS imenu, tako da Apache nezna na temelju DNS imena koji ce Virtualhost odabrati.
Stoga da skratim, ako govorimo o jednom IP-u i jednom portu, onda svi namebased virtualhostovi moraju imati jedan certifikat.
Najbolje je onda izdati jedan certifikat za *.domena.com  i na taj nacin ste rjesili sve poddomene te domene.

Ukoliko imate jednostavnu situaciju (jedan ip, jedan port), moj prijedlog je da u /etc/apache2/ports.conf , izgleda ovako:

Code:
NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
# Ako je upaljen mod_SSL, onda da svi SSL sajtovi imaju isti certifikat (ako su na istom IP-u i istom portu)
    Listen 443
    NameVirtualHost *:443
    SSLCertificateFile /etc/apache2/ssl-certs/https_server.crt
    SSLCertificateKeyFile /etc/apache2/ssl-certs/https_server.key
</IfModule>

a u nekom virtualhostu dodate samo redak SSLEngine On, tj. evo primjer:
Code:
<VirtualHost *:80>
ServerName www.nesto.com
SSLEngine on
#...itd..
« Last Edit: 01.05.2009., 09:10:31 by Hrvoje Kusulja » Logged

IT ing. Hrvoje Kusulja (Facebook | Twitter | LinkedIn | DJ_Kukky (Myspace) |
TŠRB | CCNA | MCP | MCSA | MCTS | student TVZ - Spec. Informatike, 1.god |
DeltaBit d.o.o. | Crohoster - web hosting | Nodefusion - servers & advanced services
t-cat
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 25


View Profile
« Reply #2 on: 10.05.2009., 14:03:03 »

Ček, ako sam dobro shvatio, ovaj dio:

Quote
Sada treba magnuti kljuc (pass phrase) iz certifikata kako ga nebi morali upisivati svaki puta prilikom ponovnog pokretanja apache2 servisa:

Code:
# cp https_server.key https_server.key.org
# openssl rsa -in https_server.key.org -out https_server.key


Code:
Enter pass phrase for https_server.key.org:
writing RSA key

...se piše samo ako se u onom pret-prethodnom koraku postavi pass_phrase. Ili je taj korak nužan bez obzira jesmo li postavili passphrase u pret-prethodnom koraku. Znači ovom:
Quote
Pocinjemo, generiranje privatnog kljuca napravimo na sljedeci nacin:

Code:
# openssl genrsa -des3 -out https_server.key 1024

Za vrijeme izvrsavanje naredbe vidimo sljedeci ispis:

Code:
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.
Logged
The MasteR
Administrator
Full Member
*****

Karma: +20/-0
Offline Offline

Gender: Male
Posts: 168



View Profile WWW
« Reply #3 on: 10.05.2009., 15:17:39 »

Isreno nisam testirao sto se dogodi ako se key ne upise, ali ako se ne upise na pocetku onda korak za micanje kljuca nije potreban.

Ukoliko se napravi korak za micanje kljuca nije strasno, nece se nista strgati.
Logged

Bavim se mreznom implementacijom - sistemac - Linux, CCNA, CCNP
Pages: [1]   Go Up
  Print  

 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC | Sitemap Valid XHTML 1.0! Valid CSS!
Page created in 0.099 seconds with 22 queries.

Google visited last this page 04.02.2012., 11:57:43