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.pemSprá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.pemTakž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 renewKlient 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.confA 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.comVyšš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 brokenJe to z dvoch dôvodov:
- Na svojom serveri nemám súbor cert.pem a chain.pem.
- 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.pemZnova spustite príkaz na obnovenie certifikátu.
sudo letsencrypt renewTentokrát som dostal túto chybu:
max() arg is an empty sequenceTá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.pemPotom znova vytvorte symbolické odkazy. Teraz môžem bez problémov obnoviť svoj certifikát.