inofix.acme-setup
Acme Setup
To jest rola ansible do przygotowania wszystkiego, co jest potrzebne do późniejszego podpisywania certyfikatów za pomocą Let's Encrypt, tj. instalowanie użytkownika, odpowiednich katalogów i skryptów oraz ustawianie odpowiednich uprawnień.
Ta rola jest przeznaczona do uruchomienia na każdym hoście, który potrzebuje certyfikatów dla siebie lub podpisuje certyfikaty dla innego hosta.
Aby stworzyć klucz prywatny i żądania certyfikatów, zobacz inofix.acme-request, a także zainstalować zdalnie utworzone żądanie na hoście "podpisującym" lub "proxy certyfikatów".
Rola inofix.acme-tiny-install instaluje skrypt acme-tiny na hostach "podpisujących".
Role inofix.acme-tiny-sign / inofix.acme-tiny-cron zajmują się faktycznym (i okresowym) podpisywaniem na hostach "podpisujących".
Każdy host, który ma podpisywać certyfikaty za pomocą usługi Let's Encrypt, wymaga serwera WWW nasłuchującego na porcie 80 i przekierowującego zapytania do katalogu dostępnego dla narzędzia podpisującego - zobacz inofix.acme-sign jako przykład.
Hosty polegające na innych hostach do podpisywania certyfikatów (np. które nie mają zainstalowanej usługi webowej) mogą uzyskać i przenieść gotowe podpisane certyfikaty z hosta proxy za pomocą inofix.acme-proxy.
Zobacz "Przegląd / Koncepcja" poniżej w celu uzyskania szczegółów.
Rozwój tej roli rozpoczęto jako zwischenloesung.acme-tiny-setup.
Dlaczego nie korzystamy z istniejących ról?
- Przeczytaj sekcję "Obietnica" poniżej. Potrzebujemy czegoś niezawodnego.
- Ta rola będzie używana przez maestro i musi podążać za logiką, która jest tam stosowana. (Oczywiście, rola może być używana bez maestro..)
Stan
preSTABLE (Feature-Freeze/RC)
Obietnica
Oczywiście, ta rola może się zmieniać w przyszłości, ale będziemy jedynie rozszerzać funkcje, aby nie naruszyć zgodności wstecznej.
Jeśli będą potrzebne radykalne zmiany, zostanie stworzona nowa rola, prawdopodobnie z sufiksem wersji...
Instalacja
# ansible-galaxy install inofix.acme-setup
Wymagania
- Ansible >2.0
- Python2/3 na hoście docelowym
- Ogólny UNIX z FHS
- Sudo
- Systemd (domyślnie)
Przegląd / Koncepcja
Ponieważ jest to centralna rola, która jest jedyną potrzebną na każdym zaangażowanym hoście, w tym README przedstawione jest zestawienie.
Perspektywa Roli
- inofix.acme-setup
- uruchamiana na każdym hoście
- przygotowuje środowisko
- tworzy użytkownika 'acme'
- tworzy klucze itp.
- /etc/ssl/acme
- skrypty
- powiązane usługi
- /var/log/acme
- logi
- /var/lib/acme
- katalog domowy dla użytkownika do podpisywania i kopiowania certyfikatów
- /etc/ssl/acme
- inofix.acme-request
- uruchamiana na hostach korzystających lub podpisujących certyfikat
- na hostach korzystających z certyfikatu
- tworzy klucz prywatny
- tworzy żądanie certyfikatu (csr)
- na hostach proxy
- instaluje csr z "offline" hostów
- inofix.acme-tiny-install
- uruchamiana na hostach podpisujących certyfikaty z Let's Encrypt
- instaluje skrypt acme-tiny.py
- inofix.acme-tiny-sign
- uruchamiana na hostach podpisujących certyfikaty z Let's Encrypt
- potrzebuje tylko csr: klucz prywatny nie jest nawet odczytywany (lub jest nieobecny w przypadku proxy)
- używa acme-tiny.py, aby poprosić Let's Encrypt o podpisanie certyfikatu dla csr
- uruchamiana na hostach podpisujących certyfikaty z Let's Encrypt
- inofix.acme-tiny-cron
- uruchamiana na hostach podpisujących certyfikaty z Let's Encrypt
- potrzebuje tylko csr: klucz prywatny nie jest nawet odczytywany (lub jest nieobecny w przypadku proxy)
- instaluje zadanie cron, aby wykonać część podpisującą (jak w inofix.acme-tiny-sign)
- uruchamiana na hostach podpisujących certyfikaty z Let's Encrypt
- inofix.acme-proxy
- uruchamiana na hostach korzystających z certyfikatu, ale nie wykonujących podpisywania osobiście (np. e-mail/jabber/..)
- kopiuje certyfikat z zdalnego hosta (który wykonał podpisywanie)
- inofix.acme-service-..
- uruchamiana na wszystkich hostach korzystających z certyfikatu (tj. uruchamiających certyfikowaną usługę...)
- rejestruje usługę, aby była ponownie uruchomiona, gdy jakikolwiek certyfikat uległ zmianie
Perspektywa Hostów
- Host, który działa jako host podpisujący i nie ma sam w sobie usług wykorzystujących certyfikaty, musi uruchomić te role:
- inofix.acme-setup (ta rola)
- inofix.acme-tiny-install
- inofix.acme-tiny-sign
- inofix.acme-tiny-cron (aby automatycznie powtarzać podpisywanie raz w miesiącu)
- Host, który tylko korzysta z certyfikatów, ale sam nie żąda podpisywania bezpośrednio z Let's Encrypt, musi uruchomić te role:
- inofix.acme-setup (ta rola)
- inofix.acme-request
- inofix.acme-proxy (aby automatycznie uzyskać certyfikaty z zdalnego hosta)
- inofix.acme-service-<usługa> (aby ponownie uruchomić usługę, jeśli certyfikat się zmieni)
- Host, który uruchamia zarówno narzędzie do podpisywania, jak i określoną usługę, musi uruchomić te role:
- inofix.acme-setup (ta rola)
- inofix.acme-tiny-install
- inofix.acme-request
- inofix.acme-tiny-sign
- inofix.acme-tiny-cron (aby automatycznie powtarzać podpisywanie raz w miesiącu)
- inofix.acme-service-<usługa> (aby ponownie uruchomić usługę, jeśli certyfikat się zmieni)
Zmienne Roli
- app__acme__user - opcjonalne, domyślnie='acme'
- app__acme__group - opcjonalne, domyślnie='acme'
- app__acme__home - opcjonalne, domyślnie='/var/lib/acme'
- app__acme__config_dir - opcjonalne, domyślnie='/etc/ssl/acme'
- app__acme__openssl_config - opcjonalne, domyślnie='/etc/ssl/openssl.cnf'
- app__acme__challenge_dir - opcjonalne, domyślnie='/var/www/acme-challenges'
- app__acme__scripts_dir - opcjonalne, domyślnie='/etc/ssl/acme/scripts'
- app__acme__service_dir - opcjonalne, domyślnie='/etc/ssl/acme/service.d'
- app__acme__bin_dir - opcjonalne, domyślnie='/usr/local/bin'
- app__acme__account_key - opcjonalne, domyślnie='account.key'
- app__acme__key_length - opcjonalne, domyślnie=4096
- app__acme__ssh_keytype - opcjonalne, domyślnie='rsa'
- app__acme__log_dir - opcjonalne, domyślnie='/var/log/acme'
- app__acme__letsencrypt_certs - opcjonalne, domyślnie=[ {url='https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem', file='intermediate.crt'}, {url='https://letsencrypt.org/certs/isrgrootx1.pem', file='ca.crt'} ]
- app__acme__cron_minute - opcjonalne, domyślnie='11'
- app__acme__cron_hour - opcjonalne, domyślnie='5'
- app__acme__cron_day - opcjonalne, domyślnie='*'
- app__acme__cron_month - opcjonalne, domyślnie='*'
- app__acme__cron_year - opcjonalne, domyślnie='*'
- fqdn - opcjonalne, domyślnie={{ ansible_fqdn | d(inventory_hostname ) }}
- workdir - opcjonalne, domyślnie=/tmp (lokalny katalog używany do wymiany kluczy SSH)
Zależności
Przykładowy Playbook
- hosts: serwery
roles:
- inofix.acme-setup
Zobacz https://raw.githubusercontent.com/inofix/common-playbooks/master/setup-lets-encrypt.yml dla pełnego playbooka z wszystkimi istotnymi rolami.
Licencja
GPLv3
Informacje o autorze
- Michael Lustenberger w inofix.ch
Prepare the system for using Let's Encrypt
ansible-galaxy install inofix.acme-setup