ubuntuusers.de

Apache SSL Config

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

samjack

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

Hallo zusammen,

Ich hab ein Webserver mit ca 5 Domains drauf. Eine davon nun ein Shopsystem installiert.

Tja und jetzt fängts an.

im /etc/apache2/sites-available/

habe ich für jede domain ein hostfile genannt wie der domainname. Der Shop selbst funktioniert, das Problem ist nun aber, das wenn eine seite auf https wechseln möchte kommt folgender fehler:

Ein Fehler ist während einer Verbindung mit www.INTERNETSEITE.ch aufgetreten.

SSL hat einen Eintrag erhalten, der die maximal erlaubte Länge überschritten hat.

(Fehlercode: ssl_error_rx_record_too_long)

oder beim reboot vom apache dies hier:

[error] VirtualHost *:443 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
 ... waiting [Mon Nov 15 14:31:30 2010] [error] VirtualHost *:443 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results

Das Hostfile für die Domain sieht wie folgt aus:

<VirtualHost *>

        ServerAdmin support@mail.com
        ServerName testdomain.com
        ServerAlias www.testdomain.com testdomain.com

        DocumentRoot /var/www/testdomain.com/htdocs/magento
        ErrorLog /var/log/apache2/testdomain.com-error_log
        CustomLog /var/log/apache2/testdomain.com-access_log combined

        HostnameLookups Off
        UseCanonicalName Off
        ServerSignature On

        ScriptAlias /cgi-bin/ "/var/www/testdomain.com/cgi-bin/"

        <Directory "/var/www/testdomain.com/cgi-bin">
                AllowOverride None
                Options +ExecCGI -Includes
                Order allow,deny
                Allow from all
        </Directory>

        <Directory "/var/www/testdomain.com/htdocs">
                Options -Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>

</VirtualHost>

Mir ist klar, dass ich nun den Apache irgendwie dazu bringen muss auf Port 443 zu hören.

sollte er aber eigetlich. darum:

/etc/apache2/ports.conf

#NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
   Listen 443
</IfModule>

Ich hab das Hostfile auch schon mit fogeldndem erweitert:

<VirtualHost *:443>

        SSLEngine On
        SSLCertificateKeyFile /etc/apache2/ssl/testdomain.cert.key
        SSLCertificateFile /etc/apache2/ssl/testdomain.cert.crt

Aber nichts klappt... Das einzige was funktioniert ist wenn ich

<VirtualHost *> in <VirtualHost ip:80> <VirtualHost ip:443>

ändere, das problem ist nur, dass jede domain auf dem server auf diese Seite verweist.

Ich hab einiges an Anleitungen im Netz gefunden, aber irgendwie blick ich nicht druch. Seht mir meinen Fehler?

Was hab ich sicher nicht falsch gemacht:

- a2enmod ssl (ist aktiviert) - zertifikate sind korrekt hinterlegt und funktionieren

Danke euch

uname

Anmeldungsdatum:
28. März 2007

Beiträge: 6030

Wohnort: 127.0.0.1

Du hast aber schon für jeden virtuellen Host eine eigene Datei unter /etc/apache2/sites-available?

In der "name.domain.tld-ssl" (oder anderer eindeutiger Name sollte am Anfrang stehen:

<IfModule mod_ssl.c>
<VirtualHost name.domain.tld:443>
...

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

hi,

jop ich hab für jede domain ein eigenes file. das vhost file ist genau so wie oben dargestellt, einfach mit jeweils einer andere domain anstatt testdomain.com.

ist das nicht richtig? hat bis anhin prima funktioniert...

Den Code

<IfModule mod_ssl.c>
<VirtualHost name.domain.tld:443>
...

Also dann muss ich im ports.conf jeweils die domain angeben welche ssl nutzt. also z.b. anstatt name.domain.tld:443 einfach die domain um welche es sich handelt?

danke grüsse

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

Alles klar, wenn das stimmt dann weiss ich wohin mein morgen ist...

Hab ich grade im Netz gelesen:

Besonders die Konfiguration von Virtual-Hosts hat mich in Atem gehalten, da ich erst ziemlich spät auf die Information stieß, dass unter einer IP-Adresse und Port nur maximal ein Zertifikat funktioniert. Man kann also keine zwei Virtual Hosts mit unterschiedlichen Zertifikaten auf dem selben Port betreiben. Das liegt afaik an der Implementation von SSL auf IP-/Port-Ebene. Letztendlich sind VirtualHosts ja nur ein Aufsatz für die IP-Adressen.

Stimmt das? Kann ich also auf einem Server welcher nur eine IP-Adresse hat nur eine Webseite betreiben welche ein Zertifikat verwendet? Also das heisst jeder Server welcher im Internet steht und eine Seite mit einem Zertifikat sprich https hat ist für diese Domain. Also pro https Seite geht eine IP drauf?

Echt?

Das kann ich fast nicht glauben, gut man soll auch nicht alles glauben was im Netz steht, aber besser weiss ich es nicht und was anderes hab ich noch nicht gelesen.

TheMK

Anmeldungsdatum:
26. Juli 2010

Beiträge: 120

Wohnort: /home/maex

Ja, das hat was mit dem Sinn von SSL zu tun.

1 direkte Verbindung zwischen Server und Client und Host

Heißt du kannst zwar auf den ports 1-99999 tausendene HTTP-Server laufen lassen oder auch 2 auf dem Port 80, aber nur einen SSL-Server (üblicherweiße) auf Port 443.

Wenn du mehrere SSLs auf einem Server haben willst geht das nur mit einem mod_rew-Workaround.

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

klar wenn ich drüber nachdenke macht es sinn, nur hab ich nie drüber nachgedacht. hmmm... okee danke

Ich mach morgen mal ne Anleitung wie ich die SSL Verbindung zu stand kriegen möchte, denn wenn auch nur eine geht, die hab ich irgendwie noch nicht hinbekommen. irgendwo hackts noch.

TheMK

Anmeldungsdatum:
26. Juli 2010

Beiträge: 120

Wohnort: /home/maex

Hier http://wiki.ubuntuusers.de/Apache/SSL ist alles seht schön erklärt.

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

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

<html>
<head>
</head>
<body>
<h1>sample1.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)

<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

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 []:Origon46
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)

<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)

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

<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:

{{{
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? und Wofür sind die default und default-ssl in /etc/apache2/sites-available gedacht? Solle man lieber die als vorlagen nehmen der VirualHosts?

uname

Anmeldungsdatum:
28. März 2007

Beiträge: 6030

Wohnort: 127.0.0.1

Fehlt nicht irgendwo noch

a2ensite

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

  • a2ensite

Your choices are: default default-ssl
Which site(s) do you want to enable (wildcards ok)?

Was sag ich da? ich möchte keine wildcards nutzen, sondern für jede domain ein eignes zertifikat.

ich sehe nur die default und default-ssl VirtualHost Files. Ich hab meine Files wie in der Anleitung ins /sites-enabled kopiert, wenn ich a2ensite mache werden nur die von sites-available angezeigt.

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

ich schaffs nicht. hab alles mögliche probiert...

hat das noch niemand im einsatz? wo mach ich was falsch? ein tutorial im internet scheint es nicht zu geben...

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

samjack schrieb:

ich sehe nur die default und default-ssl VirtualHost Files. Ich hab meine Files wie in der Anleitung ins /sites-enabled kopiert, wenn ich a2ensite mache werden nur die von sites-available angezeigt.

Die Dateien werden nicht in sites-enabled abgelegt sondern in sites-available. a2ensite aktiviert diese Seiten dann, in dem ein Symlink in sites-enabled auf die zugehörige Datei in sites-available erstellt wird.

Gruß

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

alles klar, ich hab nun die hostifiles verschoben

mv /etc/apache2/sites-enabled/sample1.com /etc/apache2/svaites-ailable/
mv /etc/apache2/sites-enabled/sample2.com /etc/apache2/sites-available/

und dann den symlink erstellt

ln -s /etc/apache2/sites-available/sample1.com /etc/apache2/sites-enabled/sample1.com
ln -s /etc/apache2/sites-available/sample1.com /etc/apache2/sites-enabled/sample1.com

apache reboot

und wenn ich jetzt jedoch die seiten aufrufe kommt jedoch keine von beiden sondern die default webseite. muss ich alles ausser die symlinks im sites-enabled löschen? da sind ja noch standardmässig die default und default-ssl, jedoch au als symlink...

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

Bearbeitet von xabbuh:

Codeblöcke hinzugefügt, bitte verwende diese in Zukunft, um die Übersicht im Forum zu verbessern. Danke!

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

Welche Ausgabe gibt denn

sudo apache2ctl -S

?

samjack

(Themenstarter)

Anmeldungsdatum:
14. Mai 2008

Beiträge: 33

xabbuh schrieb:

Welche Ausgabe gibt denn

sudo apache2ctl -S

?

[Wed Nov 17 07:51:09 2010] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
[Wed Nov 17 07:51:09 2010] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443          ubuntu-server.localdomain (/etc/apache2/sites-enabled/default-ssl:2)
*:443                  ubuntu-server.localdomain (/etc/apache2/sites-enabled/sample1.com:43)
*:443                  ubuntu-server.localdomain (/etc/apache2/sites-enabled/sample2.com:43)
*:80                   is a NameVirtualHost
         default server ubuntu-server.localdomain (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost ubuntu-server.localdomain (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost ubuntu-server.localdomain (/etc/apache2/sites-enabled/sample1.com:1)
         port 80 namevhost ubuntu-server.localdomain (/etc/apache2/sites-enabled/sample2.com:1)
Antworten |