mehrere SSL Seiten auf einem Apache

Alles, was den Apache betrifft, kann hier besprochen werden.

mehrere SSL Seiten auf einem Apache

Postby a210732 » 17. November 2010 13:54

Hallo zusammen,

Wie kann ich mehrere SSL Seiten auf einem Apache betreiben?

[user:samjack:] [post:2684378: schrieb]:
Also wie es scheint sind einfach alle Anleitungen im Internet nicht sehr aktuell.
Laut denen hier gehts mit einer neueren Apache Version:
[http://www.zdnet.de/webentwicklung_so_unterstuetzt_apache_ssl_sites_mit_einer_ip_adresse_story-20000203-41527996-1.htm]

Also wollen wir das mal zusammen erarbeiten.
Ich nehme einen frisch installieren Ubuntu Server 10.04 und als test die Domains sample1.com und sample2.com

- apt-get install apache2 (apache installieren)
- mkdir /var/www/sample1.com (verzeichnis für dateien machen)
- mkdir /var/www/sample2.com (verzeichnis für dateien machen)
- vi /var/www/sample1.com/index.html (index file das auch was auf der seite erscheint)
- inhalt der index.html

Code: Select all
 <html
 <head
 </head
 <body
 <h1sample1.coma</h1
 </body
 </html
 




- für den zweiten host natürlich das selbe mit den ensprechenden anpassungen. ich beschreibe nun nicht alles, ich gehe davon aus jeder der das hier lesen tut kennt sich einigermassen aus.
- cp /etc/apache2/sites-enabled/000-default sample1.com
- vi /etc/apache2/sites-enabled/sample1.com (anpassen für beide seiten)

Code: Select all
 <VirtualHost *:80
         ServerAdmin webmaster@localhost
         '''ServerAlias sample1.com www.sample1.com'''
         DocumentRoot /var/www/'''sample1.com'''
         <Directory /
                 Options FollowSymLinks
                 AllowOverride None
         </Directory
         <Directory /var/www/'''sample1.com'''
                 Options Indexes FollowSymLinks MultiViews
                 AllowOverride None
                 Order allow,deny
                 allow from all
         </Directory
 
         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
         <Directory "/usr/lib/cgi-bin"
                 AllowOverride None
                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                 Order allow,deny
                 Allow from all
         </Directory
 
         ErrorLog ${APACHE_LOG_DIR}/error.log
 
         # Possible values include: debug, info, notice, warn, error, crit,
         # alert, emerg.
         LogLevel warn
 
         CustomLog ${APACHE_LOG_DIR}/access.log combined
 
     Alias /doc/ "/usr/share/doc/"
     <Directory "/usr/share/doc/"
         Options Indexes MultiViews FollowSymLinks
         AllowOverride None
         Order deny,allow
         Deny from all
         Allow from 127.0.0.0/255.0.0.0 ::1/128
     </Directory
 
 </VirtualHost
 




- /etc/init.d/apache2 reload (files neu laden)
- so jetzt haben wir mal die basis.

Nun möchte ich, das die sample2 sowohl auf http als auch auf https hört.

- mkdir /etc/apache2/ssl (ordner für zertifikate erstellen)

'''Zertifikate generieren'''

- openssl req -new server.cert.csr


Code: Select all
 Generating a 1024 bit RSA private key
 .....++++++
 ..........................++++++
 writing new private key to 'privkey.pem'
 Enter PEM pass phrase:
 Verifying - Enter PEM pass phrase:
 -----
 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]:CZ
 State or Province Name (full name) [Some-State]:Stadt
 Locality Name (eg, city) []:City
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
 Organizational Unit Name (eg, section) []:Section
 Common Name (eg, YOUR name) []:sample2.com
 Email Address []:sample2@sample.com
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:SAMPLE
 An optional company name []:Company Name
 root@ubuntu-server:/etc/apache2/ssl#
 
 




- openssl rsa -in privkey.pem -out server.cert.key
- openssl x509 -in server.cert.csr -out server.cert.crt -req -signkey server.cert.key -days 365
- vi vi /etc/apache2/sites-enabled/sample2.com (um folgendes erweitern)


Code: Select all
 <VirtualHost *:80
         ServerAdmin webmaster@localhost
         ServerAlias sample2.com www.sample2.com
         DocumentRoot /var/www/sample2.com
         <Directory /
                 Options FollowSymLinks
                 AllowOverride None
         </Directory
         <Directory /var/www/sample2.com
                 Options Indexes FollowSymLinks MultiViews
                 AllowOverride None
                 Order allow,deny
                 allow from all
         </Directory
 
         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
         <Directory "/usr/lib/cgi-bin"
                 AllowOverride None
                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                 Order allow,deny
                 Allow from all
         </Directory
 
         ErrorLog ${APACHE_LOG_DIR}/error.log
 
         # Possible values include: debug, info, notice, warn, error, crit,
         # alert, emerg.
         LogLevel warn
 
         CustomLog ${APACHE_LOG_DIR}/access.log combined
 
     Alias /doc/ "/usr/share/doc/"
     <Directory "/usr/share/doc/"
         Options Indexes MultiViews FollowSymLinks
         AllowOverride None
         Order deny,allow
         Deny from all
         Allow from 127.0.0.0/255.0.0.0 ::1/128
     </Directory
 
 </VirtualHost
 
 '''<VirtualHost *:443
 
         SSLEngine On
         SSLCertificateKeyFile /etc/apache2/ssl/server.cert.key
         SSLCertificateFile /etc/apache2/ssl/server.cert.crt
 
         DocumentRoot /var/www/sample2.com
 
 </VirtualHost'''
 




- a2enmod ssl (ssl modul aktivieren)


Code: Select all
 Enabling module ssl.
 See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
 Run '/etc/init.d/apache2 restart' to activate new configuration!
 




- /etc/init.d/apache2 restart (Apache restarten)
- funktioniert :) https://sample2.com zertifikat ist zwar nicht vertrauenswürdig, da selber generitert aber es läuft...

- und möchte ich für das sample1.com auch noch ne https seite.

Wenn ich nun also einfach folgenden Teil

Code: Select all
 <VirtualHost *:443
 
         SSLEngine On
         SSLCertificateKeyFile /etc/apache2/ssl/server.cert.key
         SSLCertificateFile /etc/apache2/ssl/server.cert.crt
 
         DocumentRoot /var/www/sample1.com
 
 </VirtualHost
 
 in das VirtualHost File von sample1.com kopiere kommt beim apache reboot folgender fehler:
 
 [code]
 warn] _default_ VirtualHost overlap on port 443, the first has precedence
 ... waiting
 [warn] _default_ VirtualHost overlap on port 443, the first has precedence
 



Klar, weil beide VirtualHosts möchten auf den Port, aber bei Port 80 funktionierts ja auch.
Was muss also nun getan werden?


Danke Grüsse
a210732
 
Posts: 3
Joined: 17. November 2010 13:48

Re: mehrere SSL Seiten auf einem Apache

Postby Nobbie » 17. November 2010 14:33

a210732 wrote:Wie kann ich mehrere SSL Seiten auf einem Apache betreiben?


Nur mit mehreren IPs (pro SSL eine eigene IP). Denn ...

a210732 wrote:Klar, weil beide VirtualHosts möchten auf den Port, aber bei Port 80 funktionierts ja auch.


Wenn man mehrere VirtualHosts auf der gleichen IP:Port laufen lassen will, muss man zur Technik der sog. "NameBased" VirtualHosts greifen. Im wesentlichen benötigt man dazu eine Direktive "NameVirtualHost", die die IP:Port festlegt, wo diese VirtualHosts laufen. Ich vermute, für den Port 80 gibt es eine solche Direktive in Deiner Konfiguration, aber sie fehlt beim SSL Teil für Port 443.

a210732 wrote:Was muss also nun getan werden?


Du müßtest theoretisch diese Direktive noch anlegen und dann mit NameBased VirtualHosts arbeiten

Aber eben nur theoretisch. Denn praktisch git leider (siehe http://httpd.apache.org/docs/2.2/vhosts/name-based.html):

Namensbasierte virtuelle Hosts können aufgrund der Natur des SSL-Protokolls nicht mit SSL-gesicherten Servern verwendet werden.


Mit anderen Worten: geht nicht!

Das geht nur mit IP-Based virtuellen Hosts - und damit sind wir wieder ganz oben in meinem Beitrag: Du brauchst pro SSL Domain eine eigene IP. Sonst geht es nicht.

P.S.: Ich habe mir mal die ZDNET Seite durchgelesen. Demnach gibt es in Apache wohl ganz neu ein Feature, dass es ggf. doch geht (offensichtlich ist nicht einma die Apache Doku angepasst). Demnach mußt Du nur die VirtualHosts auf *.443 um diese Angaben ergänzen (am besten über den VirtualHosts):

Code: Select all
NameVirtualHost *:443
SSLStrictSNIVHostCheck off


Das erste ist die genannte NameVirtualHost Anweisung (s.o.) und das zweite ein neues Schlüsselwort (allerdings erst ab Apache 2.2.12 verfügbar). Gemäß dem Artikel kann es aber dennoch zu Problemen führen, denn nicht jeder Browser kann damit umgehen (wobei sie offenlassen, welche es können und welche nicht).

P.P.S.: Es gibt doch eine LIste "funktionierender" Browser, das wären diese hier:

Dazu zählen Firefox 2.0 oder später, Opera 8.0 oder später, Internet Explorer 7.0 oder später (nur unter Vista), Google Chrome und Safari 3.2.1 (nur unter OS X 10.5.6 oder später).


Also eigentlich alle etwas neueren. Nur IE6 macht Probleme und alte Operas oder Safaris.

P.P.P.S: Das sehe ich ja gerade erst - Du musst natürlich in den VirtualHosts noch den zugehörigen ServerName angeben, die fehlen momentan komplett. Und (wahrscheinlich) mußt Du für jeden ServerName (sample1 und sample2) ein eigenes Zertifikat generieren und jeweils im eigenen VirtualHost angeben.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: mehrere SSL Seiten auf einem Apache

Postby a210732 » 17. November 2010 15:06

Hallo,

Danke für deine Antwort.
Ja also eigetlich unterstützen dies alle Brwoser welche ein normaler Surfer nutzt.

Wenn ich nun meine virtualHost Datei anpasse sieht die so aus:

Code: Select all
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerAlias sample1.com www.sample1.com
        DocumentRoot /var/www/sample1.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/sample1.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

        NameVirtualHost *:443
        SSLStrictSNIVHostCheck off

<VirtualHost *:443>

        SSLEngine On
        SSLCertificateKeyFile /etc/apache2/ssl/sample1.com/server.cert.key
        SSLCertificateFile /etc/apache2/ssl/sample1.com/server.cert.crt

        DocumentRoot /var/www/sample1.com

</VirtualHost>




Und beim Apache Reboot kommt noch folgender Fehler:

Code: Select all
 * Restarting web server apache2                                                                                                   
[Wed Nov 17 15:04:12 2010] [warn] NameVirtualHost *:443 has no VirtualHosts
 ... waiting [Wed Nov 17 15:04:13 2010] [warn] NameVirtualHost *:443 has no VirtualHosts


Also irgendwie scheints nicht zu funktionieren...
Hast du noch irgendwelche vorschläge?
a210732
 
Posts: 3
Joined: 17. November 2010 13:48

Re: mehrere SSL Seiten auf einem Apache

Postby Nobbie » 17. November 2010 15:11

Ich kann nicht erkennen, ob Du die VirtualHosts richtig konfiguriert hast.

Was hast Du wo eingetragen und ist auch sichergestellt, dass die einzelnen Dateien auch wirklich inkludiert werden? Du arbeitest mit einer Debian-spezifischen Apache-Konfiguration, scheinst aber irgendetwas zu übersehen. Anscheinend legst Du für jeden VirtualHost o.ä. eine eigene Datei an?

Da ich kein Debian hier habe, kann ich schlecht nachvollziehen, wie die Konfiguration aussieht. Fakt ist, dass Du nicht zwingend alles auslagern musst, Du kannst auch einfach in die httpd.conf reinschreiben (bei manchen Distributionen gibt es selbst die nicht, die heißt dann apache. conf oder auch apache2.conf).

Du mußt mir mindestens mal komplett zeigen, was Du gemacht hast und wo Du die einzelnen Dinge gespeichert hast. Irgendetwas wird offensichtlich nicht gefunden.

P.S.: Was mir wohl auf Anhieb auffällt, sind die fehlenden Abschlussklammern (Größerzeichen) in den VirtualHosts Definitionen für *.443 - ich habe das für ein Copy & Paste Problem gehalten. Aber vielleicht fehlt es ja wirklich...
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: mehrere SSL Seiten auf einem Apache

Postby a210732 » 17. November 2010 15:18

Also es sieht so als als würde es jetzt funktionieren.
ServerAlias www.sample1.com sample1.com musste in im VirtualHost von *443 auch noch einfügen.
Aber nun klappt es mit folgender config:

Code: Select all
</VirtualHost>

        NameVirtualHost *:443
        SSLStrictSNIVHostCheck off

<VirtualHost *:443>

        SSLEngine On
        SSLCertificateKeyFile /etc/apache2/ssl/sample1.com/server.cert.key
        SSLCertificateFile /etc/apache2/ssl/sample1.com/server.cert.crt

        DocumentRoot /var/www/sample1.com
        ServerName www.sample1.com
        ServerAlias www.sample1.com sample1.com
</VirtualHost>


Jedoch bringt der Apache bein restart noch folgenden Fehler.


Jetzt aber
Wenn ich nun folgendes /etc/apache2/apache2.conf (ubuntu 10.04) einfüge:

NameVirtualHost *:443
SSLStrictSNIVHostCheck off



funktionierts :)

[Wed Nov 17 15:12:19 2010] [warn] NameVirtualHost *:443 has no VirtualHosts
... waiting [Wed Nov 17 15:12:20 2010] [warn] NameVirtualHost *:443 has no VirtualHosts



Ich danke dir...
nach jetzt ca. 19 Stunden läufts :) :)
a210732
 
Posts: 3
Joined: 17. November 2010 13:48

Re: mehrere SSL Seiten auf einem Apache

Postby Nobbie » 17. November 2010 16:05

a210732 wrote:nach jetzt ca. 19 Stunden läufts :) :)


Wieso, das waren doch jetzt gerade mal ein, zwei Stunden. ... ;)

Ist immer so - kaum macht man's richtig, schon funktioniert's.

Insgesamt ist das ein sehr wichtiger Beitrag in diesem Forum, den man vielleicht festpinnen sollte (oder in eine FAQ aufnehmen - hier gibt es keine, glaube ich zumindest), denn die Frage nach den SSLs in verschiedenen NameBased VirtualHosts ist so alt wie Apache selbst und ist sicherlich zitausendfach schon gefragt und (bislang negativ) beantwortet worden. Das wird einige freuen, wenn das jetzt geht.

Natürlich muss die Infrastruktur auch stimmen (wie bei ZDNet beschrieben), das steht jetzt leider nicht hier im Thread.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Re: mehrere SSL Seiten auf einem Apache

Postby Altrea » 17. November 2010 16:19

Nobbie wrote:Insgesamt ist das ein sehr wichtiger Beitrag in diesem Forum, den man vielleicht festpinnen sollte

So ein paar sticky threads würden dem Board generell nicht schaden :D
Oder zumindest mal ein Beitrag mit Links, wo die wichtigsten Threads zu den gängigsten Fehlern und Lösungen verlinkt sind.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11935
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64


Return to Apache

Who is online

Users browsing this forum: No registered users and 54 guests