Siguran sam da se dosta vas pita kako ljudi hostuju bezbedne sajtove koristeci Secure Sockets Layer (SSL). Ovo uputstvo ce vam pokazati kako da podesite web server sa SSL, PHP, i MySQL podrskom.
Prva stvar koju moramo da uradimo je da instaliramo Apache web server. Trenutno postoje dve glavne dostupne verzije: 1.3.x and 2.x. Ja cu predavati za 1.3x granu, ali je vecina koraka ista i za 2.x. Davacu i beleske za one koji su odabrali da koriste 2.x granu.
# cd /usr/ports/www/apache13-modssl # make install distclean
Apache se sada startuje pri podizanju sistema iz rc.conf tako da cemo dodati odredjeni unos:
# echo 'apache_enable="YES"' >> /etc/rc.conf # echo 'apache_flags="-DSSL"' >> /etc/rc.conf
Beleska: Za Apache2 korisnike: Potrebno je instalirati samo apache2 port, ali onda morate rucno da kreirate direktorijume za SSL Sertifikat i Kljuc.
# cd /usr/ports/www/apache2 # make install distclean # echo 'apache2_enable="YES"' >> /etc/rc.conf # echo 'apache2_flags="-DSSL"' >> /etc/rc.conf # mkdir /usr/local/etc/apache2/ssl.key # mkdir /usr/local/etc/apache2/ssl.crt # chmod 0700 /usr/local/etc/apache2/ssl.key # chmod 0700 /usr/local/etc/apache2/ssl.crt
# cd /usr/ports/databases/mysql41-server # make install WITH_OPENSSL=yes distclean # echo 'mysql_enable="YES"' >> /etc/rc.conf
Napravite pauzu dok se zavrsi preuzimanje, kompajliranje i instalacija. Za to je potrebno oko 45 minuta na K6-2 350MHz.
# cd /usr/ports/lang/php4 # make config
Bicete upitani da dodate podrsku za modul. Za sada odaberite podrsku za Apache.
# make install distclean # cd /usr/ports/lang/php4-extensions # make install distclean
Sada, kada dodjete do PHP konfiguracionog ekrana, samo cekirajte OpenSSL box i ostavite ostale vrednosti na podrazumevano, osim ako ne planirate instalaciju ostalih aplikacija, kao sto su IMP Webmail, koji zahteva ostale PHP module. Vreme je za jos jednu pauzu.
Trebalo bi da je PHP sada instaliran. Na kraju instalacije, trebate editovati Apache konfiguracioni fajl da dodate dve linije posle svih “LoadModule” linija za PHP podrsku.
# nano -w /usr/local/etc/apache/httpd.conf AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
Sada je vreme da kreirate vas licni sertifikat koristeci openssl. Sada, morate da shvatite da jedan server moze da podrzi visestruke sertifikate, ali samo jedan za slusajucu IP adresu. Dakle, ako vas server slusa na jednoj IP adresi, mozete imati samo jedan sertifikat za server. Svi vasi virualni domeni mogu da dele isti sertifikat, ali klijenti ce dobiti upozorenja kada se konektuju na bezbedni sajt gde se sertifikat ne poklapa sa imenom domena. Ako vas server slusa na vise IP adresa, vasi virtualni hostovi se moraju zasnivati na IP – ne na imenu. Ovo trebate uzeti u razmatranje kada kreirate vas sertifikat.
Idite u direktorijum u koji zelite da sacuvate vas sertifikat. Ja biram home direktorijum root korisnika. Onda cemo kopirati potrebne fajlove u tacan direktorijum kasnije. Na ovaj nacin imamo back up u slucaju da se nesto dogodi.
# cd ~ # openssl genrsa -des3 -out server.key 1024
Bicete upitani da unesete lozinku za ovaj key. Zapamtite je jer ce vam trebati za kasnije. Sada moramo napraviti Certificate Signing Request (CSR) iz kljuca kojeg smo upravo generisali. <cpde> # openssl req -new -key server.key -out server.csr</code>
Ukucajte vasu lozinku koju ste koristili jer je ovo mesto gde se ubacuju sve one zabavne informacije o sertifikatu, kao sto su vase ime i Fully Qualified Domain Name (FQDN). Obavezno ubacite vas FQDN za “Common Name” odeljak. Na primer, ako je sertifikat za https://webmail.domain.tld/, onda vase CommonName bi trebalo da bude webmail.domain.tld.
Dobro, vas sertifikat je spreman za potpisivanje. Sledeci koraci su da se samo-potpise sertifikat, ali i mozete platiti da ga potpisu Verisign ili Thawte.
# openssl x509 -req -days 365 -in /root/server.csr -signkey /root/server.key -out /root/server.crt
Ok, vas sertifikat je potpisan i validan za 365 dana, sto mozete da promenite ako zelite. Sada moramo da kopiramo fajlove u odredjeni direktorijum iz kog ce ih Apache koristiti.
# cp ~/server.key /usr/local/etc/apache/ssl.key/ # cp ~/server.crt /usr/local/etc/apache/ssl.crt/
Ako zelite da procitate vise o SSL Sertifikatima, mozete procitati FAQs na
http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html#aboutcerts.
Apache2 korisnici: Moraju se podesiti ispravne dozvole.
# chmod 0400 /usr/local/etc/apache2/ssl.key/server.key # chmod 0400 /usr/local/etc/apache2/ssl.crt/server.crt
VirtualHosts su zgodni zbog toga sto vam dozvoljavaju da hostujete mnogo domena na istom serveru i istoj IP adresi. Za ovaj primer, napravicemo tri VirtualHost unosa – jedan za http i dva za https (SSL).
U ovoj sekciji cemo menjati /usr/local/etc/apache/httpd.conf tako da ga sada mozete otvoriti u svom omiljenom editoru. Normalni VirtualHosts se mogu staviti na pocetak fajla zbog laskeg pristupa i trebaju se podesiti ovako:
ServerName domain.tld
NameVirtualHost 192.168.0.2:80
<VirtualHost 192.168.0.2:80>
ServerName domain.tld
ServerAlias www.domain.tld
ServerAdmin admin@domain.tld
DocumentRoot /path/to/website/files
</VirtualHost>
Sada na kraju httpd.conf, videcete gomilu linija koje se ticu SSL. Obacite sledecu liniju odmah ispred podrazumevanog VirtualnogHosta za SSL ovako:
NameVirtualHost 192.168.0.2:443 <VirtualHost _default_:443>
NameVirtualHost govori Apache-u da postoji nekoliko virtualnih hostova pod istim IP. Na kraju httpd.conf stavicete vase VirtualHosts odmah ispred .
<VirtualHost 192.168.0.2:443>
ServerName domain.tld
ServerAlias www.domain.tld
ServerAdmin admin@domain.tld
DocumentRoot /path/to/website/files
SSLEngine on
SSLCertificateFile /usr/local/etc/apache/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/server.key
</VirtualHost>
Sada, ako imate server koji slusa na drugoj IP adresi, mozete podesiti jos jedan sertifikat koji ce ta IP adresa koristiti. Onda, vas drugi VirtualHost moze izlgedati ovako:
<VirtualHost 192.168.0.3:443>
ServerName domain2.tld
ServerAlias www.domain2.tld
ServerAdmin admin@domain2.tld
DocumentRoot /path/to/website/files
SSLEngine on
SSLCertificateFile /usr/local/etc/apache/ssl.crt/server2.crt
SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/server2.key
</VirtualHost>
Ako primetite, SSLCertificateFile i SSLCertificateKeyFile su samo putanje do sertifikata i kljuca. Samo zapamtite da cete morati da koristite VirtualHosts na osnovi IP, kao sto smo mi uradili, ne na osnovu imena.
Apache2 korisnici: Sva vasa SSL konfiguracija je u posebnom fajlu u /usr/local/etc/apache2/ssl.conf tako da trebate da editujete to za vase SSL-aware VirtualHosts.
Vas server je sada spreman da startuje MySQL i Apache sa SSL.
# /usr/local/etc/rc.d/mysql-server.sh start # /usr/local/sbin/apachectl startssl
Kada pokrenete apache sa ssl, bicete upitani da ukucate onu lozinku koju ste trebali da zapamtite. Razlog za njeno ukucavanje svaku put kada se apache startuje je zbog toga sto je RSA privatni kljuc sacuvan u enkriptovanom formatu. Mozete izbaciti enkripciju da bi eliminisali upit za lozinkom ako zelite, ali nije preporucljivo iz bezbednosnih razloga. Ako ste uklonili enkripciju i neko koristi vas kompjuter, mogu uzeti vas sertifikat i izdavati se kao da ste to vi. Ali, ako vam smeta upit za lozinku i osecate se sigurnim da je vas server bezbedan, ovo su koraci za uklanjanje enkripcije:
# cd /usr/local/etc/apache/ssl.key # cp server.key server.key.orig # openssl rsa -in server.key.orig -out server.key
Usmerite vas omiljeni web citac na https://domain.tld i trebalo bi da imate 128-bitnu bezbednu konekciju. To je sve sto se tice podesavanja standardnog web servera sa SSL podrskom. Srecno hostovanje!
Autor: Jon LaBass
Izvor: http://www.bsdguides.org/guides/freebsd/webserver/apache_ssl_php_mysql.php