martin-v.letsencryptsh
dehydrated
Zainstaluj i skonfiguruj dehydrated
. Utwórz użytkownika do obniżenia uprawnień oraz skonfiguruj cron do odnawiania certyfikatów.
dehydrated pracuje z Twoimi kluczami prywatnymi, więc bądź ostrożny i sprawdź kod tej roli ansible oraz używanego skryptu dehydrated.
Aby zobaczyć przykładową konfigurację z nginx jako proxy https, zajrzyj do roli ansible martin-v/ansible-nginx_https_only
Wymagania
Rola instaluje na hoście:
- openssl
- curl
- sed
- grep
- mktemp
- git
Ta rola potrzebuje serwera WWW, który obsługuje folder skonfigurowany w dehydrated_challengesdir
(domyslnie: /var/www/dehydrated/
) pod adresem http://<twoja-domena>/.well-known/acme-challenge/
dla wszystkich domen żądających certyfikatów.
Zmienne roli
Wymagane zmienne:
dehydrated_contactemail
Adres dla konta letsencrypt. Głównie do powiadomień o wygaśnięciu certyfikatu, ale powinno to nie występować, jeśli cron działa poprawnie.
dehydrated_contactemail: certmaster@example.com
dehydrated_letsencrypt_agreed_terms
Aby zaakceptować warunki usługi letsencrypt, ustaw zmienną
dehydrated_letsencrypt_agreed_terms
na aktualny adres URL licencji.
Aktualny adres URL znajdziesz na https://acme-v01.api.letsencrypt.org/terms.
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains
Lista domen do żądań certyfikatów. Na każdej linii zostanie utworzony certyfikat, w folderze /etc/dehydrated/certs/
z nazwą pierwszej
domeny w linii. Pierwsza domena to nazwa główna, reszta w linii to
alternatywne nazwy dla certyfikatu.
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert
Certyfikaty muszą być dostępne dla usług takich jak apache czy dovecot. Jednak tylko te konkretne usługi powinny mieć prawo do odczytu certyfikatu dla swojej usługi. Dlatego musimy zmienić właściciela/grupę na konkretne wartości dla każdego certyfikatu. Z powodów bezpieczeństwa, może to zrobić tylko użytkownik root.
Aby mieć ogólne rozwiązanie, istnieje zmienna dehydrated_deploy_cert
.
Ta zmienna musi zawierać skrypt bash do wdrażania certyfikatów. Typowe zadania przy wdrażaniu to kopiowanie certyfikatu do innych
folderów, zmiana właściciela/pliku oraz restart usług.
Ten kod jest wywoływany podobnie jak normalne haki dehydrated, ale po zakończeniu pełnego działania dehydrated i z uprawnieniami root. Kod jest wywoływany raz dla każdego certyfikatu, który został wygenerowany.
Parametry:
DOMAIN
Nazwa główna domeny, tj. nazwa główna certyfikatu (CN).KEYFILE
(Nazwa pliku: privkey.pem) Ścieżka do pliku zawierającego klucz prywatny.CERTFILE
(Nazwa pliku: cert.pem) Ścieżka do pliku zawierającego podpisany certyfikat.FULLCHAINFILE
(Nazwa pliku: fullchain.pem) Ścieżka do pliku zawierającego pełny łańcuch certyfikatów.CHAINFILE
(Nazwa pliku: chain.pem) Ścieżka do pliku zawierającego certyfikat(y) pośrednie.TIMESTAMP
(Nazwa pliku: chain.pem) Znacznik czasu, gdy dany certyfikat został utworzony.
Przykład:
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
dehydrated_run_cron_on_every_ansible_run
Ta rola uruchamia za każdym razem skrypt cron do tworzenia lub aktualizacji certyfikatów. Aby wyłączyć to zachowanie, użyj:
dehydrated_run_cron_on_every_ansible_run: false
Opcjonalne zmienne:
dehydrated_challengesdir
Folder dla plików acme-challenge. Twój serwer WWW powinien uczynić ten folder
publicznym pod adresem http://<twoja-domena>/.well-known/acme-challenge/
dla wszystkich wymienionych
wcześniej domen. Ten folder zostanie utworzony, jeśli nie istnieje. Powinien być dostępny tylko do zapisu dla użytkownika dehydrated i do odczytu przez Twój serwer WWW, co zostanie wymuszone przez tę rolę.
dehydrated_challengesdir: /var/www/dehydrated/
Więcej zmiennych
Istnieją także niektóre nietypowe zmienne dla super użytkownika, który potrzebuje większej kontroli,
szczegóły znajdziesz w defaults/main.yml
.
Zależności
Brak.
Przykład Playbook
- hosts: all
remote_user: root
vars_files:
- dehydrated_vars.yml
roles:
- martin-v.dehydrated
Przykład pliku zmiennych
dehydrated_contactemail: [email protected]
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
Porady
Aby utworzyć certyfikaty podczas wdrażania ansible, możesz wywołać standardowy skrypt cron: shell: "/etc/cron.weekly/dehydrated"
.
Folder tests
(https://github.com/martin-v/ansible-dehydrated/tree/master/tests) zawiera pełny działający przykład.
Aby zaimportować z oficjalnego klienta letsencrypt, zajrzyj na stronę wiki importu dehydrated.
Otwarte zadania
- Użyj molecule do lepszych testów
Licencja
MIT
Informacje o autorze
Ta rola została stworzona w 2016 roku i poprawiona w 2017 roku przez Martina V..
Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.
ansible-galaxy install martin-v.letsencryptsh