Poďme zašifrovať bezplatné chyby pri obnovení certifikátu TLS/SSL


Keď som spustil túto webovú stránku v roku 2015, používal som veľmi lacný VPS, ktorý stojí 10 dolárov ročne. Získal som bezplatný certifikát TLS/SSL od spoločnosti Let’s Encrypt a nakonfiguroval som Nginx na obsluhu HTTPS.

V marci 2016 som migroval svoju webovú stránku na digitálny cloudový server Ocean (bez pridruženého prepojenia) SSD, ktorý stojí 5 USD mesačne (získajte bezplatný kredit 10 USD z môjho pridruženého odkazu). Aby som mohol pokračovať v poskytovaní prenosu HTTPS, musím tiež preniesť svoj certifikát TLS/SSL na nový server.

Nginx vyžaduje dva súbory na obsluhu prenosu HTTPS: úplný reťazový certifikát a váš súkromný kľúč. V prípade Let’s Encrypt sa tieto dva súbory nachádzajú na adrese

/etc/letsencrypt/live/your-site.com/fullchain.pem

/etc/letsencrypt/live/your-site.com/privkey.pem

Správne povedané, tieto dva súbory sú symbolické odkazy, ktoré ukazujú na nasledujúce dva súbory.

/etc/letsencrypt/archive/yoursite.com/fullchain1.pem

/etc/letsencrypt/archive/yoursite.com/privkey1.pem

Takže som si myslel, že jednoducho potrebujem skopírovať vyššie uvedené dva súbory na môj server Digital Ocean SSD a urobil som tak.

Problém obnovy certifikátu

Ako možno viete, certifikáty Let’s Encrypt vydržia 90 dní. Svoje certifikáty si musíte obnovovať každé 3 mesiace.

Mal som problémy s obnovením svojich certifikátov, pretože na serveri mám iba fullchain1.pem a privkey1.pem. Všetky ostatné súbory súvisiace s mojimi súbormi Let's encrypt sú preč. Tieto dva súbory umožňujú Nginxu obsluhovať prenos HTTPS, ale pri obnove certifikátov nestačia.

Príkaz, ktorý používam na obnovenie certifikátu, je

sudo letsencrypt renew

Klient Let’s Encrypt sa však nepokúsil obnoviť môj certifikát. Je to preto, že klient sa spolieha na konfiguračný súbor obnovy, aby vedel, ako obnoviť vaše certifikáty, t. j. použiť aký plugin a aké možnosti.

Našiel som teda vzorový konfiguračný súbor obnovenia a vytvoril som ho pomocou nižšie uvedeného príkazu.

sudo nano /etc/letsencrypt/renewal/linux-terminal.com.conf

A vložte do súboru nasledujúce riadky.

cert = /etc/letsencrypt/live/linux-terminal.com/cert.pem
privkey = /etc/letsencrypt/live/linux-terminal.com/privkey.pem
chain = /etc/letsencrypt/live/linux-terminal.com/chain.pem
fullchain = /etc/letsencrypt/live/linux-terminal.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = None
account = 7b3fa88c32887c234036234f6cc6358ab
webroot_path = /usr/share/nginx/linux-terminal.com,
[[webroot_map]]
linux-terminal.com = /usr/share/nginx/linux-terminal.com

Vyššie uvedená konfigurácia hovorí klientovi Let's Encrypt, aby na obnovenie certifikátu použil doplnok Webroot. Potom znova spustite príkaz na obnovenie. Prvá chyba, na ktorú som narazil, bola:

renewal configuration file is broken

Je to z dvoch dôvodov:

  1. Na svojom serveri nemám súbor cert.pem a chain.pem.
  2. Namiesto symbolického odkazu používam skutočné súbory.

cert.pem je váš certifikát vydaný Let’s Encrypt a chain.pem je prechodný certifikát Let’s Encrypt, ktorý vydáva koreňová certifikačná autorita. Tieto dva súbory sa používajú na vytvorenie súboru fullchain.pem. Môžete nájsť, že cert.pem je nad reťazcom.pem v súbore fullchain.pem.

Takže ak chcete získať cert.pem a chain.pem, jednoducho skopírujte hornú polovicu fullchain.pem a uložte ju do súboru s názvom cert.pem. Potom skopírujte spodnú polovicu fullchain.pem a uložte ju do súboru s názvom chain.pem.

Teraz mám cert.pem, chain.pem fullchain.pem a privkey.pem v adresári /etc/letsencrypt/archive/linux-terminal.com.

Potom vytvorte symbolické odkazy.

sudo ln -sf /etc/letsencrypt/archive/linux-terminal.com/cert.pem /etc/letsencrypt/live/linux-terminal.com/cert.pem

sudo ln -sf /etc/letsencrypt/archive/linux-terminal.com/chain.pem /etc/letsencrypt/live/linux-terminal.com/chain.pem

sudo ln -sf /etc/letsencrypt/archive/linux-terminal.com/fullchain.pem /etc/letsencrypt/live/linux-terminal.com/fullchain.pem

sudo ln -sf /etc/letsencrypt/archive/linux-terminal.com/privkey.pem /etc/letsencrypt/live/linux-terminal.com/privkey.pem

Znova spustite príkaz na obnovenie certifikátu.

sudo letsencrypt renew

Tentokrát som dostal túto chybu:

max() arg is an empty sequence

Táto vyššie uvedená správa je bežnou chybovou správou v pythone. Nepovedalo vám však, čo sa skutočne stalo. Aby som túto chybu vyriešil, musím jednoducho premenovať štyri súbory pem pod /etc/letsencrypt/archive/linux-terminal.com/.

cd /etc/letsencrypt/archive/linux-terminal.com

mv cert.pem cert1.pem

mv chain.pem chain1.pem

mv fullchain.pem fullchain1.pem

mv privkey.pem privekey1.pem

Potom znova vytvorte symbolické odkazy. Teraz môžem bez problémov obnoviť svoj certifikát.

Súvisiace články