Ako získať SSL certifikát zadarmo cez Let's Encrypt pre váš node.js web

Publikoval Michal Kočí dňa 07.01.2016 o 18:16 v kategórii Node.js

V máji som tu popisoval, ako získať SSL certifikát zadarmo cez StartSSL. Odvtedy sa situácia ešte zlepšila a už niekoľko týždňov sa dá SSL získať automatizovane a ešte ľahšie cez Let's Encrypt. Dnes sa pozrieme ako na to.

Let's Encrypt je nová certifikačná autorita, ktorá o tvrdí že je zadarmo, automatizovaná a otvorená. Stále je síce "len" vo verejnej bete, ale to vás určite neodradí, najmä keď za ňou stoja sponzori ako Mozilla, cisco či Facebook.

Všetko ide plne automatizovane

Najväčší rozdiel oproti bežným certifikačným autoritám je, že proces získania certifikátu je plne automatizovaný. Z terminálu (príkazového riadku) spustíte potrebný príkaz, ten sa spojí s certifikačnou autoritou, overí potrebné veci a ak všetko sedí, vygeneruje a uloží vám na disk certifikát. Ten následne použijete v konfigurácii vášho webového servera resp. v reverznej proxy (nginx).

Celý proces necháte bežať na vašom servery, čo vám zabezpečí dve podmienky úspešného overenia:

  • žiadosť pôjde zo servera, na ktorom bude certifikát použitý
  • nástroj si vie do vášho webu pridať súbor, cez ktorý si overí, že doménu vlastníte

Ja celý postup ukážem pre scenár, kedy je web napísany v node.js, pred ním stojí reverzná proxy (nginx) a celé to beží na Raspberry PI na distribúcii Raspbian.

Stiahnutie nástroja

Nástroj od Let's Encrypt, ktorý sa asi neprekvapivo volá letsencrypt, je dostupný tu na GitHube a preto si ho najskôr lokálne naklonujte. Tento príkaz spustite v adresári, kde si ukladáte git veci (napríklad ~/dev/git)

git clone https://github.com/letsencrypt/letsencrypt

Spustenie nástroja

Nástroj letsencrypt obsahuje niekoľko pluginov, ich celý výčet nájdete v jeho dokumentácii, ktorú verme ešte trochu učešú, lebo niektoré informácie sa v nej veľmi obtiažne dohľadávajú. Ktorý plugin použijete závisí od vášho scenára.

V našom scenári použijeme plugin Webroot. Ten sa hodí v prípade, že máte bežiaci web server a nechcete aby bol tento počas získavania certifikátu zastavený.

Nástroj v tomto prípade potrebuje od vás vedieť najmä doménu, pre ktorý certifikát požadujete, ale tiež adresár, v ktorom sa nachádza vaša aplikácia. Pri node.js webe je to adresár, ktorý poskytuje statické súbory v roote webu.

Ak napríklad váš web máte na serveri v adresári /var/www/myawesomeweb/ a vo vašom node.js webe využívajúcom Express zapojený middleware static, napríklad takto:

app.use(express.static('public'));
Potom adresár, kde chcete aby nástroj ukladal súbory, ktoré použije na overenie bude /var/www/myawesomeweb/public/.

Okrem týchto dvoch údajov musíte uviesť pri generovaní váš e-mail a ideálne aj súhlas s Terms & Conditions. Celý príkaz (vrátane prepnutia sa do adresára) tak môže vyzerať nasledovne:

cd letsencrypt
./letsencrypt-auto certonly --webroot --email me@myawesomeweb.com --agree-tos -w /var/www/myawesomeweb/public/ -d www.myawesomeweb.com
Nahradiť v ňom samozrejme musíte adresár (parameter -w), email (parameter --email) a doménu (parameter -d)

Vygenerované certifikáty

Ak bolo spustenie nástroja úspešné, vygenerovali sa vám certifikáty a uložili sa vám do adresára /etc/letsencrypt/live/www.myawesomeweb.com/.

Ale pozor, ich platnosť je nastavená na 90 dní.

Málo? Dosť? Podľa mňa dosť. Tým, že je celý proces plne automatizovaný, stačí vám raz za 90 dní opakovane spustiť ten istý príkaz a vygenerujú a stiahnu sa vám nové, zase 90 dní platné certifikáty.

Automatická aktualizácia certifikátov

Ak bežíte na linuxovej distribúcii, ako predpokladá tento náš scenár, potom stačí použiť cron. Ak by ste si chceli nastaviť generovanie vždy prvého v mesiaci, o druhej hodine rannej, spustite si editáciu cron tabuľky:

crontab -e

Doplňte riadok:

0 2 1 */2 *  /home/user/dev/git/letsencrypt/letsencrypt-auto certonly --webroot --email me@myawesomeweb.com --agree-tos -w /var/www/myawesomeweb/public/ -d www.myawesomeweb.com

A zmeny uložte. Samozrejme, zase platí upravte si patrične parametre ako aj cestu k nástroju letsencrypt.

Pokiaľ chcete spúšťať úlohu v iných intervaloch, len zmeňte definíciu úlohy. Ak neviete ako na to, existuje parádny nástroj crontab.guru, ktorý vám s tým pomôže.

Konfigurácia nginx

Posledné čo musíte spraviť a to práve raz, keď budete mať certifikáty úspešne uložené na disku je v nginx nakonfigurovať SSL pre váš web.

Ak nižšie uvedenému vôbec nerozumiete, možno vám pomôžu moje články Raspberry Pi a prvá Node.js aplikácia a Node.js, Raspberry Pi a nginx - viac webov na jednom porte.

Čo takto sa rýchlo a ľahko naučiť programovať webové aplikácie v Javascripte? Bežiace na Node.js? Zaujímavé? Jednoduché! Rád vás to naučím na mojom kurze Node.js - serverové aplikácie v Javascripte.

V sites-available si dajte editovať konfiguračný súbor vášho webu a pridajte do neho sekciu, ktorá bude vyzerať takto nejak:

server {
  listen 443;
  server_name www.myawesomeweb.com;
  access_log /var/log/nginx/myawesomeweb.log;
  ssl on;
  ssl_certificate /etc/letsencrypt/live/www.myawesomeweb.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.myawesomeweb.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_dhparam /etc/nginx/conf.d/dhparam.pem;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarder-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://127.0.0.1:8001;
    proxy_redirect off;
  }
}

Prvá časť konfigurácie definuje port na ktorom počúvate (443), doménu a log súbor. Druhá časť konfigurácie zapína SSL, definuje kde sa nachádzajú certifikáty.

V druhej časti máte navyše konfiguráciu SSL tak, aby bola bezpečná a v zmysle best practices. Môžete si ju upraviť podľa svojich potrieb (inšpirujte sa tu, nájdete tu aj ako vygenerovať dhparam.pem) a potom otestovať vaše SSL nastavenia tu.

No a v tretej časti nájdete nastavenia proxy, smerovania na váš web, ktorý vám beží ako node.js, v tomto prípade na porte 8001.

Pokiaľ už na HTTP web prevádzkovať nechcete, nezabudnite si do konfigurácie pridať aj presmerovanie na HTTPS:

server {
  listen 80;
  server_name www.myawesomeweb.com;
  return 301 https://www.myawesomeweb.com$request_uri;
}

Jednoduchšie nez to vyzerá

Snáď to na prvý pohľad nevyzerá moc komplikovane, ale verím, že nie. A ak aj áno, naozaj to nie je komplikované. Stačí si to celé raz nakonfigurovať a potom na to viac menej s kľudom zabudnúť.

Takže nezabudnite, na váš ďalší web už rovno na začiatku dajte SSL, je to zadarmo a dramaticky to zvyšuje bezpečnosť prenášaných dát, čo sa vám hodí na každom webe.

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.

Komentáre

Piotr dňa 15.03.2016 o 16:39 - Prečo nie musite použiť https v Node.js?

Dakujem za tento príspevok, veľa mi pomohol. Mám jednu otazku: nginx stačí? Netreba použiť aj https v Node.js? V internete možna najsť mnoho príspevkov, kde použivaju aj ngninx proxy, aj https module v Node.js, prečo? Zdravím z Poľska :)

Mifko dňa 18.03.2016 o 18:52 - re: Prečo nie musite použiť https v Node.js?

Dobrý deň, Piotr. Nginx stačí, každý request od užívateľov ide na neho, takže ide cez HTTPS. To, že potom nginx komunikuje (preposiela requesty) s vašim Node.js webom už len cez HTTP vám vadiť v zásade nemusí, ak sú oba na tom istom počítači alebo v tej istej sieti. Pekný deň do Poľska, Mifko

Gino Shockley dňa 15.06.2018 o 05:43 - Make Your Sites up to 10x Faster In 30 Seconds With The Cache That Beats All Competitors

Make Your WordPress Sites up to 10x Faster In 30 Seconds With The Cache That Beats All Competitors !! Speed Up Your WP Sites Before The July 2018 Google Speed Slap... Speed is a Traffic Killer... More Than 50% of Visitors Leave... If a Site Takes 3+ Seconds To Load + 79% of Visitors Who Have Trouble loading a Page Won't Return ** Here's What You're Getting Today: ** - BANDWIDTH REDUCTION Bad Bot Blocking Hotlink Blocking Smart Cache Clearing** Smart Cache Preloading** - CACHE FEATURES Gzip Compression & Minification Javascript Defer Feature Page & Post Caching Enable/Disable Caching on single Pages/Posts Fonts Optimisation Cloudflare, Multisite, Ecom & Page Builder Friendly Cache Preloading Newbie Friendly ** GET ACCESS NOW ==> https://jvz4.com/c/1014397/301007 ** GET FREE BONUSES ** - FREE BONUS 1 - WP Optimiser WP Optimiser is a combination of quick fixes & diagnostics that give you advice on how to fix your site speed issues - more importantly it covers all 6 Primary site optimisation factors - at best our competitors cover just 2 factors & charge more. - FREE BONUS 2 - WP Easy Pages OK it's no secret that WordPress is natively slow - the WP framework makes this worse - which is why it's not best fit for building landing pages - FREE BONUS 3 - Conversion Boost 2.0 Creating split test pages & personalized pages is a pain in WordPress you literally have to duplicate & edit each page one by one. This puts your site at risk of getting a duplicate content penalty ** GET ACCESS NOW ==> https://jvz4.com/c/1014397/301007 =============================================== - IF YOU DO NOT WANT TO RECEIVE THIS MESSAGE !! - SEND EMAIL WITH YOUR SITE THAT YOU DO NOT WANT TO BE CONTACTED ==> unsubscribe_for@myself.com <== ===============================================

Quyen Jenkinson dňa 15.07.2018 o 09:21 - The 2 Week Diet is an extreme rapid weight loss system !!

The 2 Week Diet is an extreme rapid weight loss system that can help you lose up to 16 pounds of pure body fat in just 2 weeks! Get your personalized diet plan for 2 week weight loss, our 14 day diet, and how to lose weight in 2 weeks from our official website. Get Plan == >> http://bit.ly/The_2_Week_Diet_Ok

Pridať komentár

Máš niečo zaujímavé povedať k článku? Pridaj to k článku ako komentár. Spam, reklamu alebo inak nerelevantné komentáre okamžite mažem.

Pridanie komentára sa nepodarilo. Oprav si prosím chyby.