Apache2 + SSL einrichten

Lord_Icon

Member
Hi,

ich benötige ein SSL Cert. für ein XTC Shop.

Leider erhalte ich "Seite kann nicht angezeigt werden" wenn ich eine https Seite aufrufen möchte. Die normale http Seite ist aber aufrufbar.

Folgendes habe ich bisher gemacht / vorgenommen.

Code:
cd /etc/apache2
mkdir ssl
cd ssl 

openssl req -new -nodes -keyout www_MEINE_DOMAIN_de.key -out www_MEINE_DOMAIN_de.csr -newkey rsa:2048

Den Inhalt aus der erzeugten Datei *.csr Datei habe ich bei der Bestellung bei ein TrustCenter angegeben. Ich erhielt eine certifikat.txt zurück. Die Datei schob ich auf den Server.

Soo...
die erzeugte *.csr habe ich in den /etc/apache2/ssl.csr/ Ordner geschoben
die erzeugte *.key habe ich in den /etc/apache2/ssl.key/ Ordnder geschoben
die erhaltene Datei certifikat.txt hab ich in den /etc/apache2/ssl.key/ Ordner geschoben.

Den Inhalt von der certifikat.txt habe ich an meiner *.key drangehängt
Code:
cd /etc/apache2/ssl.key/
cat certifikat.txt >> www_MEINE_DOMAIN_de.key

In mein /root Ordner habe ich meine vhosts der Domains drin.

Code:
cd /root/vhost/ssl
vi www_MEINE_DOMAIN_de.conf

Dort habeich folgendes Eingetragen:
Code:
<VirtualHost SERVER_IP:443>
ServerName meine_Domain_ohne_www.de
DocumentRoot /srv/www/htdocs/ks014/html/xtcshop/

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl.key/certifikat.txt
SSLCertificateKeyFile /etc/apache2/ssl.key/www_MEINE_DOMAIN_de.key

</VirtualHost>

und n Apache reboot.

Das wars. Wo hab ich was falsch gemacht ?
 
:eek: war so in einen Howto beschrieben.
Dachte, das dann 2 Zert. geladen werden.

Was soll ich machen ?

www_MEINE_DOMAIN_de.key
da befinden sich ja derzeitig einmal der erzeugte Key sowie der angehangene Inhalt aus der erhaltenen certifikat.txt

Was soll ich drin lassen. Bzw welchen Key rauslöschen ?

Und wenn ich was rauslösche.... dann fehlt mir in der conf doch einer der beiden Keys.
Entweder die erzeugte oder die erhaltene. Das verstehe ich dann nicht ganz.

thx
 
Im Key-File darf nur der erzeugte Key stehen. Sonst nichts. Deshab ist es auch das _KEY_-File.
Das Cert-File, das du zugeschickt bekommen hast, ist das Zertifikat. Deshalb ist es das Cert-File.
Beides genau so, wie es jeweils nach der Erzeugung vorlag.

Das Cert ist kein Key - sonst hieße es Key, nicht Cert. Der Key wird bei der Erzeugung des CSR erzeugt und ist geheim. Deshalb wird er auch vom CSR abgetrennt - das TrustCenter darf deinen Key nämlich auch nicht bekommen.

Vom TC bekommst du das Cert - das ist der unterschriebene Teil des ganzen Konstrukts. Das Cert wird vom Webserver auch nach Leibeskräften verteilt - nämlich zum Prüfen und zum Entschlüsseln. Der Key ist zum Verschlüsseln und Authentifizieren - wer den hat, der kann sich als legitimer Inhaber des Certs ausweisen.
 
Last edited by a moderator:
uff.. nochmal langsam.
Die Erklärung mit den Keys habe ich verstanden.

Nicht aber, welches der beiden CERTIFICATE Files ich "behalten" soll.

ERZEUGT habe ich eine Datei mit den Inhalt:
Code:
-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----

ERHALTEN habe ich eigendlich eine TXT Datei. Wenn ich dich da jetzt richtig verstanden habe, dann sollte ich diese auch in eine *.csr Datei umbenennen.

Code:
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----

Soo.... wenn ich deine Erklräung richtig verstanden habe, würde das lauten:

Die beiden erzeugten Datein

die erzeugte *.csr habe ich in den /etc/apache2/ssl.csr/ Ordner geschoben
die erzeugte *.key SICHERE ich mir auf mein Home PC (und lösche die auf dem Server ?)
Die erhaltene certifikat.txt nenne ich um in www_MEINE_DOMAIN_de.key
und schiebe diese in den Ornder /etc/apache2/ssl.key/

Wenn das so stimmt, dann kann ich es nachvollziehen. Denn der erzeugte *.key ist mein Sicherungskey, der bei Zertifikatsverlust wieder benötigt wird. Soweit korrekt ?
 
Last edited by a moderator:
Nochmal:

Du hast einen Sign-Request CSR und einen Key KEY erstellt.
Für den CSR hast du vom TC ein CRT erhalten. (Die genauen Dateinamen sind eigentlich egal - Endungen auch. crt, scr und key haben sich etabliert, weil sie beschreiben, was drin steckt.)

Den KEY und das CRT braucht dein Apache.
Den CSR brauchst du wieder, wenn du das CRT verlängert haben willst.

PS: Du hast von jeder Sorte genau eins.
 
Last edited by a moderator:
**klick gemacht**

Leider works not

cp www_domain_de.csr etc/apache2/ssl.csr/ <= von mir erzeugt
cp www_domain_de.key etc/apache2/ssl.key/ <= von mir erzeugt
cp certifikat.txt etc/apache2/ssl.crt/www_domain_de.crt <= vom TC erhalten

(erstmal egal, das crt evtl. nicht unbedingt auf den Server liegen sollte)

Code:
<VirtualHost 81.***.254.***:443>
ServerName domain.de
DocumentRoot /srv/www/htdocs/ks014/html/xtcshop/

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile    /etc/apache2/ssl.crt/www_domain_de.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/www_domain_de.key

</VirtualHost>

In der Datei ports.conf ist der Listen Eintrag 443 bereits drin.

Hab ich nochwas vergessen ?
 
mit und ohne SSLCipherSuite klappt es nicht. Scheint aber jetzt alles sauber zu starten

Code:
[Wed Mar 26 01:51:28 2008] [info] removed PID file /var/run/httpd2.pid (pid=22766)
[Wed Mar 26 01:51:28 2008] [notice] caught SIGTERM, shutting down
[Wed Mar 26 01:51:29 2008] [info] Init: Seeding PRNG with 0 bytes of entropy
[Wed Mar 26 01:51:29 2008] [info] Loading certificate & private key of SSL-aware server
[Wed Mar 26 01:51:29 2008] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[Wed Mar 26 01:51:29 2008] [info] Init: Generating temporary DH parameters (512/1024 bits)
[Wed Mar 26 01:51:29 2008] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]
[Wed Mar 26 01:51:29 2008] [info] Init: Initializing (virtual) servers for SSL
[Wed Mar 26 01:51:29 2008] [info] Configuring server for SSL protocol
[Wed Mar 26 01:51:29 2008] [info] Server: Apache/2.2.4, Interface: mod_ssl/2.2.4, Library: OpenSSL/0.9.8e
[Wed Mar 26 01:51:29 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec2)
[Wed Mar 26 01:51:29 2008] [info] Init: Seeding PRNG with 0 bytes of entropy
[Wed Mar 26 01:51:29 2008] [info] Loading certificate & private key of SSL-aware server
[Wed Mar 26 01:51:29 2008] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[Wed Mar 26 01:51:29 2008] [info] Init: Generating temporary DH parameters (512/1024 bits)
[Wed Mar 26 01:51:29 2008] [info] Init: Initializing (virtual) servers for SSL
[Wed Mar 26 01:51:29 2008] [info] Configuring server for SSL protocol
[Wed Mar 26 01:51:29 2008] [info] Server: Apache/2.2.4, Interface: mod_ssl/2.2.4, Library: OpenSSL/0.9.8e
[Wed Mar 26 01:51:29 2008] [notice] Apache/2.2.4 (Linux/SUSE) mod_ssl/2.2.4 OpenSSL/0.9.8e PHP/5.2.5 with Suhosin-Patch configured -- resuming normal operations
[Wed Mar 26 01:51:29 2008] [info] Server built: Nov  9 2007 14:08:21
 
Last edited by a moderator:
weder noch.

Also laut log startet SSL ja sauber.
SSLCipherSuite hab ich zwischenzeitlich auch rausgenommen. Leider ohne Erfolg.

ICh hab die Lograte auch schon höher gesetzt, sodass die log etwas gesprächiger wird
Code:
ErrorLog /var/log/apache2/SSL.log
LogLevel info

Aber wenn ich auf die htpps seite gehe, bekomme ich leider immer noch eine "Webseite kann nicht angezeigt werden"
Die log selbst wild aber leider nicht größer... bzw. sagt irgendwas
 
Ich würde auch sagem dass du das SSLCipherSuite besser raus lässt.
Von der Config her sehe ich keine Probleme, darum prüf doch mal die Basics ab.

Aber wenn ich auf die htpps seite gehe, bekomme ich leider immer noch eine "Webseite kann nicht angezeigt werden"

Welcher ErrorCode kommt denn? 404??
Ist denn in dem DocumentRoot überhaupt ein index.htm?
Ist überhaupt ein DirectoryIndex gesetzt?

Danach noch mal checken, ob 443/TCP wirklich oben ist.
Code:
lsof -i:443
Und dann ob die vhost auch aktiv ist..
Code:
apache2 -S
 
Danke für deine Hilfe:

Ich würde auch sagem dass du das SSLCipherSuite besser raus lässt.
O.k. Hab ich erstmal auskommentiert. Apache restart = kein Erfolg

Welcher ErrorCode kommt denn? 404??
Garkeiner. Gebe ich Meine-domain.de - Informationen zum Thema Domain registrieren. Diese Website steht zum Verkauf! = dann bekomme ich logischerweise 404. Rufe ich aber meine Domain ganz normal auf und hänge ein s (also https) bekomme ich nur die Fehlermeldung: Seite kann nicht angezeigt werden. Es ist genau die gleiche Seite wie bei 404... halt nur ohne 404

Ist denn in dem DocumentRoot überhaupt ein index.htm?
DocumentRoot lautet: /srv/www/htdocs/ks014/html/
Dort gibt es eine index.html und eine index,php (html hat vorrang)

Ist überhaupt ein DirectoryIndex gesetzt?
-directoryINDEX???
Glaube nicht.
mein vhost lautet mitlerweile wie folgt:
Code:
<IfDefine SSL>
<IfDefine !NOSSL>

#<VirtualHost _default_:443>


<VirtualHost 89.***.224.244:443>
ServerName www.meine_domain.de

        DocumentRoot "/srv/www/htdocs/ks014/html/"

        ErrorLog    /var/log/apache2/error_SSL.log
        TransferLog /var/log/apache2/access_SSL.log

        SSLEngine on

#        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

        SSLCertificateFile    /etc/apache2/ssl.crt/www_meine_domain_de.crt
        SSLCertificateKeyFile /etc/apache2/ssl.key/www_meine_domain_de.key

        <Files ~ "\.(cgi|shtml|phtml|php3?)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory "/srv/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>

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

        CustomLog /var/log/apache2/ssl_request_log   ssl_combined

</VirtualHost>

</IfDefine>
</IfDefine>


Danach noch mal checken, ob 443/TCP wirklich oben ist.
Hab ich geprüft. Allerindings bekomme ich garkeinen Rückgabe Wert. Firewall ist aus.
lsof zeigt doch nur bestehende 443er Port Verbindungen an(?)

apache2 -S
Den Befehl kenne weder ich noch mein Server. Command not found.
Aber ich denke mal, das du httpd2 -S meinst.
Die Ausgabe zeigt aber nur die 80er Ports an.

Mehr Info bringt mir httpd2 -S -DSSL
Code:
VirtualHost configuration:
85.131.222.244:80      is a NameVirtualHost
         default server bands.meine_domain.de (/root/vhost/interne_weiterleitungen/bands.meine_domain.de.conf:1)
         port 80 namevhost bands.meine_domain.de (/root/vhost/interne_weiterleitungen/bands.meine_domain.de.conf:1)
         port 80 namevhost meine_domain.de (/root/vhost/meine_domain.de.conf:13)
         port 80 namevhost meine_domain.de (/root/vhost/meine_domain4.de.conf:13)
         port 80 namevhost ks012.www.meine_domain.de (/root/vhost/ks012.www.meine_domain3.de.conf:13)
         port 80 namevhost meine_domain.de (/root/vhost/meine_domain3.de.conf:13)
         port 80 namevhost meine_domain2.de (/root/vhost/meine_domain2.de.conf:13)
         port 80 namevhost meine_domain.de (/root/vhost/meine_domain.de.conf:13)
85.131.222.244:443     www.meine_domain2.de (/root/vhost/ssl/meine_domain2.de.conf:7)
Syntax OK


Und ich denke, HIER liegt mein Problem. Aber da muß ich mal ne Reschere machen.
Besonders wegen: Ist überhaupt ein DirectoryIndex gesetzt?

Guter Tipp :rolleyes:
 
Last edited by a moderator:
Nachtrag: Ich blöd.


Ist überhaupt ein DirectoryIndex gesetzt?
Klar. Is ja Standardmäßig in der httpd.conf drin.

Code:
DirectoryIndex index.html index.html.var

In der VHost brauche ich die ja dann nicht mehr (?)
Bei http vhost zumindest nicht. Bei SSL weiß ich das nicht genau
 
Ah, wie ich oben gerade sehe hast du ein SuSE Linux. Ich bin eher Debian spezialisiert. Darum kennt dein System auch nicht "apache2 -S".
Das "httpd2 -S" scheint aber das selbe zu sein...
Ganz unten in der Ausgabe (vor "Syntax OK") hast du auch die Bestätigung, dass dieser VHost korrekt eingerichtet ist.

Zum DirectoryIndex: Wenn du ihn in der httpd.conf gesetzt hast, dann gilt der auch für alle vhost. Bei einem http://deineseite/ bekommst du ja auch entsprechend die index.html angezeigt. Dann sollte es bei https ebenso klappen.

Zum lsof: Es werden IMHO auch die Prozesse angezeigt, welche für LISTEN stehen. Du kannst alternativ auch ein "netstat -tlp" absetzen. Es werden dann alle offenen TCP-Ports gezeigt. Da muss irgendwo ein "*:https" in der Liste stehen. Als Prozess sollte ein Apache2 bzw httpd angezeigt werden.
Wenn da nichts angezeigt wird, dann behaupte ich mal auf Port 443 horcht nichts.
 
ahhh... wir kommen der Lösung Näher.
Deine Vermutung scheint sich zu Bestätigen. Nix https

Die Frage ist nun aber = wie sage ich denn den Indianer, das er auch die Arbeit für 443 übernehmen soll / muß

Code:
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:nfs                   *:*                     LISTEN      1960/rpc.nfsd
tcp        0      0 *:837                   *:*                     LISTEN      1954/rpc.mountd
tcp        0      0 localhost:10024         *:*                     LISTEN      2056/amavisd (maste
tcp        0      0 *:874                   *:*                     LISTEN      1973/rpc.rquotad
tcp        0      0 *:mysql                 *:*                     LISTEN      1860/mysqld
tcp        0      0 localhost:dyna-access   *:*                     LISTEN      1970/clamd
tcp        0      0 *:pop3                  *:*                     LISTEN      2009/xinetd
tcp        0      0 *:imap                  *:*                     LISTEN      2009/xinetd
tcp        0      0 *:sunrpc                *:*                     LISTEN      1924/portmap
tcp        0      0 mailserver.kwax-:domain *:*                     LISTEN      2005/named
tcp        0      0 localhost:domain        *:*                     LISTEN      2005/named
tcp        0      0 *:ftp                   *:*                     LISTEN      1981/vsftpd
tcp        0      0 *:smtp                  *:*                     LISTEN      2088/master
tcp        0      0 localhost:953           *:*                     LISTEN      2005/named
tcp        0      0 *:www-http              *:*                     LISTEN      13796/httpd2-prefor
tcp        0      0 *:domain                *:*                     LISTEN      2005/named
tcp        0      0 *:ssh                   *:*                     LISTEN      1892/sshd
tcp        0      0 localhost:953           *:*                     LISTEN      2005/named
 
Ich hab nochmal bei mir nachgesehen, was notwendig wäre um ein https machen zu können:

1.) Listen 443
Das hast du ja...

2.) LoadModule ssl_module c:/intranet/Apache/modules/mod_ssl.so
Das hast du auch, denn sonst würde der httpd2 -restart nicht klappen...

3.) SSL-Optionen in der httpd.conf
SSLMutex
SSLRandomSeed

Hast du die auch drinn?
 
1: Ja habe ich auf alle Fälle drin. und zwar in /etc/apache2/ports.conf


2: Hmm.... sicher, das ich das habe ?
Die Datei selbst habe ich in /usr/lib64/apache2-prefork/mod_ssl.so liegen.
Ich konnte aber noch nicht finden, wo dieses mod eingebunden wird. Die httpd.conf bin ich schon durch. Da stehts nicht drin.

3: Nein+Ja. Nicht in der httpd.conf. Dort wird allerdings die ... includet.
Include /etc/apache2/ssl-global.conf

Diese Datei zeigt dann die beiden benötigten Werte an:
Code:
<IfDefine SSL>
<IfDefine !NOSSL>
<IfModule mod_ssl.c>
        AddType application/x-x509-ca-cert .crt
        AddType application/x-pkcs7-crl    .crl
        SSLPassPhraseDialog  builtin
        SSLSessionCache         shmcb:/var/lib/apache2/ssl_scache(512000)
        SSLSessionCacheTimeout  600
        SSLMutex  default
        SSLRandomSeed startup builtin
        SSLRandomSeed connect builtin
</IfModule>
</IfDefine>
</IfDefine>
 
1: Ja habe ich auf alle Fälle drin. und zwar in /etc/apache2/ports.conf
Um ganz sicher zu gehen, schau doch noch mal in die httpd.conf. Dort müsste dann ein "include /etc/apache2/ports.conf" drin stehen.

2: Hmm.... sicher, das ich das habe ?
Die Datei selbst habe ich in /usr/lib64/apache2-prefork/mod_ssl.so liegen.
Ich konnte aber noch nicht finden, wo dieses mod eingebunden wird. Die httpd.conf bin ich schon durch. Da stehts nicht drin.
Hm, keine Ahnung wo SuSE die Module included. Aber glaub mir, wenn du das mod_ssl nicht hättest, könntest du den httpd nicht durchstarten. Bei jedem Start würde er dann sagen, dass die Optionen SSLEngine usw nicht bekannt wären....

3: Nein+Ja. Nicht in der httpd.conf. Dort wird allerdings die ... includet.
Include /etc/apache2/ssl-global.conf
Das passt auch.

Um zu prüfen welche Module dein Apache2 eingeschalten hat, kannst du auch ein "httpd2 -t -D DUMP_MODULES" probieren. (Bei Debian: apache2 -M)
 
ahhh... ein Schritt nach vorne.

Die ports.conf wird in der http.conf nicht includiert.

Wohl aber die listen.conf.
Da war der Wert noch auskommentiert: #Listen 443

Nach bearbeitung sieht die Datei nun so aus:
Code:
Listen 443

Listen 80


<IfDefine SSL>
    <IfDefine !NOSSL>
        <IfModule mod_ssl.c>

            Listen 443

        </IfModule>
    </IfDefine>
</IfDefine>

/etc/init.d/apache2 restart und
telnet meine_domain.de 443
sieht schon besser aus. Hier wird jetzt ein HTML Code auf der Shell ausgegeben. **freu**


netstats bringt jetzt auch einen https Eintrag
Code:
tcp        0      0 *:https                 *:*                     LISTEN      16729/httpd2-prefor

und lof erfreulicherweise auch
Code:
 # lsof -i:443
COMMAND     PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
httpd2-pr 16729   root    3u  IPv6 3066402       TCP *:https (LISTEN)
httpd2-pr 16731 wwwrun    3u  IPv6 3066402       TCP *:https (LISTEN)
httpd2-pr 16732 wwwrun    3u  IPv6 3066402       TCP *:https (LISTEN)
httpd2-pr 16733 wwwrun    3u  IPv6 3066402       TCP *:https (LISTEN)
httpd2-pr 16734 wwwrun    3u  IPv6 3066402       TCP *:https (LISTEN)
httpd2-pr 16735 wwwrun    3u  IPv6 3066402       TCP *:https (LISTEN)
httpd2-pr 16738 wwwrun    3u  IPv6 3066402       TCP *:https (LISTEN)

Komisch ist es jetzt, das trotz der korrekten arbeiten des SSL Dienstes, ich meine Seite noch nicht aufrufen kann. (Gleicher Fehler wie immer, Nix 404)

Kann ich denn überhaupt eine normale html Seite die ich vorher mit http aufgerufen habe einfach auf htpps ändern und es müßte gehen ?
 
Back
Top