  Kako instalirati Apache-SSL server?
  Dobrica Pavlinui, dpavlin@foi.hr
  verzija 0.5, 23. srpnja 1999.

  Kako do sigurnih https veza na nesigurnom Internetu.

  ______________________________________________________________________

  Sadraj


  1. Gdje se nalazi zadnja verzija ovoga dokumenta?

  2. Predgovor

  3. Gdje nai potrebne datoteke?

     3.1 mod_ssl
     3.2 OpenSSL biblioteka
     3.3 Apache

  4. Kompajliranje

     4.1 OpenSSL
     4.2 Apache i mod_ssl
     4.3 udne greke kod kompajliranja Apache-a. Ako vam se desi da kod kompiliranja Apache-a sa dodatnim modulima dobijete pogreku koja glasi:

  5. Izrada probnog certifikata

  6. Instaliranje servera

  7. Pokretanje i isprobavanje servera

  8. Konfiguriranje servera

  9. Mogui problemi

  10. Na kraju, disclaimer, zato ovaj dokument?

  11. Adrese na mrei (gotovi binary!)

  ______________________________________________________________________




    1998-07-05: Dobrica Pavlinui <dpavlin@foi.hr> v0.0

    1998-07-10: <dpavlin@foi.hr> v0.1 (1st public)

    1998-07-29: <dpavlin@foi.hr> v0.2 (apache-1.3.0 podrka,
     ispravljene greke)

    1998-08-26: <dpavlin@foi.hr> v0.21 dodane reference na mod_ssl

    1998-09-11: <dpavlin@foi.hr> v0.3 vlastiti certifikati za due od
     30 dana

    1998-11-19: <dpavlin@foi.hr> v0.4 iso8859-2, mod_ssl instalacija

    1999-07-17: Matej Vela <mvela@public.srce.hr> v0.41 pretvoren u
     Linuxdoc

    1999-07-23: dpavlin v0.5 mnoge promjene, ostavljen samo mod_ssl,
     kako dodati dodatne module (mod_rewrite, mod_auth_mysql) kod
     kompajliranja
    1999-09-21: dpavlin v0.6 udne greke kod kompajliranja Apache-a
     napokon objanjene


  11..  GGddjjee ssee nnaallaazzii zzaaddnnjjaa vveerrzziijjaa oovvooggaa ddookkuummeennttaa??

  Originalna lokacija ovoga dokumenta je promjenjena u
  <http://dokumentacija.linux.hr/Apache-SSL.html>.  Ovaj dokument je dio
  ldpHR projekta. Ostali formati nalaze se na adresi
  <http://dokumentacija.linux.hr/>.


  22..  PPrreeddggoovvoorr

  Apache SSL je bio preko tri godine jedini nain dobivanja secure http
  servera (https). Meutim, pojavio se mod_ssl koji se odlikuje istijim
  kodom i mmnnooggoo boljom dokumentacijom (koja ovaj mini-KAKO ini skoro
  nepotrebnim :-). Prva verzija ovoga dokumenta nastala iz potrebe da se
  objasne i priblie korisnicima tajne Apache-SSL patcheva koji su imali
  svoje probleme i bubice. mod_ssl je, sa druge strane, jednostavan za
  instaliranje, radi veoma dobro, i bez problema surauje sa ostalim
  modulima. Zbog toga ovaj dokumet od verzije 0.5 vie ne spominje
  originalne Apache-SSL patch-eve.


  33..  GGddjjee nnaaii ppoottrreebbnnee ddaattootteekkee??


  33..11..  mmoodd__ssssll

  Otii na  <http://www.modssl.org/> i skinuti zadnju verziju (ovdje e
  biti rijei o verziji mod_ssl-2.3.6-1.3.6)


  33..22..  OOppeennSSSSLL bbiibblliiootteekkaa

  Prijanje verzije SSL dodataka za Apache su se oslanjale na SSLeay
  biblioteku, dok noviji mod_ssl koristi OpenSSL biblioteku (ovdje je
  rije o verziji openssl-0.9.3a).

  Moete je nai na  <http://www.openssl.org/> ili u hrvatskoj na
  <ftp://ftp.linux.hr/pub/openssl/source/>.


  33..33..  AAppaacchhee

  Naravno, potreban Vam je i sam Apache web server. Njega moete nai na
  <http://www.apache.org/dist/>. Pazite na to da skinete odgovarajuu
  verziju (tj. onu za koju je predvien modul).


  44..  KKoommppaajjlliirraannjjee


  44..11..  OOppeennSSSSLL

  Otpakirajte arhivu OpenSSL-a, uite u njezin direktorij i pokrenite
  kompajrianje koritenjem:

  > tar xvfz openssl-0.9.3a.tar.gz
  > cd openssl-0.9.3a
  > sh config no-idea -fPIC
  > make



  Nakon dosta vremena (skoro najdueg), kompajliranje bi trebalo
  zavriti.


  44..22..  AAppaacchhee ii mmoodd__ssssll

  Otpakirajte arhivu Apache-a koritenjem:

  > tar xvfz apache_1.3.6.tar.gz


  Samo prevoenje i kompiliranje programa e uslijediti nakon to
  konfigurirate mod_ssl.


  > tar xvfz mod_ssl-2.3.6-1.3.6.tar.gz
  > cd mod_ssl-2.3.6-1.3.6
  > ./configure --with-apache=../apache_1.3.6 \
          --with-ssl=../openssl-0.9.3a \
          --prefix=/usr/local/apache \
          --enable-shared=ssl \
          --enable-module=rewrite \
          --add-module=../mod_auth_mysql.c



  Zadnja opcija (--add-module) je dodana samo zato da bi se pokazalo
  kako dodati neki vanjski modul ako kompajlirate mod_ssl sa Apache-om.
  Ukoliko Vam ne treba autorizacija u Apache-u koritenjem MySQL baze,
  slobodno izostavite --add-module.

  Predzadnja opcija (--enable-module=rewrite) ukljuuje rewrite modul
  koji je standardni dio Apache distribucije, ali se ne ukljuuje u
  standardnoj konfiguraciji. Kako je modul veoma koristan, svakako
  preporuujemo njegovo ukljuivanje i prouavanje dokumentacije o
  njemu.


  > cd ../apache_1.3.6
  > make




  44..33..  AAkkoo vvaamm ssee ddeessii ddaa kkoodd kkoommppiilliirraannjjaa AAppaacchhee--aa ssaa ddooddaattnniimm
  mmoodduulliimmaa ddoobbiijjeettee ppooggrreekkuu kkoojjaa ggllaassii:: uuddnnee ggrreekkee kkoodd kkoommppaajjlliirraannjjaa
  AAppaacchhee--aa..


  + doing sanity check on compiler and options
  ** A test compilation with your Makefile configuration
  ** failed. This is most likely because your C compiler
  ** is not ANSI. Apache requires an ANSI C Compiler, such
  ** as gcc. The above error message from your compiler
  ** will also provide a clue.
   Aborting!



  nemojte odmah oajavati. Naime, najvjerojatnije je greka u tome da se
  neki od modula nije mogao kompajlirati i linkati sa nekom od
  biblioteka.  Kako otkriti sa kojom? Otiite u src poddirektorij i
  pokrenite ./helpers/TestCompile -v sanity. To je zapravo shell skripta
  koja se pokree, a opcija -v e ispistati detaljniji opis pogreke.  U
  naem sluaju ona je bila:

  /usr/bin/ld: cannot open -lmysqlclient: No such file or directory



  to znai da je unutar modula u konfiguracijskom dijelu trebalo
  promijeniti putanju do mysqlclient biblioteke.


  55..  IIzzrraaddaa pprroobbnnoogg cceerrttiiffiikkaattaa

  [Ovdje bi trebao doi opis to je to cetrifikat, i zato je potreban
  -op.a.]

  Nakon to se apache server (nadam se uspjeno) kompajlira, moete
  napraviti svoj prvi certifikat koritenjem:

  > make certificate TYPE=custom



  Mislim da ete znati to treba upisati na koje pitanje. Naroito je
  vano da za Common Name unesete tono ime servera jer Vam u protivnom
  certifikat nee raditi. Ako Va server ima vie imena (CNAME-a),
  morate izabrati jedno za SSL veze i koristiti ssaammoo njega jer ete
  inae morati imati onoliko certifikata koliko elite imati imena
  servera. Dobar primjer za takvo ime je secure.proba.hr ili
  ssl.proba.hr.

  Drugo zanimljivo pitanje je da li elite zatititi svoje privatne
  kljueve.  Kako je to dobra ideja ukoliko postoji mogunost da netko
  dobije pristup raualu (npr. ako je raunalo koje posluuje https
  server viekorisniko) to ima i svojih nedostataka. Svaki puta kod
  pokretanja servera morati ete upisivati tu istu zaporku. To zapravo
  zani da se server nee moi startati bez da netko (tko zna zaporKu)
  ne bude pokraj njega.

  Za razliku od starijih verzija, ovdje razmatrana verzija sama kreira
  certifikat koji Vam vrijedi 365 dana.

  Ukoliko namjeravate ozbiljno koristiti https morati ete kupiti pravi
  certifikat. Jedan od dobrih adresa je <http://www.thawte.com/>


  66..  IInnssttaalliirraannjjee sseerrvveerraa

  Nakon svega ovoga, ovo je stvarno jednostavno:


  ______________________________________________________________________
  > make install
  ______________________________________________________________________



  Server e biti instaliran u /usr/local/apache.


  77..  PPookkrreettaannjjee ii iisspprroobbaavvaannjjee sseerrvveerraa

  Sada moete server i pokrenuti:

  > /usr/local/apache/bin/apachectl startssl




  Nakon to se server pokrenuo, na portu 8080 nalazi se obina, a na
  8443 https verzija vaih stranica. Kako Va certifikat (kojeg ste
  napravili sa make certificate) nije potpisala niti jedna organizacija
  koja se bavi izdavanjem digitalnih certifikata, morati ete u
  Netscape-u odluiti da elite prihvaati takve certifikate prvi puta
  kada pristupite svojim stranicama koritenjem
  https://secure.proba.hr:8443/.

  Vano je takoer napomenuti da e Inernet Explorer odbiti kontaktirati
  servere koji nemaju certifikat od nekog od priznatih CA-ova.


  88..  KKoonnffiigguurriirraannjjee sseerrvveerraa


  Sada moete promijeniti port 8443 u standardni SSL port 443, a port
  8080 prebaciti na standardni 80. Tako ete istom sadraju moi
  pristupati i preko http-a i https-a. To vjerojatno nniijjee ono to ste
  eljeli, ali konfiguriranjem virtualnih hostova rijeiti ete i to je
  zatieno, a to nije...


  99..  MMoogguuii pprroobblleemmii

  Uz malo sree, sve radi kako bi i trebalo. Meutim, moda ete naii
  na sljedee probleme (popis problema ukljuuje i starije verzije
  programa i/ili modula):


  1. Starije verzije apache-ssl-a su odbijale uitati certifikate kod
     pokretanja servera. To je dodue do danas sreeno (to se odnosi na
     servere verzije 1.1.3 sa SSLeay-om 0.6.x), ali nikad se ne zna. :-(

  2. Ukoliko ste koristili apache 1.2.6 i SSLeay 0.8.0, nee Vam raditi
     cache-ing. Zbog toga dodajte

     ___________________________________________________________________
     #define CACHE_SESSIONS          FALSE
     ___________________________________________________________________


     u apache_ssl.c da biste iskljuili tu opciju. Takoer, morate
     zakomentirati sve *Cache* direktive u SSLeay/conf/httpd.conf
     datoteci. Iako bi se po source kodu moglo zakljuiti da bi to
     trebalo raditi od verzije 0.8.0, nisam ba sasvim siguran u to.
     Naime, sa SSLeay-om 0.9.0b (i ukljuenim cache-ingom) je server pri
     startanju jednostavno bacio core-u.  Kod Apache 1.3.0 servera, sa
     druge strane radi cache-ing ako se koristi TCP socket, a ne port.
     To je probano sa SSLeay-om 0.8.0.

  3. Sve radi savreno, osim to httpsd ne eli raditi na portu 443?
     Pa, zapravo potrebno je pokrenuti server kao root (inae se ne moe
     bind-ati na portove manje od 1024). Ako jo uvijek ne radi,
     provjerite svoje firewall rule-ove!

  4. Ponekad se Apache ne eli kompajlirati zbog toga to ne moe nai
     neki include file ili biblioteku. To je est sluaj kada dodajete
     module.  mod_rewrite npr. koristi ndbm.h koji se na RedHat
     distribuciji nalazi u /usr/include/db1/ndbm.h a ne u
     /usr/include/ndbm.h gdje ga on oekuje. Takoer, pogledajte u
     mod_auth_mysql.c prije kompajliranja





  1100..  NNaa kkrraajjuu,, ddiissccllaaiimmeerr,, zzaattoo oovvaajj ddookkuummeenntt??

  Puno sree u koritenju Apache sa SSL-om i ukoliko imate
  nerazjanjenih problema moete kontaktirati autora na dpavlin@foi.hr.

  Takoer, uzmite u obzir da komercijalna rjeenja kotaju desetke
  tisua dolara, pa ovakva (iako potpuno funkcionalna) ipak imaju svoje
  bubice.

  Za svoje podatke, mogunost koritenja i eventualne gubitke zbog
  nemogunosti pristupa serveru odgovarate iskljuivo i samo Vi
  (std.disclaimer?).

  Moda se pitate zato sam uope iao pisati ovaj dokument? Pa, kako
  sam instalirao nekoliko apache-ssl servera shvatio sam (na najtei
  nain -- na vlastitoj koi) da cijela procedura nije jednostavna i bez
  problema.  Tako je nastala prva verzija ovoga dokumeta, u eli da
  drugi ne moraju prolaziti isti bolan put. Tokom vremena, alati su
  postajali sve bolji, a ovaj dokument sve dui. Na kraju sam odustao od
  podravanja Apache-SSL patch-a jer je mod_ssl bio mnogo ie i
  jednostavnije rjeenje.  Da danas instaliram prvi Apache sa mod_ssl-om
  ovaj dokumet vjerojatno nikada ne bi ni nastao.


  1111..  AAddrreessee nnaa mmrreeii ((ggoottoovvii bbiinnaarryy!!))

  "Ma sve je to super, ali ja sam korisnik Crvenog eiria (RedHat) i
  samo trebam rpm da instaliram to udo..."
  <ftp://ftp.replay.com/pub/replay/pub/redhat/i386/>





































