suns
system network data news bugtraq
sexy unix security project
network > Apache+SSL+PHP uz OpenBSD (10) 24.10.2005 00:32

Taatad jaasaak ar to, ka Apache un mod_ssl jau ir ieksh OpenBSD baazes, turklaat tas jau defaultajaa tiek chrootots. Tas noziimee, ka nevajadzees chakareeties ar chrootoshanu, nebuus jaamocaas ar mod_ssl pielikshanu, tas viss jau ir. Vieniigais, ko vajadzees pasham pielikt ir PHP, bet zemaak redzeesi, cik tas ir vienkaarshi.

Apacim, kursh ir ieksh OpenBSD baazes, piemiit arii citas labas iipashiibas - tam ir daudz dazhaadu OpenBSD komandas uzlabojumu, kurus Apache komanda dazhaadu religjisku apsveerumu deelj nepienjeema, taapeec to var uzskatiit arii par droshaaku. Turklaat tiek izmantots 1.3.29 Apacis, kuram ir draudziigaaka licence. Pashu Apaci vari atrast ieksh /var/www direktorijas.


SSL.

Parasti cilveeki liek self-signed sertifikaatus, bet taa ir ljoti slikta ideja, jo gala lietotaajam nav nekaadas iespeejas paarliecinaaties, ka pa vidu nav iejaucies kaads rakaris (man in the middle). Var pirkt sertifikaatu no kaada CA, bet tas nebuut nav leets prieks, taapeec shajaa gadiijumaa izmantosim CAcert pakalpojumus - vinji piedaavaa bezmaksas parakstiit sertifikaatus, kas ir tieshi tas kas mums ir vajadziigs. Ja tev veel nav akaunta pie CAcert, tad ir iistais laiks regjistreeties, tas viss ir labi nodokumenteets vinju lapaa. Saaksim ar to, ka izveidosim direktoriju muusu sertifikaatiem:

# mkdir /var/www/conf/ssl

Tagad buus nepiecieshams uzgjenereet SSL atsleegu un csr (certificate signing request) prieksh CAcert, tas ir izdaraams sekojoshi:

# cd /var/www/conf/ssl
# openssl genrsa -out https.example.com.key 1024
# openssl req -new -key https.example.com.key -out https.example.com.csr

Te nu tev bija, mums ir csr fails, kuru vajag submittot vai aizsuutiit uz CAcert (protams, tikai peec tam, kad esi pieregjistreejies un pieraadiijis, ka tev pieder domains (tas notiek aizsuutot meilu uz hostmaster@example.com). Apmainjaa pret csr, CAcert tev atsuutiis servera sertifikaatu, kuru tev buus jaaieliek https.example.com.crt failaa.

Kad to esi izdariijis, vairs atliek tikai piekonfigureet httpd.conf failu, kuraa jaaaktivizee SSL, te buus piemeers tam, kas ir jaaliek ieksh /var/www/conf/httpd.conf:

<IfDefine SSL>
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
</IfDefine>
<IfModule mod_ssl.c>
    SSLPassPhraseDialog builtin
    SSLSessionCache         dbm:/var/www/logs/ssl_scache
    SSLSessionCacheTimeout 300
    SSLMutex  file:/var/www/logs/ssl_mutex
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    SSLLog      /var/www/logs/ssl_engine_log
    SSLLogLevel info
    SSLEngine on
    SSLOptions +StrictRequire
    SSLProtocol -all +TLSv1 +SSLv3
    SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
    SSLCertificateFile /var/www/conf/ssl/https.example.com.crt
    SSLCertificateKeyFile /var/www/conf/ssl/https.example.com.key
    SSLVerifyClient none
</IfModule>

Jaaatziist, ka tie nav defaultie mod_ssl settingi, esmu pie reizes nokonfigureejis, lai ljauj lietot tikai SSL3 vai TLS konnekcijas un atljauj tikai droshus kriptograafiskos algoritmus. Kad esi sho ievietojis httpd.conf failaa, tad pameegjini palaist Apaci un paarbaudiit, vai viss griezhaas normaali:

# apachectl startssl

Tas, principaa, arii viss, kas bija nepiecieshams, lai pieshkjiltu SSL. Ja starteejoties paraadaas kautkaadas kljuudas, tad meklee risinaajumu ieksh /var/www/logs/error_log faila.


PHP.

Tagad mees piekurbuleesim klaat PHP. Buus nepiecieshams lejuplaadeet php4-core paku, kuru tu vari atrast uz OpenBSD ftp servera, taalaak liekam klaat paku un skatamies, kas no taa iznaak:

# pkg_add php4-core-4.4.0p0.tgz

Buus nepiecieshamas veel dazhas pakas (libiconv, gettext un recode), bet ir liela varbuutiiba, ka taas jau ir uz tavas sisteemas. Ja nav, tad uzinstalee taas. Laikam pamaniiji, ka peec pakas instalaacijas, pkg_add uzrakstiija, ko nepiecieshams dariit taalaak. Taatad:

# /usr/local/sbin/phpxs -s
# cp /usr/local/share/examples/php4/php.ini-recommended /var/www/conf/php.ini

Un ieliec ieksh httpd.conf failaa sekojoshu rindu:

AddType application/x-httpd-php .php

Notestee PHP ar <? phpinfo() ?> paliidziibu, visticamaaak ka nebuus nekaadu probleem un viss straadaas, bet ja buus, tad griezies pie vecaa labaa error_log.

Taadaa pashaa veidaa vari likt klaat arii paareejos moduljus, piemeeram, lai pieliktu mod_security, ir nepiecieshams tik vien kaa shis:

# pkg_add mod_security-1.8.6p0.tgz
# /usr/local/sbin/mod_security-enable

Viss.

Vieniigais, ko tev vairs atliek izdariit, ir uzlikt, lai sisteema starteejoties palaizh Apaci, tamdeelj ieliec sekojoshu rindu ieksh /etc/rc.conf.local:

httpd_flags="-DSSL"

Par to, kaa nokonfigureet Apaci un PHP droshaaku, vari palasiit rakstaa, kuru publiceeju ieprieksh. Un, lai tu visu izdariitu pareizaak, te buus pieejami konfiguraacijas failu paraugi: httpd.conf un php.ini.

/ petruha - http://petruha.bsd.lv/ /
comments
maita:
te būs konfigs bez ssl: http://rhv.edu.lv/~maita/openbsd/httpd.conf

mod_security un mod_gzip tvīkojiet paši.
Gena:
Tendenciozs pasūtījuma raksts. Visu laiku tiek propogandēts openbsd un nepamatoti tiek noklusēts par linuk iespējām.
emmanuel:
Dari to ar Linuk!
BH:
Ja jau tad jau php.ini:
short_open_tag = Off
vot nesaprotu kapeec readfile aizliegts funkcijaas
maita:
nu, ja pavisam nopietni, tad safe_mode jau aizliedz gan exec() , gan system(), gan passthru() izpildi safe_mode_exec_dir ietvaros, bet shell_exec() ar safe_mode ir izslēgta pavisam. tāpēc pie disable_functions pietiktu norādīt tikai pārējās, kas nu tur paliek.

te vairāk: http://lv2.php.net/manual/en/features.safe-mode.functions.ph p
nikns <nikns(at)secure.lv>:
kaada dirsaa ellee atshkjiriiba self signed sertifikaatam no cacert signed sertifikaata, taa pat tev jaiegaumee/jasaglabaa fingerprints, jo cacert aw nav pie trusted CA ieksh paarluukiem.
petruha:
Dazhiem paarluukiem jau ir (no galvas nepateikshu, kuriem), turklaat sertifikaatu tu vari iehavot sheit: http://www.cacert.org/index.php?id=3
maita:
nikns, pavisam vienkārši, īsa atbilde: fucking ellē liela atšķirība.

garāka: domāju, ka man nav jāskaidro atšķirības starp "certificate authority" (CA), citiem vārdiem, pusi, kurai pieder "root certificate", un "self-signed" sertifikātiem. jā, diemžēl cacert vēl nav iekļauts mainstream pārlūkos, tāpēc tā lietderība vēl nevar līdzināties ar tādām CA kā VeriSign. bet līdz cacert saknes sertifikāts ir iekļauts lietotāju tik iemīļotajā IE, tas mums var noderēt kā "trusted third party", kas kriptogrāfijas pasaulē ir anyway labāk par "self-signed" sertifikātiem. ja vēlies uzināt, kā CACert aizsargā savus sertifikātus, tad te būs daži citātiņi:
maita:
ok, tagad man jāsadala koments padaļām, lol, petruha: "omment max length limit is 768 symbols!"

"Currently there is 2 main servers, one for webserver, one for root store, with the root store only connected to the webserver via serial cable, with a daemon running as non-root processes on each end of the serial listening/sending requests/info. [..] If the root store detects a bad request it assumes the webserver is compromised and shuts itself down. [..] " -- http://www.cacert.org/help.php?id=7
maita:
otrs nozīmīgs faktors, kas mums CACert liek izvēlēties "self-signed" vietā ir "web of trust" (ko tik plaši lietojam PGP gadījumā):

"If CAcert users verify each other they are building up the CAcert Web of Trust. That means that if you're trusting your friends and your friends trust other friends, and so on ... the web of trust builds up globally and everyone trusts everyone over a certain number hops." -- http://wiki.cacert.org/wiki/FAQ/AssuranceIntroduction

tā tad, lai viltotu CACert sertifikātu, uzbrukumā jāiesaista daudz vairāk cilvēku.
add comment*
author:
email:
piecpadsmit:
comment:


* ja iztiksi bez spama, offtopika un muljkjiibaam, iespeejams, ka tavs koments netiks izdzeests.
« back

valid xhtmlvalid css