Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ PHP » LAMP Server einrichten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.09.2004, 09:29 Uhr
Pablo
Supertux
(Operator)


Na, endlich habe ich mir Zeit dafür genommen

Eine Website zu machen ist nicht schwer, HTML ist einfach und es gibt gute Tutorialen dafür. Die meisten kostenlosen Server wie Geocities bieten leider nur Support für htm bzw. html Dateien an. Wenn man aber eine dynamische Seite erstelle will, geht das meistens immer schief.

Gratis-Server mit ASP[1]/PHP/CGI/PERL Support ist sehr schwer zu finden, also bleibt als einzige Möglichkeit einen eigenen Webserver zu betreiben. Dabei sollte man sich fragen, welches Betriebsystem man benutzen soll. Ich werde darauf nicht eingehen, ich empfehle nur ein Unix-Derivat wie Linux oder BSD, Betreibsysteme, die damit sehr gut umgehen können.

Was ist LAMP

LAMP steht für Linux Apache MySQL PHP. Das ist die beliebteste Software Kombination, um einen eigenen Webserver zu betreiben. Dazu gehören auch andere Packete, die mehr Sicherheit und Leistung gewährleisten. Man kann auch andere Datenbankensystem benutzen wie LDAP oder einen anderen SQL Server. Man kann auch Perl statt PHP nehmen. Hier werde ich mich aber nur auf PHP konzentrieren.

Software & Libraries

Apache
* Website: www.apache.org
* Tarball: www.apache.org/dist/httpd/httpd-2.0.50.tar.gz
* Version: 2.0.50
* Beschreibung: Apache Webserver

PHP
* Website: www.php.net
* Tarball: www.php.net/distributions/php-5.0.1.tar.bz2
* Version: 5.0.1
* Beschreibung: Eingebettete Skriptsprache für dynamische Websites

MySQL
* Website: www.mysql.com/
* Tarball: ftp://ftp.free.fr/pub/MySQL/Downloads/MySQL-4.0/mysql-4.0.20.tar.gz
* Version: 4.0.20
* Beschreibung: Schneller multi-thread, multi-user SQL Datenbankserver

OpenSSL
* Website: www.openssl.org/
* Tarball: ftp://opensores.thebunker.net/pub/mirrors/openssl//source/openssl-0.9.7d.tar.gz
* Version: 0.9.7d
* Beschreibung: Toolkit für SSL v2/v3 und TLS v1

PostgreSQL (Optional)
* Website: www.postgresql.org/
* Tarball: ftp://ftp5.fr.postgresql.org/pub/mirrors/postgresql/source/v7.4.5/postgresql-base-7.4.5.tar.bz2
* Version: 7.4.5
* Beschreibung: Sophisticated Object-Relational DBMS.

OpenLDAP (Optional)
* Website: www.OpenLDAP.org/
* Tarball: ftp://ftp.u-aizu.ac.jp/pub/net/openldap//openldap-release/openldap-2.1.30.tgz
* Version: 2.1.30
* Beschreibung: LDAP Suite for application and development tools

MM-Libs
* Website: www.ossp.org/pkg/lib/mm
* Tarball: ftp://ftp.ossp.org/pkg/lib/mm/mm-1.3.0.tar.gz
* Version: 1.3.0
* Beschreibung: Shared Memory Abstraction Library

GD-Libs
* Website: www.boutell.com/gd/
* Tarball: www.boutell.com/gd/http/gd-2.0.28.tar.gz
* Version: 2.0.28
* Beschreibung: Eine graphische Bibliothek zur schneller Bilderzeugung.

jpeg-libs
* Website: www.ijg.org/
* Tarball: ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
* Version: 6b
* Beschreibung: Bibliothek zur Manipulation von JPEG Bilder

Libpng
* Website: www.libpng.org/
* Tarball: http://keihanna.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.5.tar.bz2
* Version: 1.2.5
* Beschreibung: Portable Network Graphics Bibliothek

FreeType
* Website: www.freetype.org/
* Tarball: http://ovh.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.5.tar.bz2
* Version: 2.1.5
* Beschreibung: Eine gute und portable Font-Engine

Zlib
* Website: www.gzip.org/zlib/
* Tarball: www.gzip.org/zlib/zlib-1.2.1.tar.bz2
* Version: 1.2.1
* Beschreibung: Standard (de)compression library


Tarballs
Du musst die Tarballs (Sources) runterladen, damit du die Packeten kompilieren kannst. Das wird gut 2 Stunden dauern, je nach Geschwindigkeit des Rechners. Wenn die Sources runtergeladen sind, erstelle ein Verzeichnis in /usr/src und kopiere alle Dateien dort, damit man die Übersicht behalten kann; Vorschlag


bash:

$ mkdir /usr/src/lamp



Es gibt 2 Arten von Dateien, die tar.gz (dabei ist tgz das gleiche Format) und tar.bz2 Dateien. Eine tar Datei ist eine Datei, die viele Dateien enthaltet. Mit einem Kompressionsalgorithmus wie wird diese tar Datei komprimiert, es gibt dabei 2 nützliche Programme dafür, gunzip (für .gz Dateien) und bunzip (für .bz2 Dateien). Aber man kann mit tar alles erledigen.

Um .tar.gz (und .tgz) Dateien zu dekomprimieren und öffnen, brauchst du:

bash:

$ tar xzf dateiname.tar.gz


x steht für "Dekompression", z für gunzip und f für Dateiname wird angeben.

Um .tar.bz2 zu dekomprimieren und öffnen, brauchst du:

bash:

$ tar xjpf dateiname.tar.bz2


j steht für bunzip und p für "erhalte die originalle Rechte"


Installation

Das erste was du machen musst, sind die Sources mit zu dekomprimieren. Wenn du alle Sources in /usr/src/lamp kompiert hast, und dort dekomprimiert hast, werden die Sources der Packete in /usr/src/lamp/packetname-version stehen.

Zlib
Im Sourceverzeichnis vom Zlib folgendes eingeben:


bash:

$ ./configure --prefix=/usr --libdir=/lib
$ make && make install



Freetype
Im Sourceverzeichnis vom Freetype folgendes eingeben:


bash:

$ ./configure --prefix=/usr
$ make && make install



GD-Lib
Im Sourceverzeichnis vom GD-Lib folgendes eingeben:


bash:

$ ./configure --prefix=/usr
$ make && make install



jpeg-libs
Im Sourceverzeichnis vom jpeg-libs folgendes eingeben:


bash:

$ ./configure --prefix=/usr --enable-shared --enable-static
$ make && make install



Libpng

Zitat von ./configure:

There is no "configure" script for Libpng-1.2.5. Instead, please
copy the appropriate makefile for your system from the "scripts"
directory. Read the INSTALL file for more details



Wenn man versucht configure auszuführen, wird diese Meldung kommen. Dabei muss man aber eine bereits geschriebene Makefile kopiert werden.

Im Sourceverzeichnis vom libpng folgendes eingeben:


bash:

$ cp scripts/makefile.linux makefile
$ make && make install



MM-Libs
Im Sourceverzeichnis vom MM-Lib folgendes eingeben:


bash:

$ ./configure --prefix=/usr
$ make && make install



MySQL
Ok, MySQL braucht schon einige Minuten, bis es kompiliert ist, bei mir so etwa 20-30 Minuten. Im Sourceverzeichnis vom MySQL folgendes eingeben:


bash:

$ ./configure --prefix=/usr \
--libexecdir=/usr/sbin \
--sysconfdir=/etc/mysql \
--localstatedir=/var/lib/mysql \
--with-raid \
--with-low-memory \
--enable-assembler \
--with-charset=latin1 \
--enable-local-infile \
--with-mysqld-user=mysql \
--with-extra-charsets=all \
--enable-thread-safe-client \
--with-client-ldflags=-lstdc++ \
--with-unix-socket-path=/var/run/mysqld/mysqld.sock \
--with-embedded-server
$ make && make install



Die Datenbanken von MySQL werden in der Zukunft unter /var/lib/mysql gespeichert werden. Die Konfigurationsdatei von MySQL befindet sich unter /etc/mysql. Hier geh eine Tasse Kaffe trinken oder Kuchen essen, weil das lange dauern kann

Einmal kompiliert und installiert, vergewissere dich, ob es Das Verzeichnis /var/lib/mysql gibt. Sonst musst du es erzeugen.


bash:

$ mkdir /var/lib/mysql



Dann (auch wenn es bereits existiert)

bash:

$ chmod 700 /var/lib/mysql
$ chown mysql:mysql /var/lib/mysql



Damit der MySQL Server automatisch gestaret wird [2]


bash:

$ cp support-files/mysql.server /etc/rc????



So, jetzt müssen wir eine Datenbank erzeugen. MySQL ist leer, und es gibt keinerlei Daten über Benutzer, Rechte, Datenbanken, etc. Da die Daten in Binär Format gespeichert werden, sind wir nicht in der Lage sie selber zu schreiben. MySQL bietet jedoch ein Tool an, mit dem eine generische Datenbank erstellt wird. Dabei müssen wir mysql_install_db ausführen, falls nicht vorhanden (im Pfad) in den sources gibt es ein Verzeichnis, wo sich das befindet: scripts/mysql_install_db.


bash:

$ mysql_install_db
Preparing db table
Preparing host table
Preparing user table
Preparing func table
Preparing tables_priv table
Preparing columns_priv table
Installing all prepared tables

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/etc/init.d/mysql start (you have to start the server first!)
/usr/bin/mysqladmin -u root -h supertux password 'new-password'
/usr/bin/mysqladmin -u root password 'new-password'
See the manual for more instructions.

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com



So, wie du da siehst, eine Datenbank namens mysql wurde erzeugt, sie speichert die ganze Information über die Datenbanken, Benutzer, Rechte, Hosts, usw. die du nachher bestimmen wirst. Eine zusätzliche Datenbank wird erzeugt namens test. Diese Datenabk ist eine spezielle Datenabk, wo jeder Benutzer (auch für anonymen binds) in die Datenbank schrieben kann. Sie dient mehr Testzwecken.

Damit wir ein Administration Passwort eingeben können, müssen wir den MySQL Server starten


bash:

$ /usr/bin/mysqld_safe &



Ganz wichtig! Vergiss das & nicht!

Jetzt müssen wir das Passwort setzten


bash:

$ /usr/bin/mysqladmin -u root -h localhost password dein_passwort_hier



So, jetzt müssen wir testen, ob alles läuft:


bash:

$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.0.20

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.00 sec)

mysql> quit
Bye



Wenn du das siehst (nachdem du dein Passwort und SHOW DATABASES; eingegeben hast) dann bist du mit MySQL fertig.

PostgreSQL
Im Sourceverzeichnis vom PostgreSQL folgendes eingeben:


bash:

$ ./configure --prefix=/usr
$ make && make install



Die Datenbanken werden in /var/lib/postgresql installiert


OpenLDAP
Im Sourceverzeichnis vom OpenLDAP folgendes eingeben:


bash:

$ ./configure --prefix=/usr --libexecdir=/usr/lib/openldap
$ make && make install




OpenSSL
Im Sourceverzeichnis vom OpenSSL folgendes eingeben:


bash:

$ ./configure --prefix=/usr --openssldir=/etc/ssl
$ make && make install




Apache
Im Sourceverzeichnis vom Apache folgendes eingeben:


bash:

$ ./configure --prefix=/var/www --enable-so --enable-auth-digest\
--enable-mime-magic --enable-ssl\
--enable-suexec --enable-cgi --enable-vhost-alias --with-z=/usr/lib --with-ssl=/usr
$ make && make install



Apache wird gebaut und in /var/www installiert. Dort befinden sich wichtige Verzeichnisse, wir bin conf und htdocs. In htdocs befinden sich html/php Dateien, die vom Webserver anzeigt.

PHP
Im Sourceverzeichnis vom PHP folgendes eingeben:


bash:

$ ./configure --prefix=/usr --with-apxs2=/var/www/bin/apxs --with-mysql \
--with-zlib --with-ftp --with-config-file-path=/var/www/conf --with-openssl \
--with-gd=/usr --with-ttf=/usr/lib --enable-gd-native-ttf --with-ldap --with-pgsql \
--with-mm --enable-track-vars=yes --enable-url-includes --enable-sysvshm=yes \
--enable-sysvsem=yes --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib \
--with-freetype-dir=/usr/lib
$ make && make install
$ cp php.ini-dist /var/www/conf/php.ini




Konfiguration

Alles wurde installiert. nun müssen wir unseren LAMP Server einrichten und starten. Die nötigen Configdateien befinden sich in /var/www/conf.

Apache
Öffne die Datei /var/www/conf/httpd.conf mit einem Texteditor deiner Wahl. Diese Datei wird automatisch von make install generiert und sehr gut dokumentiert, deshabl werde ich auf lange Erklärungen zu den einzelnen Punkten verzichten.

Das erste was wir machen werden, ist nachzuschauen, ob folgende Zeile vorhanden ist:


httpd.conf:

LoadModule php5_module        modules/libphp5.so



Mit dieser Zeile ist Apache in der Lage, PHP aufzurufen, damit sie .php Dateien von PHP geparst werden. make install von PHP muss diese Zeile schon eingefügt haben, vergewissere dich trotzdem.

Nun wollen wir einige Einstellungen des Servers ändern, Name & Email vom Administrator, Regel in den Verzeichnissen, VirtualHosts usw. Behalte die Datei /var/www/conf/httpd.conf offen.


httpd.conf:

ServerAdmin deine_adresse@server.de


Da muss du deine Email eintragen, wenn du willst.


httpd.conf:

ServerName www.example.com:80


Hier muss du dein Domain eintragen, von dem deine Seite erreichbar sein wird. Bir mir sieht das beispielsbeise so aus: ServerName supertux.homelinux.org:80


httpd.conf:

DocumentRoot "/var/www/htdocs"


DocumentRoot stellt fest, welches Verzeichnis das Web-Root Verzeichnis ist, d.h. das Verzeichnis, wo deine HTML/PHP Dateien sich befinden. Du kannst natürlich dieses Verzeichnis ändern, du musst aber darauf achten, dass die HTML/PHP Dateien des neuen Verzeichnnis Leserechte für die Gruppe "others" haben muss; ebenfalls müssen die Verzeichnisse Ausführbarerechte für die Gruppe "others" haben, weil der Apache Daemon als nobody:nobody läuft.


httpd.conf:

<Directory />
    Options FollowSymLinks
    AllowOverride AuthConfig
</Directory>



Achte auf die Änderung an der Zeile 3. Standardmäßig steht da AllowOverride none. Das teilt dem Apache mit, dass die Rechte auf die Web-Root Verzeichnis (und somit für die ganzen Verzeichnisse) in /var/www/conf/httpd.conf konfigurierbar sind. Mit AllowOverride AuthConfig kann der Benutzer seine eigene Rechte haben, d.h. die Geschichte mit den .htaccess Dateien klappt!

Wenn wir wollen, dass index.php angezeigt wird, wenn man ein Verzeichnis aufruft, dann

httpd.conf:

DirectoryIndex index.php index.html index.html.var



Die Reihenfolge ist es hier wichtig. Wenn man beispielsbeise die Siete www.dummyserver.com/directory in dem Webbrowser eingibt, wird meistens schon die richtige Seite angeziegt. Was passiert ist folgendes: Wenn keinen Dateinamen angegeben wird, sucht der Apache auf index.php, wenn nicht vorhanden auf index.html, wenn nicht vorhanen auf index.html.var usw. Wenn keine solche Dateien in diesem Verzeichnis enthalten sind, dann zeigt der Apache je nach Konfiguration eine Fehlermeldung oder die ganzen Dateien im Verzeichnis an.

So, der Apache weiß aber noch nicht, welche Dateien er dem PHP geben muss, damit sie von PHP interpretiert werden. Das wollen wir jetzt tun:

httpd.conf:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps



Du kannst natürlich andere Dateiänderungn nehmen. Davon rate ich aber ab, weil man sich dadurch böse Überraschungen erspart.

Wenn man Unterdomains haben will, angenommen man ist durch foo.com erreichbar und man will folgende Doamins erreichbar sein, www.foo.com, mail.foo.com, admin.foo.com, usw, braucht nicht jedes Mal einen neuen Apache Server zu starten. Man kann VirtualHosts haben, die dafür sorgen, die richtige Seite anzuzeigen, abhängig davon, ob der Benutzer www.foo.com oder mail.foo.com im Webbrowser eingegeben hat.

Folgendes muss auf keinen Fall fehlen:

httpd.conf:

NameVirtualHost *:80



Ein Beispiel bei mir:

httpd.conf @ supertux.homelinux.org:

NameVirtualHost *:80
<VirtualHost *:80>
    Servername supertux.homelinux.org
    DocumentRoot /var/www/public_docs
    ServerAdmin rex@supertux.homelinux.org
    ErrorLog /var/www/logs/error_log
    TransferLog /var/www/logs/access_log
</VirtualHost>
<VirtualHost *:80>
    Servername rex.supertux.homelinux.org
    DocumentRoot /home/rex/public_html
</VirtualHost>
<VirtualHost *:80>
    Servername dev.supertux.homelinux.org
    DocumentRoot /var/www/public_docs/dev
</VirtualHost>




SSL Verbindungen durch https einrichten

Die Datei /var/www/conf/ssl.conf enthält die Konfiguration für die SSL Verbindungen durch https. Man kann auch VirtualHosts mit SSL einrichten, es ist im Prinzip genau dasselbe. Wir brauchen dann (wenn möglich) für jedes VirtualHost ein Zertifikat. Man kann mittels OpenSSL eigene Zertifikate erstellen. Man braucht auch Signierte Zertifikate. Die meisten großen Server lassen ihre Zertifikate von anderen Gesselschaften signieren, wie VeriSign. Das kostet aber viel Geld. Wir werden deshalb unsere Zertifikate und Public Key selber erzeugen und signieren.


bash:

$ cd /var/www/conf
$ mkdir certificates
$ cd certificates



Wenn openssl installiert ist, dann muss dieses Verzeichnis geben /etc/ssl/misc/ mit folgendem Inhlat:

CA.pl CA.sh c_hash c_info c_issuer c_name der_chop

Wenn nicht, dann liegt es irgendwo anders. Wir werden mit


bash:

$ find / -iname CA.sh



suchen, und dann mit dem richtigen Pfad ausführen.


bash:

$ /etc/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create)
[ENTER]
Making CA certificate ...
Generating a 1024 bit RSA private key
........................++++++
..++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
[PASSWORD]
Verifying - Enter PEM pass phrase:
[PASSWORD]
-----
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]:Baden-Wuerttemberg
Locality Name (eg, city) []:Freiburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Supertux
Organizational Unit Name (eg, section) []:supertux.homelinux.org
Common Name (eg, YOUR name) []:supertux.homelinux.org
Email Address []:rex@supertux.homelinux.org



Wir rufen als erstes /etc/ssl/misc/CA.sh -newca auf. Das wird unser Zertifikat erzeugen. Wenn nach dem CA certificate filename gefragt wird, drücken wir ENTER, damit ein neues Zertifikat/Public Key erstellt wird/werden. Im Enter PEM pass phrase muss man ein Passwort eingeben, dass man nicht vergessen soll, weil man es für die Signierung braucht. Die nächste Felder sind quasi Pflichfelder, sie enthalten Information über deinen Server und über den Administrator, das ist wichtig, weil wenn eine https Verbdinung aufgebaut werden, untersuchen die meisten Webbrowser diese Daten. In Country Name darf man nur 2 Buchstaben eingeben, DE für Deutschland, CH für die Schwiez, AU für Österreich, usw. Bei dem Bundsland darf mein keine Sonderzeichen wie ä,ö oder ü benutzen. Ganz wichtig Unter Common Name muss der Name eingeben werden, mit dem dein Server erreicht wird, in meinem Fall supertux.homelinux.org. Die Email Adresse kannst du leer lassen, indem du nur einen Punkt eingibst.

Ein Verzeichnis wurde erzeugt, demoCA, welches das unter demoCA/cacert.pem und demoCA/private/cakey.pem gespeicherte Zertifikat unserer CA und den privaten Schlüssel enthält. Im nächsten Schritt wird das Serverzertifikat generiert.

Jetzt wollen wir ein Zertifikat für die Signierung erstellen:


bash:

$ openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem
Generating a 1024 bit RSA private key
...++++++
.................++++++
writing new private key to 'newreq.pem'
-----
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]:Baden-Wuerttemberg
Locality Name (eg, city) []:Freiburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Supertux
Organizational Unit Name (eg, section) []:supertux.homelinux.org
Common Name (eg, YOUR name) []:supertux.homelinux.org
Email Address []:rex@supertux.homelinux.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.



Im großen und ganzen wiederholen sich die Abfragen der CA-Erstellung. Die zusätzlichen Attribute können leer gelassen werden. Dieses geschieht durch die Angabe eines Punktes ".". Als Ergebnis existiert nun eine Datei newreq.pem im aktuellen Verzeichnis.

Nun muss der neuerzeugte Schlüssel noch von unserer CA signiert werden. Hierzu kommt das bereits von der CA-Erstellung bekannte Skript zum Einsatz:


bash:

$ /etc/ssl/misc/CA.sh -sign
Using configuration from /etc/ssl/openssl.cnf
8785:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=CA_default name=unique_subject
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Aug 31 19:17:39 2004 GMT
            Not After : Aug 31 19:17:39 2006 GMT
        Subject:
            countryName               = DE
            stateOrProvinceName       = Baden-Wuerttemberg
            localityName              = Freiburg
            organizationName          = Supertux
            organizationalUnitName    = supertux.homelinux.org
            commonName                = supertux.homelinux.org
            emailAddress              = rex@supertux.homelinux.org
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                83:1B:1D:0E:82:B0:FF:5B:7F:9F:1C:CC:DF:F1:C6:E5:F5:05:A8:53
            X509v3 Authority Key Identifier:
                keyid:E3:66:9E:E5:91:BD:4A:92:E2:7D:97:C5:0D:D9:DC:CC:5D:80:AF:67
                DirName:/C=DE/ST=Baden-Wuerttemberg/L=Freiburg/O=Supertux/OU=supertux.homelinux.org/CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org
                serial:00

Certificate is to be certified until Aug 31 19:17:39 2006 GMT (730 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=DE, ST=Baden-Wuerttemberg, L=Freiburg, O=Supertux, OU=supertux.homelinux.org, CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org
        Validity
            Not Before: Aug 31 19:17:39 2004 GMT
            Not After : Aug 31 19:17:39 2006 GMT
        Subject: C=DE, ST=Baden-Wuerttemberg, L=Freiburg, O=Supertux, OU=supertux.homelinux.org, CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:f5:1b:49:cc:a0:45:88:18:a3:7b:83:ad:87:4f:
                    e8:ea:ea:13:bf:8a:23:0f:d3:99:ae:f4:41:db:30:
                    2d:d0:64:f3:14:80:52:d4:d5:d8:55:a6:af:2c:24:
                    83:ad:76:22:2d:67:be:71:9f:69:40:70:6b:bd:08:
                    3c:2b:11:e9:ee:dc:7a:4a:1c:4d:5a:72:d9:e2:01:
                    08:a8:3c:fb:03:ec:a8:6b:7c:a2:26:8e:12:00:a3:
                    d1:0c:4a:ef:7d:69:65:1d:ce:d6:ad:70:22:af:95:
                    b3:ae:01:72:ba:2a:43:d4:45:ff:5b:21:b0:40:0d:
                    02:a4:b0:65:59:7a:68:66:77
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                83:1B:1D:0E:82:B0:FF:5B:7F:9F:1C:CC:DF:F1:C6:E5:F5:05:A8:53
            X509v3 Authority Key Identifier:
                keyid:E3:66:9E:E5:91:BD:4A:92:E2:7D:97:C5:0D:D9:DC:CC:5D:80:AF:67
                DirName:/C=DE/ST=Baden-Wuerttemberg/L=Freiburg/O=Supertux/OU=supertux.homelinux.org/CN=supertux.homelinux.org/emailAddress=rex@supertux.homelinux.org
                serial:00

    Signature Algorithm: md5WithRSAEncryption
        41:c5:04:0b:66:b5:d8:cc:a8:22:21:2f:dc:17:ad:d0:57:c0:
        f0:49:c6:5f:cc:26:8b:05:12:b7:79:6e:c9:38:0e:80:6b:43:
        0c:4b:f8:6e:c8:c8:92:b3:33:cf:e2:67:4a:58:64:87:ab:0e:
        09:30:fe:ef:45:cd:20:09:9b:b4:95:36:86:12:65:47:68:b8:
        f0:ed:4d:18:37:a4:47:72:43:00:53:24:c9:61:ce:d1:65:b7:
        eb:07:94:42:24:71:5a:4a:69:6d:16:c4:79:16:ae:08:35:58:
        ac:a1:32:5b:16:e5:cf:22:27:37:34:b7:23:1f:19:5e:da:a5:
        76:bf
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Signed certificate is in newcert.pem



Das erste Zertifikat ist demoCA/cacert.pem
newcert.pem ist das signierte Zertifikat
newreq.pem ist das Zertifikatschlüssel (key file)

demoCA kann man nun löschen, es wäre besser, die Datein entsprechen umzunenen, denn es ist empfehlenswert ein signierzes Zertifikat für jedes neues SSL-VirtualHost zu erstellen.

Mehr Infos dazu: http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html.en#keyscerts

Nun werden wir die SSL Virtual Domains konfigurieren. Öffnen die /var/www/conf/ssl.conf mit einem Texteditor deiner Wahl. Es gibt nur eine Kleinigkeit, die anders ist als normale HTTP Verbidnung.

Vor den ganzen <VirtualHost> (wie bei httpd.conf) müssen wir folgendes hinzufügen:

ssl.conf:

NameVirtualHost *:443



Es gibt <VirtualHost _default_:443> und dort werden wir einige Sache ändern:

ssl.conf:

DocumentRoot "/var/www/public_docs"
ServerName supertux.homelinux.org:443
ServerAdmin rex@supertux.homelinux.org
ErrorLog /var/www/logs/error_log
TransferLog /var/www/logs/access_log
SSLCertificateFile /var/www/conf/certificates/supertux.homelinux.org-cert.pem
SSLCertificateKeyFile /var/www/conf/certificates/supertux.homelinux.org-key.pem



wobei ich newcert.pem in supertux.homelinux.org-cert.pem und newreq.pem in supertux.homelinux.org-key.pem unbenannt habe.

Wenn ein neuer SSL VirtualHost hinzugefügt werden soll, dann soll vor </IfDefine> gemacht werden, Beispiel:


ssl.conf @ supertux.homelinux.org:

<VirtualHost *:443>
DocumentRoot "/home/rex/public_html"
ServerName rex.supertux.homelinux.org:443
ServerAdmin rex@supertux.homelinux.org
ErrorLog /var/www/logs/error_log
TransferLog /var/www/logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /var/www/conf/certificates/supertux.homelinux.org-cert.pem
SSLCertificateKeyFile /var/www/conf/certificates/supertux.homelinux.org-key.pem
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
    </Files>
<Directory "/var/www/cgi-bin">
   SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

CustomLog /var/www/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>



PHP

Jetzt werden wir PHP konfigurieren. PHP kann schon so laufen, aber es gäbe ein Paar Vorschläge von mir. Je härter PHP konfiguriert ist, desto sauberer werden die Skripts und vor allem hat man die Gewissheit, dass sie überall mit allen Konfigurationen laufen. Wenn du mit der aktuellen Konfiguration von PHP zufrieden bist, kannst du das überspringen.

Öffnen die Datei /var/www/conf/php.ini mit einer Texteditor deiner Wahl.


php.ini:

error_reporting = E_ALL
arg_separator.output = "&amp;"



Mit error_reporting = E_ALL bekommt man immer alle Fehler, wenn Variablen keinen Wert haben, wenn Variablen nicht intialisiert werden, usw.
Mit arg_separator.output = "&amp;" wird &amp; statt & geschrieben, wenn PHPSESSID an den URLs angehängt werden, somit XHTML konform.

Optional

php.ini:

url_rewriter.tags = ""



Somit hängt PHP niemals die PHPSESSID an, der Programmierer kümmert sich vollständig darum. Das gefällt mir so, wenn du aber willst, dass PHP dir dabei helft, dann lass es so wie es war.

Glückwunsch, der LAMP Server sollte jetzt laufen. PHP hat zusätzlich Support für LDAP und PostrgeSQL und natülrich Support für MySQL. Nun werden wir testen, dafür müssen wir den Server starten.


bash:

$ /var/www/bin/apachectl start



startet den Server nur am Port 80 (sofern du Listen 80 in httpd.conf hast, sonst das am angegebenen Port)


bash:

$ /var/www/bin/apachectl startssl



startet den Server nur am Port 80 und den durch SSL versicherten Server am Port 443, somit sind https Verbindungen möglich.


bash:

$ /var/www/bin/apachectl stop



stopt den Server.


Apache & MySQL beim Booten starten [2]

Da kann ich wirklich wenig helfen, denn der Initvorgang hängt von deiner Distribution ab. Das Skript /var/www/bin/apachectl ist bereits ein RC Skript, welches am Runlevel 5 gestartet werden kann/muss.

Beispiel bei SuSE (MySQL) (Im Source Verzeichnnis vom MySQL)


bash:

$ cp support-files/mysql.server /etc/rc.d/init.d/
$ chmod 744 /etc/rc.d/init.d/mysql.server
$ cd /etc/rc.d/init.d/rc2.d
$ ln -s ../mysql.server S20mysql.server
$ ln -s ../mysql.server K20mysql.server



Biespiel bei SuSE (Apache)

Code:
$ ln -s /var/www/bin/apachectl /etc/rc.d/apachectl
$ cd /etc/rc.d/rc2.d
$ ln -s ../apachectl S20apachectl
$ ln -s ../apachectl K20apachectl



Oder du kannst auch ein eigenes Skript erstellen, welches /var/www/bin/apachectl mit startssl aufruft.


Erreichbar, wenn du online bist

Eine der Probleme, die man hat, wenn man keine Standleitung hat, ist dass die IP sich ständig ändert. Und den ganzen Tag online sein, ist es auch nicht möglich, weil Internet Anbieter wie ·T··· Online nach 24 Stunden die Verbidung schließen. Deshlab ist es nicht möglich ein statische IP zu haben. Es gibt jedoch eine feine Lösung dafür.

DNS Server wie DynDNS bieten gratis statische und dynamische Domains. Man kann jeweils bis 5 gratis Domains haben und es gibt zahlreiche Tools, die nach IP Änderung die IP beim DNS Server vom Dyndns aktualisieren. Dyndns ist auch meiner Meinung nach das beste von allen, die Aktualisierungszeiten bei dynamische Domains beträgt etwa 3 bis 5 Sekunden und 3 bis 5 Minuten bei statische Domains. Zudem sind die Domainnames schön (vor allem für Linux fans) wie homelinux.org. Mein lieblingstool ist updateDD vom Philipp Benner.


Kurzer Einblink in die Arbeitsweise vom LAMP

Ich finde wichtig, dass du ein bisschen verstehst, wie ein LAMP Server funktioniert. Ich verzichte hiermit auf lange und komplizierte Erklärungen, ich werde das mit einfachen Worten erklären, zumindest werde ich versuchen.

Wenn man die Adresse http://supertux.homelinux.org/index.php aufruft, wird dein Webbrowser als erstes nach der IP Adresse fragen, die sich hinter supertux.homelinux.org verbirgt. Wenn der Webbrowser diese erfahren hat, dann baut er eine Verbidnung mit dem Server auf Port 80 auf und sagt dem Webserver, "gib mir den Inhalt der Datei /index.php". Der Webserver wird diese Datei suchen, wenn er sie findet, schaut er sich in der Konfiguration, ob er diese Datei liefern kann. Wenn der Benutzer Rechte dafür hat, wird der Webserver herausfinden, ob den Inhalt der Datei sofort leifern kann, oder ob er den Inhalt zuerst PHP schicken soll und dann das zurückliefern, was PHP zurückliefert.

Bei index.php lässt der Webserver PHP diese Datei parsen. Bevor der Inhalt der Ausgabe von PHP an den Webbrowser weitergeleitet werden kann, schickt der Webserver die Header Information. Das ist für den Webbrowser ganz wichtig, weil er somit erfährt, ob es sich um Text oder HTML Code oder ein Bild oder eine PDF Datei handelt, und je nach Dateityp muss er dementsprechend reagieren. Wenn die Header Information geschickt wird, dann leitet der Webserver den Inhalt der Ausgabe von PHP an den Webbrowser weiter. Der Webbrowser weiß dann, was er damit machen soll.




----------------------------------------------------------------------------------
[1] Active Server Pages, eine von Microsoft entwickelte eingebettete Skriptsprache , die mit dem MS-IIS läuft.
[2] Da das init-skript von der Distribution abhängt, gibt es kein generisches Verfahren. Hier ein Beispiel für SuSE

bash:

$ cp support-files/mysql.server /etc/rc.d/init.d/
$ chmod 744 /etc/rc.d/init.d/mysql.server
$ cd /etc/rc.d/init.d/rc2.d
$ ln -s ../mysql.server S20mysql.server
$ ln -s ../mysql.server K20mysql.server


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 14.02.2005 um 19:57 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: