Apache SSL virtualhost

Fórumok

Sziasztok!

Apache 2.0-ról 2.2-re frissítettem.
Az SSL-es virtualhostok nem akarnak működni, mintha nem is létezne az adott virtualhost.
Namebased változatról van szó. Tudom, hogy a namebased-es ssl gány dolog, mert mindenkinek ugyanazt a tanusítványt lehet csak mutatni, de ezt a fajta kockázatot most felvállalom. Eddig is így működött és szeretném ha ezentúl is menne.
Mit kéne megváltoztatnom a 2.0 alatt jól működő konfigon?

Hozzászólások


NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:443>
ServerName valami1.hu
ServerAdmin webmaster@valami1.hu
ServerAlias www.valami1.hu
DocumentRoot "/var/www/valami1.hu/htdocs"
SSLEngine on

#directory konfig kiszedve

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

SSLCertificateFile /etc/ssl/private/valami1.hu.crt

SSLCertificateKeyFile /etc/ssl/private/valami1.hu.key

<Files ~ "\.(cgi|shtml|phtml|php?)$">
    SSLOptions +StdEnvVars
</Files>

<IfModule mod_setenvif.c>
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.valami1\.hu$ [NC]
RewriteRule ^(.*)$ https://valami1.hu$1 [R=301,L]
RewriteOptions inherit

Include /etc/apache2/vhosts.d/010_valami1.hu.rewrite
</IfModule>

</VirtualHost>                                  


<VirtualHost *:443>
ServerName www.valami2.hu
ServerAdmin webmaster@valami2.hu
ServerAlias valami2.hu
DocumentRoot /var/www/valami2.hu/htdocs
SSLEngine on

#directory konfig kiszedve

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

SSLCertificateFile /etc/ssl/private/valami2.hu.crt

SSLCertificateKeyFile /etc/ssl/private/valami2.hu.key

<Files ~ "\.(cgi|shtml|phtml|php?)$">
    SSLOptions +StdEnvVars
</Files>

<IfModule mod_setenvif.c>
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^valami2\.hu$ [NC]
RewriteRule ^(.*)$ https://www.valami2.hu$1 [R=301,L]
RewriteOptions inherit
</IfModule>

</VirtualHost>

A tanusítványokat megtalálja, viszont a vhostok error_log-jaiban ez van apache indítás után:


[warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)

Ez van induláskor a sima error_log-an:


[Sun Jan 27 12:57:02 2008] [warn] Init: SSL server IP/port conflict: valami1.hu:443 (/etc/apache2/vhosts.d/010_valami1.hu.conf:103) vs. www.valami2.hu:443 (/etc/apache2/vhosts.d/050_valami2.hu.conf:67)
[Sun Jan 27 12:57:02 2008] [warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!
[Sun Jan 27 12:57:03 2008] [warn] Init: SSL server IP/port conflict: valami1.hu:443 (/etc/apache2/vhosts.d/010_valami1.hu.conf:103) vs. www.valami2.hu:443 (/etc/apache2/vhosts.d/050_valami2.hu.conf:67)
[Sun Jan 27 12:57:03 2008] [warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!

Mivel ezek csak warningok, szerintem ettől még menni kéne.

Ha már ServerName valami1.hu és ServerAlias www.valami1.hu, akkor ServerName valami2.hu és ServerAlias www.valami2.hu legyen... ;)
Amúgy meg szerintem pusztán annyi a gondja, hogy a 2.2-es már nem szeret SSL-nél virtualhost-okat... Mert ugye ugyanazt a tanúsítványt mutatják, ahogy te is mondtad... Csak próbaképp nézd meg, hogy kiveszed az ssl-t, és sima http-ként próbálod a két virtualhost-ot. Vagy egy olyan sejtésem, hogy szó nélkül menni fog.
--
Discover It - Have a lot of fun!

Ha tudod hogy mindenkinek csak ugyanazt a tanusitvanyt lehet mutatni, akkor miert adsz meg kulonbozo crt es key file-okat a ket virtualhostnal? Az alabbi nekem mukodik Apache 2.2.3-mal (az indulaskori warningok nalam is megvannak):


NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:443> 
        ServerName www1.domain.hu  
        ServerAdmin webmaster@domain.hu
 
        # Warning: only one ssl cert per IP+port is possible
        #          so www1 and www2 must have the same
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/wildcard.domain.hu.crt
        SSLCertificateKeyFile /etc/ssl/private/wildcard.domain.hu.key

        DocumentRoot /home/www1/
[SNIP]
</VirtualHost>

<VirtualHost *:443>
        ServerName www2.domain.hu
        ServerAdmin webmaster@domain.hu
 
        # Warning: only one ssl cert per IP+port is possible
        #          so www1 and www2 must have the same
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/wildcard.domain.hu.crt
        SSLCertificateKeyFile /etc/ssl/private/wildcard.domain.hu.key

        DocumentRoot /home/www2/
[SNIP]
</VirtualHost>

Kicsi virtualhost probléma: van több virtualhost ami a 80-as porton figyel. Viszont van 1-2 ssl-es is. Ha egy olyan weboldalt néznek meg amihez nincs ssl http-vel akkor minden rendben. Ha viszont amihez csak http config van nincs ssl-es es https-el nézik akkor egy létező ssl-es oldal jön be aminek semmi köze sincs az eredeti http oldalhoz! Mi lehet erre a korrekt megoldás?

http://www.valami.hu rendben bejön.
https://www.valami.hu szintén ok.
http://www.masikvalami.hu szintén bejön rendben.
https://www.masikvalami.hu bejön a https://www.valami.hu oldal!!!
www.masikvalami.hu -hoz csak http konfig van.

:(

covek@covek.hu

Mivel a cimen van :443 szolgaltatas, megkapod ezek kozul valamelyiket.
- a default virtualhostot,
- a konfigban az elso virtuahostot

- rewrite, mod_security a fenti vhostokba:
ha nem o volt a cel dobjon error oldalt,
vagy kuldjon http-n a celhoz, vagy csak tiltson
- csinalj nekik is ssl virtualhostot
(apache2.2-vel megoldhato kulon certtel is egy cimen,
de regebbi bongeszok kedveert akkor is visszaterhet a fenti hiba)

Köszönet. rewrite-ot már próbáltam, de nem dobott át a http oldalra, mert mindenképpen ssl tanusítványt mutogatott, amit nem akartam annyira. Az egységsugarú userek megijednek, ha látnak egy olyan explorer oldalt ami arra figyelmezteti őket, ogy baj van nem biztonságos az az oldal ahova menni akarnak. Akkor már inkább ne is mutogasson https-en semmit ha nincs is szükség rá.
mod_security-t még nem néztem, ki fogom próbálni mit tudok vele kezdeni!

végső megoldás a mindenhova ssl config is készül változat.

covek@covek.hu

Üdv.

A téma végigolvasás után rájöttem, hogy miért van az, hogy https-nél miért csak az első ssl-es oldal certificate-jét mutogatja. Ez akkor ezekszerint normális.

2.2es Apache-ot használok.

De szerintetek mennyire jobb megoldás az, hogy ha az ip címre van kiállítva a certificate? Ekkor ugye egy tanusítvány van az összes olyan oldalhoz, amihez ssl kell. Elvileg rendben kell működnie?

De egyébként nagyon nem izgalmas a dolog, mert hiába mutogatja ugyanazt a tanusítványt, a kapcsolat ettől még titkosított lesz. Elvileg.
Jól gondolom ezt a dolgot?

Köszi. Üdv.

Nekem is kicsit hasonló problémám van: Van egy vhost a belső hálóra és kéne egy a publikus / port-forwardolt hálóra is.
A belső hálón statikus IP cím van, így azzal nincs gond, de kívülről a port forward miatt az Apache ugyanazt a belső IP címet látja, nem pedig a gateway/router internetes címét, ami ráadásul még dinamikus is.
A két vhosthoz mindenkép 2 cert/key párost szeretnnék, különben felesleges 2 vhost...
Van valakinek ötlete, hogy lehet ezt áthidalni?

Kicsit regi, de azert alljon itt a megoldas:

Fel kell venni egy masik belso IP-t es arra bindelni a kulso tanusitvanyt. Persze a forwardot is at kell irni.

Az apache-nak nem azert kellenek eltero IP cimek, mert IP-re matchel, hanem azert, hogy kulon socketeket tudjon letrehozni, mert a tanusitvanyt sockethez tudja csak ertelmesen bindelni. A kulso IP ebbol a szempontbol irrelevans
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

En kiserleteztem vele, sajnos a bongeszo oldali tamogatottsag kritikan aluli. Meg mindig nem tamgoatja minden mainstream bongeszo, es ez rengeteg support munkat jelentene.

A fenti esetre reagalva: nehogy mar draga legyen meg egy _belso_ ip-t felvenni egy szerverre. Felesleges SNI-vel bohockodni, ha amugy is portforward van.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Nálam így működnek az SNI-s oldalak 1db ip címen belül:

<VirtualHost egy.darab.ip.cim:443>
...
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /ssl/cert/domain1.crt
SSLCertificateKeyFile /ssl/cert/domain1.key
SSLCACertificateFile /ssl/cert/domain1.bundle
</IfModule>
...
</VirtualHost>

<VirtualHost ugyan.az.az.ipcim:443>
...
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /ssl/cert/domain2.crt
SSLCertificateKeyFile /ssl/cert/domain2.key
SSLCACertificateFile /ssl/cert/domain2.bundle
</IfModule>
...
</VirtualHost>

satöbbi:-)

feliratkozás
----------
Az Örömtündér minden évben ellátogat a Földre és akit megérint a pálcájával az Boldog lesz! De esetleg az is megtörténhet, hogy kiveri belőled még a sz*rt is... (by radcsong)

Megfelelő Openssl és apache verzió együttesen szükséges a működéshez. Debian alatt Squeeze verziótól kezdve működik.
Openssl 0.9.8f a minimum követelmény, de csak 0.9.8k -tól lett alapértelmezetten bekapcsolva. Nem csak openssl-lel lehet használni, hanem gnutls-sel is.
Az apache esetén az a lényeges, hogy megfelelő openssl támogatással legyen lefordítva.

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Linuxscripting

A linket koszi, ez eleg sokmindenre fenyt deritett.

Nem akarok eroskodni, de konkretan emlekszek, hogy van olyan apache, amiben nem volt benne az SNI support. Annal regebbi koddal meg megfelelo OpenSSL eseten se mukoszik.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Jól emlékszel, ez valóban így van, de most nem bányásztam elő az erről szóló leírást. Dolog nagyjából így fest:
A böngésző az első ip csomagban elküldi, hogy milyen domaint szeretne. A démon megkapja a kérést, majd kiolvassa belőle a domaint és a megfelelő virtualhostból előveszi a certet amit letol a kliensnek. Ebben a folyamatban lényeges szerepe van az openssl és az apache egymás közötti kommunikációjának. Nyilván ehhez verziószámok is köthetők. Gnutls-sel már jóval régebb óta működött a dolog, csak a böngésző támogatottság miatt nem lehetett használatba venni. T.i. a kliensprogramok jelentették sokáig ennek a gyenge pontját.

Linuxscripting

Igen, a logikajara mar az elozo kommentben a link is ramutatott.

Egyelore olyan problemaim is vannak, hogy ahol pl. most tudnam ajanlani a bevezetest, ott meg vannak kokori apache-k is (meg 1.x-esek is), azota masutt meg nem volt ra szuksegem.

De kosz a reszletes leirast.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal