Archiv pro měsíc: Listopad 2020

HTTPS na lokální síti

Vždycky jsem chtěl zabránit vyhozování zkaženého jídla a už před dlouhými lety jsem měl rozpracovanou databázi s desktopovým programem na čtení čárových kódů, která by mi v tom pomohla. Bohužel jsme to nikdy nedotáhl do produkčního stavu a tak jsem byl moc rád, když jsem našel PHP aplikaci nazvanou grocy, která dělá všechno co jsem zamýšlel a ještě hodně dalšího.

Tolik k motivaci. grocy samozřejmě funguje bez https. Apache web server běží na prvním RaspberryPi model B a v prohlížeči by to mohlo lítat rychleji, ale nemůžu si prakticky vůbec stěžovat. Web server není vystaven do internetu, takže je dostupný jen z vnitřní sítě.

Aby Chrome na Androidu povolil používání kamery pro čtení čárových kódů, je třeba k serveru přistupovat přes https. To se dá vyřešit sebou podepsaným certifikátem. Při přístupu ale musí uživatel potvrdit vyjímku, což není nic pěkného.

Pak je tady samozřejmě Let’s Encrypt. Takový certifikát používám na internetu kvůli potřebě při rozesílání notifikací. Jenže takový certifikát je vázaný na doménové jméno. RaspberryPi, ale žádné nemá, chodím tam přes jeho hostname. To má elegantní řešení. IP adresa jako IP adresa. V DNS záznamu domény se prostě vytvoří položka, která se přeloží na lokální IP, není problém.

Let’s Encrypt si ověřuje vlastnictví domény dvojím způsobem. Http-challenge kdy na danou webovou stránku umístíte soubor s přikázaným obsahem, čímž se ověří, že ovládáte daný web. To ale nebyla schůdná cesta, protože, jak jsem řekl, jsme jen na vnitřní síti. Z intenetu se na webserver dostat nedá, alespoň v to doufám. Druhý způsob ověření je dns-challenge. Princip je stejný. Máte za úkol vytvořit dns záznam s přikázaným obsahem a tím potrvrdíte, že ovládáte doménu, ke které chcete získat certifikát.

Prakticky jde o jedenoduchou záležitost. Pokud víme vše, co je popsané výše, stačí nainstalovat certbot na RaspberryPi, nebo jiný stroj, na kterém potřebujete webserver s https.
sudo certbot certonly --manual --preferred-challenges dns
Budete vyzváni k zadání adresy serveru. V mém případě něco jako raspi.paws.cz

Následně budete vyzvání k vytvoření záznamu v DNS. To bude vypadat asi takhle:
Please deploy a DNS TXT record under the name
_acme-challenge.raspi.paws.cz with the following value:

****************************_**************

Before continuing, verify the record is deployed.

Nyní je třeba vytvořit záznam, v mém případě online u správce domény (Web4U – při objednání služeb můžete použít můj referenční kód  http://www.web4u.cz/rid/33899) a počkat, až bude dostupný z internetu. Z přikazové řádky může průběžné spouštět:
dig -t txt _acme-challenge.raspi.paws.cz

Ve chvíli, kdy se vrátí správná hodnota, je možné v certbotu potvrdit přechod na další krok a máme hotovo. Certifikát je na počítači.

Zbývá už jen nakonfigurovat Apache a je úplně hotovo.