SNI aneb virtuální weby přes SSL s jednou IP adresou: stále nic moc

Nasadit moře virtuálních webů na jeden jediný server dnes není vůbec žádný problém (naopak, je to běžná praxe). Vše může bez problémů jet i na jedné IPv4 adrese, kterých, jak asi víte, je teď už kritický nedostatek. Problémem je, že takto mohou weby jet jen přes HTTP, ale už ne přes HTTPS. Proč je tomu tak? Přistupujete-li k nějakému webu, třeba na www.shadow.cz, protože si chcete přečíst tento článek, zašle váš prohlížeč serveru následující požadavek:

GET /blog/1106
Host: www.shadow.cz

Jak je patrné, webový server běžící na příslušné IP adrese z požadavku zjistí, ke kterému webu chcete přistupovat, a zobrazí vám požadovanou stránku. Na jedné IP adrese tak můžou běžet klidně tisíce webů, resp. virtuálních webů (virtual host).

Když chcete k serveru přistupovat přes HTTPS, je situace jiná. Prohlížeč totiž musí nejprve vytvořit šifrované spojení, a teprve potom může přes toto spojení zaslat požadavek s názvem virtuálního webu, ke kterému chcete přistupovat. Webový server tedy nemá žádnou šanci poznat, který certifikát (ty jsou obvykle vydávány pro jednu konkrétní doménu) má prohlížeči naservírovat.

Řešení tohoto problému samozřejmě existuje, je jím rozšíření TLS protokolu (což je nástupce SSL protokolu) s názvem SNI (Server Name Indication), které problém řeší tím, že klient dodá jméno serveru, ke kterému se chce připojit, ještě před tím, než mu server odešle příslušný certifikát.

Situace však není až tak růžová. Servery SNI jakž takž už nějakou dobu podporují. Celé SNI tedy v tuto chvíli stojí a padá především na podpoře prohlížečů. Což o to, takový Firefox podporuje SNI od verze 2.0 (prostředek 2006), ale u IE je situace jiná. Ten sice SNI umí také (od IE 7), jenomže ne na XP, které jsou bohužel stále velice rozšířené. Dokonce ani aktuální osmička na XP stále SNI nepodporuje. Microsoft zde skutečně má očekávání nezklamal, stále brzí pokrok jako brzdila TV Nova digitalizaci. A tak vám na XP nezbyde než uživatelům sdělit, aby vyměnili ošoupaný a neschopný IE za něco produktivnějšího. Jenomže k tomu, abyste to jako provozovatelé webů mohli udělat, musí váš web být schopen toto uživatelům sdělit, což bude těžké, pokud se uživatelům bude zobrazovat chybové hlášení o tom, jak je použitý certifikát nebezpečný a že vzdálený server je určitě nějaký podvodník, který chce uživatele na dálku sežrat. Ach jo.

Abych nenadával jen na Microsoft, ani Google se svým Androidem a Chromem v podpoře SNI neoslnil. Na XP musíte použít až šestku (vydána v září 2010), jinak vám stačí 5.0.342.1 z března 2010. No a co se Androidu týče, tam to možná půjde, ale až ve verzi 3.0, která dosud nebyla vydána. Dřívější verze SNI prostě nepodporují.

Jak dlouho budeme muset čekat, než bude SNI přístupné z běžně dostupného klientského softwaru? Stihneme to ještě před přechodem na IPv6?

Ústavní soud zrušil data retention v ČR

Jak se zdá, neuvěřitelné se stalo realitou. Ústavní soud dnes zrušil povinnost poskytovatelů komunikačních služeb uchovávat až šest měsíců údaje o tom, kdo s kým a jak moc komunikoval. Toto se týká téměř každého uživatele Internetu nebo každého uživatele mobilního telefonu. Příslušné paragrafy zákona o elektronických komunikacích byly do našeho právního řádu včleněny na popud EU (implementace směrnice o data retetnion) a nyní byly shledány protiústavní a zrušeny. Více informací viz web Ústavního soudu. Můj komentář k této věci je krátký, ale výstižný: „Ústavní soude, výborně! Jen tak dál!“.

Záložní MX server v Postfixu

Jak funguje záložní MX server? Tak, že převezme poštu pro primární server, hodí si ji do fronty, a pak se v určitých intervalech snaží poštu opět doručit primárnímu serveru. Zprovoznění této funkcionality je velmi jednoduché, stačí modifikovat /etc/postfix/main.cf následovně:

1) ujistěte se, že v koloně smtpd_recipient_restrictions je umístěno permit_mynetworks před reject_unauth_destination, takto:

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

2) přidejte parametr relaydomains, který bude obsahovat proměnnou $mynetworks a seznam všech domén, pro které chcete daný server učinit záložním, tedy např:

relay_domains = $mydestination, shadow.cz

3) ujistěte se, že příslušné domény, pro které chcete daný server učinit záložním, nejsou uvedeny v mydestination, virtual_alias_domains či virtual_mailbox_domains

4) přidejte prázdný parametr relay_recipient_maps:

relay_recipient_maps =

A je hotovo. Jeden drobný problém ovšem stále zůstává – Postfix drží poštu ve frontě jen určitou dobu – pokud se tedy e-mail nepodaří doručit do této doby, je zahozen a je vygenerováno oznámení o nedoručení zprávy. Tuto dobu je možné ovlivňovat parametrem maximal_queue_lifetime. Výchozí hodnota je 5 dní (5d). Pokud byste chtěli tuto dobu prodloužit třeba na 14 dní, vložíte do výše uvedeného konfiguračního souboru následující řádku:

maximal_queue_lifetime = 14d

Nezapomeňte přidat MX záznam záložního serveru do DNS. Funkcionalitu doporučuji před nasazením otestovat někde nanečisto.

Doplňuji zdroj, ze kterého jsem vycházel a přeji happy hacking.

Publikování na WordPress (nejen) pomocí (G)Vimu

Mám rád Vim. Mám moc rád Vim. Používám ho k editaci textu při každé možné příležitosti. Problémem je, že redakční systémy typu WordPress se obvykle ovládají přes webové rozhraní, a přes toto rozhraní se přidává i obsah. Naštěstí WordPress umožňuje i přístup přes xmlrpc rozhraní, což dává vývojářům možnost vytvořit pro ovládání WordPressu alternativní rozhraní.

Toto využívá celá řada „bloggerů“ coby aplikací pro desktop, ale i pro příkazovou řádku. Jednou z aplikací pro příkazovou řádku je blogpost, napsaný Stuartem Rackhamem v Pythonu. Umí publikovat jako článek nebo stránku soubor formátovaný buď v HTML nebo v AsciiDoc. Netestoval jsem, ale na první pohled vypadá zajímavě.

Nicméně, zpět k hlavnímu tématu – publikovat na WordPress lze i z (G)Vimu, a to pomocí několika pluginů. Já jsem pro své potřeby zvolil aktivně vyvíjený Blogit, u kterého mne jeho vývojář velmi příjemně překvapil, když mnou nahlášený bug úspěšně vyřešil v řádu hodin (nyní už není problém s názvy kategorií v Unicode).

Plugin Blogit přináší do Vimu několik příkazů:

:Blogit ls [blog]          list all posts
:Blogit new [blog]         create a new post
:Blogit this [blog]        make this a blog post
:Blogit edit {id} [blog]   edit a post
:Blogit page {id} [blog]   edit a page
:Blogit commit             commit current post or comments
:Blogit push               publish post
:Blogit unpush             unpublish post
:Blogit rm {id}            remove a post
:Blogit tags               update and list tags and categories
:Blogit preview            preview current post locally

S pomocí nich je velmi snadné vytvořit nový příspěvek nebo editovat stávající, a to včetně práce se stránkami (pages). Blogit nabízí také doplňování tagů a kategorií prostřednictvím C-X C-U.

Co více napsat? Pokud používáte Vim a máte někde blog nebo stránky využívající Wodpress, určitě Blogit vyzkoušejte. Pokud používáte jiný CMS, a rádi byste editovali texty příspěvků ve Vimu, můžete použít plugin do Firefoxu s názvem Vimperator, který vám z Firefoxu udělá tak trochu Vim (z hlediska ovládání) a umožní vám upravovat formulářová pole GVimem prostřednictvím C-I.

No a pokud máte rádi Emacs, určitě znáte Conkeror.

Návod na restrictions v Postfixu

Poslední dobou příliš nestíhám psát články do blogu, tak zkusím alespoň odkázat na velmi pěkný návod a velmi obsáhlou dokumentaci, kde si můžete dohledat v návodu neprobrané volby. Přidám ještě trošku kratší dokument na stejné téma. Mohl bych také odkázat na vynikající knihu o Postfixu s názvem Postfix od autorů Ralf Hildebrandt a Patrick Koetter. Seženete ji přirozeně i v českém jazyce ve vašem oblíbeném knihkupectví.