SoftEther ServerCertSet: import odnowionego łańcucha za pomocą vpncmd
Odnowiony plik nie zmienia tożsamości serwera SoftEther. Zaimportuj łańcuch przez ServerCertSet, podepnij krok wdrożenia i odczytaj nasłuch.
Certbot zgłasza udane odnowienie, pliki na dysku mają nowe daty, a klienci nadal spotykają starą tożsamość. SoftEther trzyma swój certyfikat SSL serwera we własnej konfiguracji na poziomie serwera, więc nowy plik na dysku niczego nie zmienia, dopóki liść i jego klucz nie zostaną zaimportowane. Poniższa sekwencja obejmuje jeden import ręczny, wrapper uruchamiany po każdym odnowieniu i sprawdzenie, które odczytuje, co nasłuch faktycznie przedstawia. Każdy krok zostawia dowody, które możesz porównać po następnym odnowieniu.
Odnowiony plik nie zmienia tożsamości serwera
Wydanie i wdrożenie to osobne zdarzenia o osobnych trybach awarii. Klient ACME zapisuje pliki w katalogu linii i odnotowuje sukces; SoftEther nadal używa certyfikatu, który został ostatnio wczytany do jego konfiguracji. Zerowy kod wyjścia opisuje więc pliki, a nie usługę, i oba mogą się nie zgadzać, dopóki nikt nie patrzy. Traktuj import jako krok wdrożenia, a odnowienie jako jego wejście.
Ta różnica wyjaśnia też mylącą połowiczną awarię: stary certyfikat działa do wygaśnięcia, więc na początku nic nie wygląda na zepsute. Gdy wygaśnie, wszyscy klienci zawiodą naraz, co wygląda jak awaria, a nie jak pominięty krok wdrożenia. Sprawdzanie prezentowanej tożsamości po każdym odnowieniu zamienia tę niespodziankę w rutynową obserwację.
Wybierz wyzwanie pasujące do nasłuchu
Certyfikat musi nazywać host, który weryfikują klienci, więc użyj publicznej nazwy DNS, a nie wewnętrznej etykiety czy adresu. HTTP-01 wymaga odpowiedzi na wyzwanie na porcie 80 przez chwilę, co jest tymczasowym nasłuchem i nigdy nie jest powodem do przenoszenia własnego portu SoftEther. DNS-01 dowodzi kontroli przez rekord i w ogóle nie potrzebuje przychodzącego HTTP.
Odnowienie bez nadzoru oznacza automatyczną integrację DNS z poświadczeniami ograniczonymi do jednej strefy, a nie rekord TXT wpisywany ręcznie co dwa miesiące. Wieloznacznik zmienia typ wyzwania, nie potrzebę tej automatyzacji. Zdecyduj o tym, zanim powstanie pierwszy certyfikat, bo późniejsza zmiana typu wyzwania oznacza dotknięcie konfiguracji klienta i zapory jednocześnie.
Utrzymuj artefakty w porządku, dopóki tu jesteś. Liść i certyfikaty pośrednie przychodzą jako osobne pliki i jako jeden połączony plik łańcucha, klucz prywatny znów jest osobny, a import potrzebuje łańcucha z pasującym kluczem, a nie samego certyfikatu publicznego.
Zaimportuj łańcuch na poziomie serwera
Zrób kopię zapasową konfiguracji serwera i potwierdź, że nadal docierasz do interfejsu zarządzania, zanim dotkniesz certyfikatu. Połącz się jako administrator serwera, a nie administrator Virtual Hub, bo certyfikat należy do obiektu serwera. Następnie wczytaj łańcuch i klucz po ścieżce bezwzględnej, z plików, które może czytać konto wykonujące polecenie. Zauważ, że ścieżki są bezwzględne, bo polecenie rozwiązuje je z katalogu roboczego procesu, który uruchomił vpncmd:
ServerCertSet /LOADCERT:/etc/letsencrypt/live/vpn.example.com/fullchain.pem /LOADKEY:/etc/letsencrypt/live/vpn.example.com/privkey.pemCzytaj wyjście polecenia, zamiast zakładać sukces, a potem odczytaj łańcuch ponownie, zamiast ufać przekazanemu plikowi. Granica między kompilacjami importującymi cały pakiet PEM a kompilacjami biorącymi tylko pierwszy certyfikat nie jest udokumentowana w jednym miejscu, więc to sprawdzenie rozstrzyga ją dla kompilacji przed tobą. Policz certyfikaty, które przedstawia nasłuch; liść bez certyfikatów pośrednich to podpis importera, który zużył tylko pierwszy blok.
Trzymaj zaimportowany klucz czytelnym tylko dla konta uruchamiającego serwer, a hasło zarządzania poza historią powłoki. Przy tym pierwszym imporcie wpisz hasło w zachęcie, zamiast przekazywać je jako argument polecenia. Te dwa nawyki nic nie kosztują i usuwają najczęstszy sposób, w jaki wdrożenie certyfikatu ujawnia coś, co miało chronić. Zrób to przed pierwszym importem, a nie po nim.
Podepnij wdrożenie, nie odnowienie
Gdy ręczny import zadziała, umieść dokładnie te kroki w małym wrapperze i wywołaj go z klienta ACME po udanym odnowieniu. Certbot ustawia RENEWED_LINEAGE i RENEWED_DOMAINS dla hooka, więc wrapper może działać na jednym certyfikacie na maszynie zarządzającej kilkoma. Filtruj po linii, zamiast reagować na każde odnowienie na hoście. Wrapper to kod wdrożenia działający z uprawnieniami serwera, więc przejrzyj go jak każdy inny skrypt na tym stanowisku.
certbot renew --deploy-hook /usr/local/sbin/softether-deploy.shHook działający bez nadzoru potrzebuje własnego chronionego magazynu poświadczeń i sygnału awarii, który dotrze do człowieka. Jeśli wydanie się powiedzie, a import zawiedzie, ponów import, zamiast prosić o kolejny certyfikat, bo druga prośba ukrywa wadę wdrożenia za nowym plikiem. Dokumentacja Certbota dotycząca odnowienia jasno mówi, że przebieg, który niczego nie aktualizuje, jest normalnym wynikiem, więc to hook odróżnia oba przypadki.
Porównaj prezentowany łańcuch z plikiem
Czytaj nasłuch, nie dysk. Połącz się z portem skierowanym do klientów z nazwą serwera, której używają klienci, a potem porównaj odcisk palca i dostarczony łańcuch z linią zainstalowaną przez hook. Dwa polecenia to pokrywają, a pierwsze pokazuje też, czy certyfikaty pośrednie w ogóle docierają:
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 -sha256Potem utwórz nowe połączenie klienta, bo sesje nawiązane przed importem zostały uwierzytelnione wobec poprzedniej tożsamości i niczego nie dowodzą o nowej. Jeśli klienci przypinają stary liść, potrzebują skoordynowanej aktualizacji nawet wtedy, gdy publiczny łańcuch jest ważny, a to zadanie należy do tego samego runbooka co odnowienie. Odwrotne proxy przed usługą może prezentować dobry certyfikat, podczas gdy nasłuch VPN wciąż trzyma stary, i dlatego sprawdzenie musi nazwać port, do którego klienci faktycznie docierają. Zapisz odcisk palca obok daty odnowienia, aby następne porównanie było sprawdzeniem, a nie aktem pamięci.