Portál AbcLinuxu, 29. května 2024 06:12


Dotaz: Apache + VirtualHost + SSL (https) + Reverzní proxy

24.6.2016 10:15 TiVek
Apache + VirtualHost + SSL (https) + Reverzní proxy
Přečteno: 1355×
Odpovědět | Admin
Zdravím,

potřeboval bych radu, mám domácí servr, kde mi jede mimojiné i apache na kterém jsem si zprovoznil SSL, pochopil jsem že na jedné IP mi to v různých virtualhostech nebude funogovat protože apache si z šifrované komunikace nezjistí ServerName a tudíž bude vždy https provoz směrovat do první definice VirtalHostu s SSL, ve zdejší poradně jsem se dočetl, že se problém dá obejít společným certifikátem pro všechny SSL Virtualhosty, což je sice na jednu stranu prasárna, na druhou stranu toto řešení chci používat zejména pro reverzní proxy a mé vlastní interní potřeby, takže by mi společný certifikát nevadil, otázkou ale je, jak to nastavit, protože odpověď na toto jsem zatím nenašel.

Na okraj by mě docela zajímalo jak https funguje u různých hostingů, které to nabízí, zkusmo jsem si u poskytovatele firemního webhostingu nastavil několik domén i pro https a všechny jsou směrované na jednu IP u všech lze definovat vlastní certifikát a stejně jim to běží?!?

díky za rady
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.6.2016 10:26 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
Odpovědět | | Sbalit | Link | Blokovat | Admin
https://en.wikipedia.org/wiki/Server_Name_Indication
Max avatar 24.6.2016 10:50 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak již kolega linkuje, není to zcela pravda. Ty můžeš použít více certifikátů na jedné IP. K tomu slouží SNI / Více SSL certifikátů na jediné IP adrese.

Je potřeba podpora jak na straně serveru, tak na straně klienta (webového prohlížeče). V současné době by s tím neměl být žádný problém, protože SNI by měly podporovat všechny aktuální prohlížeče.

Pokud by jsi chtěl ale využít jeden cert, tak je to easy. Stačí si nakonfigurovat port 443 + k němu cert a pak vytvářet vhosty, u nichž bude port 443.
Zdar Max
Měl jsem sen ... :(
24.6.2016 11:29 TiVek
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
abych se přiznal, moc nevím co a kam


v httpd.conf mám:
<IfModule mod_ssl.c>

Listen 443
SSLCertificateFile /etc/httpd/cert/www.domena1.tld.crt
SSLCertificateKeyFile /etc/httpd/cert/www.domena1.tld.key
SSLCACertificateFile /etc/https/cert/CAcert.pem

</IfModule>

a httpd-vhost.conf:
<VirtualHost *:443>
ServerName jedna.domena1.tld
DocumentRoot /var/www/htdocs/jedna
</VirtualHost>

<VirtualHost *:443>
ServerName dva.domena1.tld
ProxyPass / https://192.168.0.103:631/
ProxyPassReverse / https://192.168.0.103:631/
ProxyRequests Off
ProxyPreserveHost On
</VirtualHost>


Samozřejmě to takto nefunguje, ale vůbec nevím čeho se chytit
24.6.2016 11:45 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
Pokud byste měl certifikát pro obě domény (jak jste chtěl), takhle by to fungovalo.

Pokud chcete použít SNI, pouze přesunete definice SSL do konfigurace virtuálních hostů:
<VirtualHost *:443>
 ServerName jedna.domena1.tld
 DocumentRoot /var/www/htdocs/jedna

  SSLCertificateFile /etc/httpd/cert/jedna.domena1.tld.crt
  SSLCertificateKeyFile /etc/httpd/cert/jedna.domena1.tld.key
  SSLCACertificateFile /etc/https/cert/CAcert.pem
</VirtualHost>

<VirtualHost *:443>
  ServerName dva.domena1.tld
  ProxyPass / https://192.168.0.103:631/
  ProxyPassReverse / https://192.168.0.103:631/
  ProxyRequests Off
  ProxyPreserveHost On
  
  SSLCertificateFile /etc/httpd/cert/dva.domena1.tld.crt
  SSLCertificateKeyFile /etc/httpd/cert/dva.domena1.tld.key
  SSLCACertificateFile /etc/https/cert/CAcert.pem
</VirtualHost>
24.6.2016 12:54 TiVek
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
no ale bohužel to tak nefunguje apache v této konfiguraci (se společným certifikátem) vypíše:
[Fri Jun 24 12:50:20 2016] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
a ukončí se
24.6.2016 13:03 NN
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
Ma povoleny NameVirtualHost?
24.6.2016 13:17 TiVek
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
toto?

NameVirtualHost *:443
24.6.2016 13:29 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
Varování by nemělo být důvodem pro ukončení serveru, není tam ještě jiná chyba?

Jakou tam máte verzi Apache a OpenSSL? Máte OpenSSL s podporou SNI?
24.6.2016 14:34 TiVek
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
pokročil jsem trošku dál, apache už nehlásí chybu po startu, nyní spadne až pár vteřin poté log:
[Fri Jun 24 14:30:20 2016] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Fri Jun 24 14:30:20 2016] [warn] RSA server certificate CommonName (CN) `domena.cz' does NOT match server name!?
[Fri Jun 24 14:30:20 2016] [error] Illegal attempt to re-initialise SSL for server (theoretically shouldn't happen!)
už nevím co vše jsem upravil, takže posílám i upravené konfiguráky:

httpd.conf


Listen 443


    SSLEngine On 
    SSLCertificateFile /etc/httpd/crt2/domena.cz.crt
    SSLCertificateKeyFile /etc/httpd/crt2/domena.cz.key   

    SSLSessionCache none

httpd-vhost.conf (soubor začíná několika vhosty na http a pokračuje tímto)


NameVirtualHost *:443

<VirtualHost *:443>
    ServerName ssl.domena.cz
    DocumentRoot /var/www/htdocs/ssltest1
</VirtualHost>

<VirtualHost *:443>
    ServerName cam.domena.cz
    DocumentRoot /var/www/htdocs/ssltest2
</VirtualHost>

v následující konfiguraci mi to funguje (ale jen pro jednu SSL adresu)

httpd.conf:

Listen 443

httpd-vhost.conf:
NameVirtualHost *:443

<VirtualHost *:443>
    ServerName ssl.domena.cz
    SSLEngine On
    SSLCertificateFile /etc/httpd/crt2/domena.cz.crt
    SSLCertificateKeyFile /etc/httpd/crt2/domena.cz.key   
    DocumentRoot /var/www/htdocs/ssltest1
</VirtualHost>

apache bych měl mít 2.2.10 a OpenSSL 0.9.8i
24.6.2016 15:45 TiVek
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
tohoto řádku jsem se v LOGu zbavil, skutečně jsem použil jinou doménu, než je v ServerName, nový certifikát na korektní doménu to spravil, nicméně dál se mi pokročit nepodařilo
[Fri Jun 24 14:30:20 2016] [warn] RSA server certificate CommonName (CN) `domena.cz' does NOT match server name!?
24.6.2016 18:34 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Apache + VirtualHost + SSL (https) + Reverzní proxy
apache bych měl mít 2.2.10 a OpenSSL 0.9.8i
Tímhle bych začal. To jsou prehistorické nepodporované verze. Tahle verze OpenSSL v sobě vůbec nemusí mít podporu SNI zapnutou, navíc od té doby bylo v OpenSSL nalezeno několik závažných bezpečnostních chyb. Nevím, jestli nějaká distribuce ještě vydává bezpečnostní aktualizace na takhle starou verzi. Pokud nemáte nějaký opravdu dobrý důvod zůstávat u těchhle verzí, snažil bych se aktualizovat na aktuální verze – jinak si přiděláte spoustu problémů prostě jenom tím, že používáte starý software.
[Fri Jun 24 14:30:20 2016] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
Co to máte za divný certifikát? Dal jste tam ten správný, serverový certifikát, nemáte tam místo něj certifikát certifikační autority? Je to certifikát od nějaké uznávané autority, nebo je to vaše autorita, případně self-signed certifikát?
[Fri Jun 24 14:30:20 2016] [error] Illegal attempt to re-initialise SSL for server (theoretically shouldn't happen!)
Shouldn't happen… Začal bych tou aktualizací na nové verze, jinak budete honit takovéhle podivné chyby, a nejspíš stejně skončíte s tím, že je potřeba aktualizovat.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.