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ší  
  • Edge
  • Internet Explorer 7.0 a novější (na operačním systému XP musí být nainstalován Service Pack 3)
  • Opera 8.0 s povolenou podporou TLS a novější.

Ostatní s podporou SNI:

  • cURL 7.18.1 a novější  
  • wget 1.14 a novější
  • JAVA 1.7 a novější
  • Perl 1.56 a novější  
  • PHP 5.3 a novější
  • Python 2.7.9 a novější  
  • Ruby 2.0 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 VirtualHostu:

<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ílají všechny 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)

AlpiroSSL

  • Kompatibilní s Microsoft® Exchange™ Server

již za 329 Kč

Zabezpečte:

PositiveSSL UC/SAN

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

PositiveSSL EV UC/SAN

GeoTrust QuickSSL Premium

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

GeoTrust True BusinessID EV

Thawte Web Server

  • pro 2-25 domén
  • Prestižní CA
  • Záruka $1,250,000
  • Již za 7 290 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.

EV SSL certifikáty

Chraňte svou reputaci a zajistěte maximální důvěryhodnost s TLS/SSL certifikátem s EV.

Multidoménové (SAN)

Skonsolidujte všechny své SSL certifikáty do jednoho multi-doménového SSL certifikátu!

Uživatel SSL Přihlášení

Zavřít

Přejít k registraci

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 se všemi Pouze nezbytné