Certbot hlási úspešné obnovenie, súbory na disku nesú nové dátumy a klienti sa stále stretávajú so starou identitou. SoftEther drží svoj SSL certifikát servera vo vlastnej konfigurácii na úrovni servera, takže nový súbor na disku nič nezmení, kým sa neimportuje koncový certifikát a jeho kľúč. Nasledujúci postup pokrýva jeden ručný import, obal, ktorý sa spúšťa po každom obnovení, a kontrolu, ktorá číta, čo listener skutočne predkladá. Každý krok zanecháva dôkazy, ktoré môžete po ďalšom obnovení porovnať.

Obnovený súbor nemení identitu servera

Vydanie a nasadenie sú oddelené udalosti s oddelenými režimami zlyhania. Klient ACME zapisuje súbory do adresára línie a zaznamenáva úspech; SoftEther ďalej používa certifikát, ktorý bol naposledy načítaný do jeho konfigurácie. Nulový návratový stav preto opisuje súbory, nie službu, a obe sa môžu rozchádzať, kým sa nikto nepozerá. Berte import ako krok nasadenia a obnovenie ako jeho vstup.

Tento rozdiel vysvetľuje aj mätúce polovičné zlyhanie: starý certifikát funguje až do vypršania platnosti, takže spočiatku nič nevyzerá pokazené. Keď vyprší, všetci klienti zlyhajú naraz, čo vyzerá ako výpadok a nie ako vynechaný krok nasadenia. Kontrola predloženej identity po každom obnovení mení to prekvapenie na rutinné pozorovanie.

Vyberte výzvu, ktorá sedí k listeneru

Certifikát musí pomenovať hostiteľa, ktorého klienti overujú, takže použite verejné DNS meno, nie internú značku alebo adresu. HTTP-01 vyžaduje, aby bola výzva chvíľu zodpovedaná na porte 80, čo je dočasný listener a nikdy dôvod presúvať vlastný port SoftEtheru. DNS-01 preukazuje kontrolu pomocou záznamu a prichádzajúce HTTP vôbec nepotrebuje.

Bezobslužné obnovovanie znamená automatizovanú integráciu DNS s prihlasovacími údajmi obmedzenými na jednu zónu, nie záznam TXT písaný ručne každé dva mesiace. Divoká karta mení typ výzvy, nie potrebu tejto automatizácie. Rozhodnite to skôr, než existuje prvý certifikát, pretože neskoršia zmena typu výzvy znamená siahnuť na konfiguráciu klienta aj firewall súčasne.

Udržujte artefakty v poriadku, kým ste tu. Koncový certifikát a sprostredkujúce certifikáty prichádzajú ako samostatné súbory a ako jeden zlúčený súbor reťazca, súkromný kľúč je opäť zvlášť a import potrebuje reťazec s odpovedajúcim kľúčom, nie verejný certifikát sám.

Importujte reťazec na úrovni servera

Zazálohujte konfiguráciu servera a overte, že sa ešte dostanete na rozhranie správy, než sa dotknete certifikátu. Pripojte sa ako správca servera, nie ako správca Virtual Hubu, pretože certifikát patrí objektu servera. Potom načítajte reťazec a kľúč pomocou absolútnej cesty, zo súborov, ktoré účet spúšťajúci príkaz môže čítať. Všimnite si, že cesty sú absolútne, pretože ich príkaz vyhodnocuje z pracovného adresára procesu, ktorý spustil vpncmd:

ServerCertSet /LOADCERT:/etc/letsencrypt/live/vpn.example.com/fullchain.pem /LOADKEY:/etc/letsencrypt/live/vpn.example.com/privkey.pem

Čítajte výstup príkazu, namiesto toho, aby ste predpokladali úspech, a potom reťazec prečítajte znova, namiesto toho, aby ste verili súboru, ktorý ste odovzdali. Hranica medzi buildmi, ktoré importujú celý balík PEM, a buildmi, ktoré berú iba prvý certifikát, nie je zdokumentovaná na jednom mieste, takže práve kontrola to pre build pred vami rozhodne. Spočítajte certifikáty, ktoré listener predkladá; koncový certifikát bez sprostredkujúcich je podpisom importéra, ktorý spotreboval iba prvý blok.

Udržujte importovaný kľúč čitateľný len pre účet, ktorý spúšťa server, a držte správcovské heslo mimo histórie shellu. Pri tomto prvom importe napíšte heslo do výzvy, namiesto toho, aby ste ho odovzdali ako argument príkazu. Tieto dva návyky nič nestoja a odstraňujú najbežnejší spôsob, akým nasadenie certifikátu prezradí niečo, čo malo chrániť. Urobte to pred prvým importom, nie po ňom.

Zaveste nasadenie, nie obnovenie

Keď ručný import funguje, dajte presne tieto kroky do malého obalu a zavolajte ho z klienta ACME po úspešnom obnovení. Certbot pre hook nastavuje RENEWED_LINEAGE a RENEWED_DOMAINS, takže obal môže pôsobiť na jeden certifikát na stroji, ktorý ich spravuje viac. Filtrujte podľa línie, namiesto toho, aby ste reagovali na každé obnovenie na hostiteľovi. Obal je kód nasadenia, ktorý beží s oprávneniami servera, preto ho skontrolujte ako každý iný skript na tomto mieste.

certbot renew --deploy-hook /usr/local/sbin/softether-deploy.sh

Hook, ktorý beží bez dozoru, potrebuje vlastné chránené úložisko prihlasovacích údajov a signál o zlyhaní, ktorý sa dostane k človeku. Ak vydanie uspeje a import zlyhá, skúste import znova, namiesto toho, aby ste žiadali ďalší certifikát, pretože druhá žiadosť skryje chybu nasadenia za novým súborom. Dokumentácia Certbotu k obnovovaniu jasne hovorí, že beh, ktorý nič neaktualizuje, je normálny výsledok, takže hook je to, čo obe rozlíši.

Porovnajte predložený reťazec so súborom

Čítajte listener, nie disk. Pripojte sa k portu obrátenému ku klientom s menom servera, ktoré klienti používajú, a potom porovnajte odtlačok a dodaný reťazec s líniou, ktorú hook nainštaloval. Pokrývajú to dva príkazy a prvý tiež ukáže, či sprostredkujúce certifikáty vôbec prichádzajú:

openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -showcerts </dev/null 2>/dev/null | grep -c 'BEGIN CERTIFICATE'
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -dates -fingerprint -sha256

Potom vytvorte nové klientske pripojenie, pretože relácie nadviazané pred importom boli autentizované proti predchádzajúcej identite a o novej nič nedokazujú. Ak klienti pripínajú starý koncový certifikát, potrebujú koordinovanú aktualizáciu, aj keď je verejný reťazec platný, a táto úloha patrí do rovnakého runbooku ako obnovenie. Reverzný proxy pred službou môže predkladať dobrý certifikát, zatiaľ čo listener VPN stále drží starý, a preto kontrola musí pomenovať port, ktorý klienti skutočne dosiahnu. Zapíšte odtlačok vedľa dátumu obnovenia, aby ďalšie porovnanie bolo kontrolou, a nie aktom pamäti.

Súvisiace články