Apache 2 - Besonderheiten mit open Suse

Hallo zusammen,

ich habe das Forum durchsucht und auch sonst im Internet geforstet, aber keine zufriedenstellende Information dazu bekommen, wie ich die Konfigurationsdateien so anpasse, das das System so läuft, wie ich mag.

Mein 1. Problem betrifft PHP. Es wird mittels apache2handler ausgeführt, doch ich möchte es gerne als cgi ausgeführt sehen. Ich habe verschiedene Anleitungen im Netz gefunden, doch keine führt zu Erfolg. Ich habe mich bemüht alle Pfadangaben so anzupassen, dass sie auf die Suse-Installation zutreffen, aber dies hat mich bislang nicht weiter gebracht.
Auch ist bei Suse ja die Konfiguration in viele Dateien aufgeteilt und ich bin mir nicht sicher, wo ich die Änderungen ab besten unterbringe.

Grundlegend möchte ich, dass die Skripte im normalen htdocs-Verzeichnisbaum liegen können und eben als cgi ausgeführt werden. Dennoch sollen innerhalb von PHP variablen wie $_SEVER’Scriptname’] und $_GET normal funktionieren.

Wie richte ich das ein?
Welche Pakete brauche ich, welche nicht wirklich?

Mein 2 Problem betrifft das aktiveren von SSL. Ich wüsste gerne welche Schritte ich der Reihe nach durchführen muss, damit alle Verzeichnisse auch mit SSL erreicht werden können.

Bin für jede Hilfe oder Hinweise auf opensuse spezifische Anleitungen, dankbar.
mit freundlichem Gruß,
Heinrich Krebs

Hallo,

bei der Einrichtung von SSL kann ich Dir weiter helfen.

1. Zertifikate generieren
Zunächst brauchst Du Zertifikate. Eine Möglichkeit wäre eine eigene CA aufzubauen, oder mit gensslcert schnell ein Zertifikat zu generieren. Für die erstgenannte Variante gibt es ein gutes HowTo: OpenSUSE Linux: Creating Self-Signed SSL Certificates | OpenSUSE Linux Rants

Am Ende sollte der Schlüssel des Zertifikats nach /etc/apache2/ssl.key/ kopiert werden (um einen automatischen Start von Apache zu ermöglichen ist dieser gegebenenfalls nicht durch ein Passwort geschützt) und das Zertifikat selber nach /etc/apache2/ssl.crt/ kopiert werden.

2. Einrichten Apache
Zuerst die Konfigurationsdatei unter /etc/sysconfig/apache2 anpassen. Hier die folgende Variable wie folgt anpassen:

APACHE_SERVER_FLAGS="SSL"

In dieser Datei werden zudem auch noch Startup-Optionen sowie die Module festgelegt, die Apache laden soll.

Dann unter /etc/apache2/vhosts.d/ das vhost-ssl.template nach vhost-ssl.conf kopieren und die Namen der Zertifikate anpassen. Zuletzt noch in der Datei /etc/apache2/listen.conf folgendes einfügen:

NameVirtualHost *:443

Dann apache neu starten und SSL sollte funktionieren, sofern ich nichts vergessen habe :wink:

Eine detaillierte Anleitung (auf Englisch) ist auch unter dem im Punkt 1 genannten Link zu finden.

Hoffe das hilft schon mal weiter

Danke für die Antwort.
Ich scheitere leider beim Zertifikate generieren bei dem Schritt:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

Denn ich bekomme eine Fehlermeldung zurück, die da lautet:

3082786440:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: CERTIFICATE REQUEST

Ich kann auch in yast2 den mod_rewrite nicht für apache2 finden.
Wie kann ich den den installieren ?

Ich kann auch in yast2 den mod_rewrite nicht für apache2 finden.
Wie kann ich den den installieren?

Am einfachsten gleich mit deinem Lieblings-Editor im File /etc/sysconfig/apache2 bei der Variablen

APACHE_MODULES=" ... "

rewrite hinzufügen. Dann den Indianer neu laden.

Vielen Dank, dass bringt mich schon mal ein Stück weiter…

Mit dem SSL hatte ich aber trotz allem keinen Erfolg bislang.

Im ersten Schritt sollte man ein CA root key generieren:

openssl genrsa -des3 -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
............................................++
.......................................................................................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

Wenn man den Schlüssel hat kann man das CA root Zertifikat erzeugen. Dieses steht quasi am Anfang der Certificate Authority und wird benutzt um alle weiteren Zertifikate zu signieren:

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
Enter pass phrase for ca.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]:Irgendwo
Locality Name (eg, city) ]:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:                  
Organizational Unit Name (eg, section) ]:
Common Name (eg, YOUR name) ]:www.mycoolca.de
Email Address ]:

Wenn man das so erhaltene root Zertifikat beispielsweise in Firefox importiert, dann kann Firefox alle mit ihm signierten Unterzertifikate verifizieren.

Nun im nächsten Schritt ist jetzt das eigentlich zu verwendende Zertifikat an der Reihe. In der Regel wird vom Antragsteller ein Certificaet Signing Request gestellt, d.h. man muss zuerst einen CSR generieren. Dazu braucht man wieder einen Schlüssel für den Server:

openssl genrsa -des3 -out server.key 4096
Generating RSA private key, 4096 bit long modulus
..............................++
.........................................++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

Jetzt kann man das CSR erstellen, das mit dem neu erstellten Schlüssel signiert wird:

openssl req -new -key server.key -out server.csr
Enter pass phrase for 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]:Irgendwo
Locality Name (eg, city) ]:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCoolRootCA
Organizational Unit Name (eg, section) ]:
Common Name (eg, YOUR name) ]:www.meinewebadresse.de
Email Address ]:

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

Dieses CSR wird normalerweise an eine allgemein anerkannte Zertifizierungsstelle gesendet. In diesem Fall aber sind wir das ja :wink: Also muss das Zertifikat nun mit den Root Zertifikat signiert werden:

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
Signature ok
subject=/C=DE/ST=Irgendwo/O=MyCoolRootCA/CN=www.meinewebadresse.de
Getting CA Private Key
Enter pass phrase for ca.key:

Das war jetzt zwar ein bisschen ausgeholt in die Erstellung einer eigenen CA, aber nun hat man die Zertifikate vorliegen :slight_smile:

Für die Benutzung im Apache kann der Schlüssel von der Passwortfreigabe befreit werden, ansonsten muss bei jedem Start das Passwort eingegeben werden:

openssl rsa -in server.key -out server.key.insecure
Enter pass phrase for server.key:
writing RSA key

Der so erhaltene Schlüssel, das Zertifikat und das Root Zertifikat kann nun so in der Apache Konfiguration verwendet werden. Zu diesem Zweck kopiert man die Datei /etc/apache2/vhosts.d/vhost-ssl.template nach
/etc/apache2/vhosts.d/vhost-ssl.conf, kopiert die Zertifikate und den Schlüssel an die entprechend vorgesehene Stelle unter /etc/apache2/ssl* (je nach Dateiendung) und editiert die /etc/apache2/vhosts.d/vhost-ssl.conf. Hierbei müssen dann das Schlüssel und die Zertifikate wie folgt eingebunden werden:

#   Server Certificate:
        #   Point SSLCertificateFile at a PEM encoded certificate.  If
        #   the certificate is encrypted, then you will be prompted for a
        #   pass phrase.  Note that a kill -HUP will prompt again.  Keep
        #   in mind that if you have both an RSA and a DSA certificate you
        #   can configure both in parallel (to also allow the use of DSA
        #   ciphers, etc.)
        SSLCertificateFile /etc/apache2/ssl.crt/server.crt
        #SSLCertificateFile /etc/apache2/ssl.crt/server-dsa.crt

        #   Server Private Key:
        #   If the key is not combined with the certificate, use this
        #   directive to point at the key file.  Keep in mind that if
        #   you've both a RSA and a DSA private key you can configure
        #   both in parallel (to also allow the use of DSA ciphers, etc.)
        SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
        #SSLCertificateKeyFile /etc/apache2/ssl.key/server-dsa.key

        #   Server Certificate Chain:
        #   Point SSLCertificateChainFile at a file containing the
        #   concatenation of PEM encoded CA certificates which form the
        #   certificate chain for the server certificate. Alternatively
        #   the referenced file can be the same as SSLCertificateFile
        #   when the CA certificates are directly appended to the server
        #   certificate for convinience.
        SSLCertificateChainFile /etc/apache2/ssl.crt/ca.crt

Wenn nun die restlichen Einstellungen wie bereits geschildert ebenfalls vorgenommen werden, dann sollte Apache mit SSL einsatzbereit sein :slight_smile:

Hoffe das hilft etwas weiter weiter

Ok, die Zertifikaterstellung hat geklappt.

Wenn ich den Server mit https aufrufe erhalte ich jedoch den Fehler:
ssl_error_rx_record_too_long

Hallo,

das ist schon einmal positiv. Es sieht so aus, als wäre ssl nicht richtig aktiviert beim Start. Bitte noch mal in die in der /etc/apache2/vhost-ssl.conf angegebenen logs durchsuchen. Eventuell könnte es an einem nicht entfernten Passwort des Schlüssels liegen, man sollte als Schlüssel dieseen server.key.insecure verwenden:

#   Server Private Key:
        #   If the key is not combined with the certificate, use this
        #   directive to point at the key file.  Keep in mind that if
        #   you've both a RSA and a DSA private key you can configure
        #   both in parallel (to also allow the use of DSA ciphers, etc.)
        SSLCertificateKeyFile /etc/apache2/ssl.key/server.key.insecure

Es könnte es aber auch an etwas anderem liegen :stuck_out_tongue: … Die Logs sollten aber Aufschluss geben.

Hoffe das hilft weiter

Ok, ist bin soweit, dass ich eigene Dateien in vhosts.de/ gestrichen habe und stattdessen alle vhosts in vhosts.d/ip-based_vhosts.conf eingetragen habe.
Seitdem ist dieser Fehler weg, aber Firefox 6.0.1 meldet nun sec_error_bad_signature, obwohl ich das ca.crt wie angegeben in Firefox importiert habe.

EDIT: Auch IE8 erlaubt die Verbindung nicht, ist allerdings hinsichtlich des Fehlers weniger aussagefreudig. Ich habe das Zertifikat vor dem Test auch in Windows importiert.

Hallo,

die Bedingung mehrere Virtual Hosts zu haben macht das ganze natürlich etwas schwieriger, das muss ich bei den bisherigen Posts wohl übersehen haben :stuck_out_tongue:

Zuerst kann man Pro IP nur eine SSL Zertifikat verwenden. Im Klartext bedeutet dies, dass man sich entscheiden muss, für welche Webaddresse das Zertifikat gültig sein soll. Für diese eine Kann die Warnung wegen des Zertifikates wie beschrieben ausgeschaltet werden. Für alle anderen gibt es keine Möglichkeit die Browserwarnung zu unterdrücken. SSL kann man für diese allerdings trotzdem einsetzen.

Bei der Konfiguration muss in der /etc/apache2/listen.conf unbedingt die Zeile

NameVirtualHost *:443

eingetragen werden.

Des weiteren sollte in der vhost.conf der die folgenden Einstellungen korrekt sein:


<VirtualHost HOSTIP:443>

        #  General setup for the virtual host
        #ServerName www.example.com:443
        #ServerAdmin webmaster@example.com
        ServerName https://youcooldomain.de

Der Servername muss mit dem Common Name des Zertifikates übereinstimmen.

Wenn man tatsächlich mehrere Domains mit ein und demselben SSL Zertifikates verwenden möchte, ist es sinnvoll mehrere vhosts nach dem selben Schema anzulegen. Die Warnung von apache2 in den Logs diesbezüglich kann man ignorieren.

Hoffe dies hilft erst einmal etwas weiter.

Ok, danke für den Hinweis, ich werde dass nach meinem Urlaub gleich nochmal ausprobieren.

Bis dahin wollte ich mit auth_basic bzw. auth_digest ein Verzeichnis schützen, leider sind die tools (htpasswd / htdigest) scheinbar nicht bei suse inbegriffen. Gibt es einen anderen Weg das Problem zu lösen?

Auch der mod_auth_sql scheint nicht in yast aufzutauchen…

Hallo,

die tools sind im Paket apache2-utils und heißen htdigest2 und htpasswd2. Mit diesen sollte es problemlos möglich sein den Passwortschutz zu aktivieren. Das Module mod_auth_sql sollte über ein Repository aus dem Build Service software.opensuse.org: Suchergebnisse verfügbar sein.

Hoffe das hilft weiter

Okay, htdigest2 hat funktioniert.

Dennoch würde mich interessieren, wie ich denn diesen Build-Service als Repository über yast einbinden kann. Ich habe verschiedene URLs ausprobiert, aber die Hilfe hier auf der openSuse Seite brachte mich da auch nicht weiter, außerdem scheint sie nur bis Version 11.3 zu reichen.

Wenn Du auf software.opensuse.org ein Paket findest und von da per 1-Click-Install installierst, trägt Yast das entsprechende Repo fest ein. Wenn also Updates bereitstehen, werden sie beim nächsten Software-Update per Yast oder zypper automatisch berücksichtigt.
Beantwortet das die Frage?

Gruß
Uwe

Äh, ja, ich habe keine graphische Oberfläche und arbeite auf einem Strato-V-Server über ssh, daher ist das mit dem 1-Click-Install nicht so einfach.
Ich kann zwar das rpm runterladen, dann auf den Server kopieren und mittels dem rpm Befehl installieren, aber mir wäre es lieber, wenn ich das repository von Hand in yast eintragen könnte und dann das Paket in der normalen Suche finde und installiere.

EDIT: ich kann auch mit lynx auch die 1-Klick-Instllation gehen, aber der läd dann nur was runter, wie Windows-Firefox auch. Was mache ich mit dieser ymp-Datei, um sie ins yast zu bekommen?

Hallo,

man kann one click install auch über die Kommandozeile aufrufen, also z.B.:


OCICLI http://opensuse-community.org/nvidia.ymp

Alternativen hierzu wären das ncurses Interface (yast unter ssh eingeben) Software → Software Repositories die Repositroies verwalten und das neue Repository hinzufügen, oder zypper. Für das Apache2 Modules Repositlry könnte man zum Beispiel auch folgendes Kommando verwenden, um das Repository hinzuzufügen:


zypper ar --refresh -r http://download.opensuse.org/repositories/Apache:/Modules/openSUSE_11.4/Apache:Modules.repo

Hoffe das hilft weiter

Ich hatte schon die ncurses Version von yast benutzt, aber ich habe das Repository obwohl er es akzeptiert hat wohl nie richtig angegeben denn unter software->software installieren oder löschen ist das paket danach dennoch nicht aufgetaucht.

Aber jetzt mit dem zypper Befehl hat es geklappt. Vielen Dank.

Werde mich dann nach dem Urlaub wieder an das SSL Problem rantasten.