SNI — více SSL certifikátů na jediné IP adrese

Dříve bylo nutností vyhradit pro každou zabezpečenou doménu vlastní IP adresu. To ovšem bylo velmi nepraktické zejména pro poskytovatele hostingových služeb, kteří museli přiřadit vlastní IP adresu pro každý VirtualHost, který chtěl zákazník zabezpečit SSL certifikátem. Na sdílené IP adrese pak bylo možné zabezpečit více VirtualHostů jen za předpokladu, že byl použit jiný (nestandardní) port než 443 (HTTPS) — to je ovšem také nepraktické, protože by uživatel musel na danou stránku přistupovat se znalostí konkrétního čísla portu (například https://www.ssls.cz:12345/). Zároveň by přístup vůbec nebyl možný například v internetových kavárnách a na firemních sítích, kde mohou být nestandardní porty blokovány.

Zabezpečení více domén na jedné IP adrese lze také vyřešit multidoménovým SSL certifikátem (tzv. UC/SAN certifikát).

Navíc dnes, kdy již IPv4 adresy prakticky nejsou nazbyt, mohou roční náklady na vlastní IPv4 adresu překročit náklady na samotné SSL certifikáty dokonce až několikanásobně. Lze to však vyřešit i s jedinou sdílenou IP adresou, a přitom to není žádná novinka ani žádná velká věda — je to velice jednoduché.

Rozšíření SSL/TLS protokolu

Řešení přichází s rozšířením SSL/TLS protokolu nazývaném SNI (Server Name Indication se specifikací v RFC 4366), které klientskému počítači umožňuje na začátku komunikace se serverem připojit název hostitele. Použitím metody SNI (Apache mod_ssl) tedy můžete na jedné IP adrese sdílet více VirtualHostů a pro každý mít vlastní SSL certifikát.

Co potřebuji pro SNI řešení?

Na straně serveru toho moc dělat nemusíte — níže uvedené nastavení je předpokladem a ve valné většině případů postačí výchozí nastavení aktuálních verzí Apache a OpenSSL.

Apache Apache Tomcat nginx Microsoft IIS IBM HTTP Server
2.2.12+ 9+ 0.5.23+ 8+ 9.0.0+
  • OpenSSL verze 0.9.8k, která již má ve výchozí konfiguraci povolené TLS rozšíření. Podpora TLS je možná již u OpenSSL verze 0.9.8f, ovšem s ruční konfigurací. Verzi OpenSSL zjistíte jednoduchým příkazem openssl version.
  • Apache server musí být nakofigurován s podporou mod_ssl a běžet jako run-time (init.d) proces.

Podpora SNI je potřeba i ze strany webového prohlížeče na klientském počítači. SNI podporují:

  • Google Chrome,
  • Firefox 2.0 a novější,
  • Safari 3.2.1 a novější,
  • Internet Explorer 7.0 a novější (na operačním systému XP musí být nainstalován Service Pack 3) i
  • Opera 8.0 s povolenou podporou TLS a novější.

Jak ověřím podporu SNI na serveru?

Nejprve vytvořte dva různé VirtualHosty se sdílenou IP adresou a přiřaďte každé příslušný SSL certifikát. Jak to udělat, se dočtete ve článku Instalace SSL.

Ověření podpory SNI na serveru pak závisí na typu chybové hlášky. Pakliže server při startu hlásí "You should not use name-based virtual hosts in conjunction with SSL!", pak byl Apache nakonfigurován bez podpory SNI rozšíření. Naopak pokud je Apache správně nakonfigurován s podporou SNI, mělo by se objevit varovné hlášení ve znění podobnému tomuto: "[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)".

Jiným problémem by bylo, kdyby se v Apache log souboru objevilo "[error] No hostname was provided via SNI for a name based virtual host" — to by šlo o chybějící podporu SNI ve webovém prohlížeči klientského počítače. S tím bychom se dnes ovšem již setkat neměli, nanejvýš by se jednalo o uživatele zastaralých Internet Explorer na již nepodporovaném systému Windows XP (Windows Vista, 7 a 8 mají plnou podporu SNI zabudovanou). V takovém případě bude požadavek při výchozí konfiguraci Apache zpracován jako kdyby SNI podporu neměl (tedy standardním způsobem bez SNI).

Konfigurace serveru s podporou SNI

  • Společnost Alpiro je prodejcem SSL certifikátů a digitálních osobních (S/MIME) certifikátů. Instalaci SSL certifikátů zajišťuje sám klient vlastními silami a prostředky. Společnost Alpiro nenese odpovědnost za případné komplikace s instalací certifikátu na server. V případě obtíží s instalací certifikátu se obraťte na výrobce serverového softwaru nebo příslušnou dokumentaci, kterou si můžete od výrobce vyžádat.
  • Přestože byl postup instalace SSL certifikátu podle tohoto návodu úspěšně otestován, mějtě na paměti, že tento návod je pouze příkladný a nemusí odpovídat konkrétní konfiguraci nebo verzi vašeho serveru. Společnost Alpiro neručí za jakékoliv případné škody způsobené použitím tohoto materiálu.

Ujistěte se, že Apache naslouchá na portu 443 (HTTPS) a že naslouchá pro všechny VirtualHosty na portu 443:

    Listen 443
NameVirtualHost *:443

Přestože se to týká prakticky jen prohlížeče Internet Explorer na již nepodporovaných Windows XP, ujistíme se, že server bude přijímat i požadavky od webových prohlížečů bez podpory SNI přidáním následující direktivy:

    SSLStrictSNIVHostCheck off

První definovaný VirtualHost je výchozí — ten bude vyřizovat požadavky, které neodpovídají ServerName žádného jiného VirtualHosta:

    <VirtualHost 1.2.3.4:443>
      ServerName www.ssls.cz
      ServerAlias ssls.cz
      DocumentRoot /public_html/www.ssls.cz
      SSLEngine on
      SSLProtocol all -SSLv3 -SSLv2
      SSLCertificateFile /cesta/k/ssls.cz.crt
      SSLCertificateKeyFile /cesta/k/ssls.cz.key
      SSLCACertificateFile /cesta/k/ca_intermediate_1.crt
      SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
      SSLHonorCipherOrder on
      SSLCompression off
      Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    </VirtualHost>

Všimněte si doporučené konfigurace hlavičky "Strict-Transport-Security" (HSTS). Více o konfiguraci HSTS…

Následovat pak mohou ostatní VirtualHosty:

    <VirtualHost 1.2.3.4:443>
      ServerName www.alpiro.cz
      ServerAlias alpiro.cz
      DocumentRoot /public_html/www.alpiro.cz
      SSLEngine on
      SSLProtocol all -SSLv3 -SSLv2
      SSLCertificateFile /cesta/k/alpiro.cz.crt
      SSLCertificateKeyFile /cesta/k/alpiro.cz.key
      SSLCACertificateFile /cesta/k/ca_intermediate_2.crt
      SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
      SSLHonorCipherOrder on
      SSLCompression off
      Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    </VirtualHost>

Všimněte si, že jsme u obou VirtualHost použili stejnou IP adresu — tu nahraďte příslušnou IP adresou serveru.

Po instalaci SSL certifikátu důrazně doporučujeme ověřit si, že server klientům odesílá intermediate certifikáty ve správném pořadí. To můžete snadno ověřit pomocí nástroje SSL Tester.

Jak to spojení vůbec probíhá?

Ze všecho nejdříve Apache na základě požadavku klientského počítače standardní cestou ověří přítomnost nastavení odpovídající IP adresy a portu standardní cestou bez SNI rozšíření (na bázi IP/port).

Poté Apache ověří přítomnost NameVirtualHost, který musí být uveden před prvním VirtualHost. Pokud odpovídající NameVirtualHost není přítomný, Apache nemůže pokračovat ve výběru z VirtualHostů pomocí SNI.

Pakliže TLS požadavek na spojení od klientského počítače obsahuje i název hostitele, Apache jej porovná s hodnotami direktiv ServerName a ServerAlias ve VirtualHostech a následně vybere první odpovídající VirtualHost.

Takové spojení tedy neprobíhá na základě požadavku v HTTP hlavičce, ale na základě informací v TLS požadavku. Za poznámku stojí skutečnost, že se při tomto procesu nedbá na obsah samotných SSL certifikátů — ověření validity SSL certifikátu probíhá až potom.

Multidoménové SSL certifikáty (UC/SAN)

PositiveSSL UC/SAN

  • pro 3-200 domén
  • Nejžádanější SAN
  • Záruka $10,000
  • od 239 Kč

PositiveSSL EV UC/SAN

GeoTrust QuickSSL Premium

  • pro 1 doménu + 4 subdomény
  • Prestižní CA
  • Záruka $500,000
  • od 2 290 Kč

GeoTrust True BusinessID EV

Thawte Web Server

  • pro 2-25 domén
  • Prestižní CA
  • Záruka $1,250,000
  • Již za 4 470 Kč

Thawte
Web Server EV

SSL certifikát — 169 Kč

Přejděte na důvěryhodný SSL certifikát AlpiroSSL se silným až 256-bit šifrováním a ušetřete.

Zelený adresní řádek

Nepřehlédnutelný indikátor důvěryhodného webu, díky kterému zvýšíte konverze a zisky.

Multidoménové UC/SAN

Skonsolidujte všechny Vaše SSL certifikáty do jednoho multidoménového SSL certifikátu!

Uživatel SSL Přihlášení

Zavřít

Uživatel SSL Nový zákazník

Zavřít
Zavřít
Zavřít
Doporučené SSL certifikáty
Zavřít
Máte dotaz?
Napište nám
Nenašli jste řešení na stránce Podpora a Nejčastější dotazy?
Jméno a příjmení: E-mail:
Odesílám…Odeslat
Tato stránka používá soubory cookies. více informací
Souhlasím