Add existing code
This commit is contained in:
commit
4b4e6be3ad
11 changed files with 222 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
__pycache__/
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020-2021 Alex Kotov
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
8
defaults/main.yml
Normal file
8
defaults/main.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
certbot__state: install
|
||||||
|
certbot__run: true
|
||||||
|
certbot__email: 'user@example.com'
|
||||||
|
certbot__cert_name: 'example.com'
|
||||||
|
certbot__cert_domains: ['example.com', 'www.example.com']
|
||||||
|
certbot__post_hook: null
|
||||||
|
certbot__pre_hook: null
|
28
meta/main.yml
Normal file
28
meta/main.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
allow_duplicates: false
|
||||||
|
dependencies: []
|
||||||
|
|
||||||
|
galaxy_info:
|
||||||
|
role_name: certbot
|
||||||
|
author: Alex Kotov
|
||||||
|
description: Certbot and Let's Encrypt
|
||||||
|
license: MIT
|
||||||
|
min_ansible_version: 2.8
|
||||||
|
|
||||||
|
galaxy_tags:
|
||||||
|
- certbot
|
||||||
|
- letsencrypt
|
||||||
|
- certificate
|
||||||
|
- ssl
|
||||||
|
- tls
|
||||||
|
|
||||||
|
platforms:
|
||||||
|
- name: Debian
|
||||||
|
versions:
|
||||||
|
- stretch # Debian 9 Stretch
|
||||||
|
- buster # Debian 10 Buster
|
||||||
|
- name: Ubuntu
|
||||||
|
versions:
|
||||||
|
- xenial # Ubuntu 16.04 LTS Xenial Xerus
|
||||||
|
- bionic # Ubuntu 18.04 LTS Bionic Beaver
|
||||||
|
- focal # Ubuntu 20.04 LTS Focal Fossa
|
86
tasks/install.yml
Normal file
86
tasks/install.yml
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
---
|
||||||
|
- name: Create Let's Encrypt system group
|
||||||
|
group:
|
||||||
|
name: '{{ certbot__group }}'
|
||||||
|
system: true
|
||||||
|
|
||||||
|
- name: Install Certbot
|
||||||
|
apt:
|
||||||
|
name: certbot
|
||||||
|
|
||||||
|
- name: Create directories for Let's Encrypt configuration
|
||||||
|
file:
|
||||||
|
state: directory
|
||||||
|
path: '{{ item }}'
|
||||||
|
mode: 'u=rwx,go=rx'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
with_items:
|
||||||
|
- '{{ certbot__conf_dir }}'
|
||||||
|
- '{{ certbot__archive_dir }}'
|
||||||
|
- '{{ certbot__archive_dir }}/{{ certbot__cert_name }}'
|
||||||
|
- '{{ certbot__live_dir }}'
|
||||||
|
- '{{ certbot__live_dir }}/{{ certbot__cert_name }}'
|
||||||
|
|
||||||
|
- name: Install Let's Encrypt config
|
||||||
|
template:
|
||||||
|
src: templates/certbot/cli.ini
|
||||||
|
dest: '{{ certbot__conf_cli }}'
|
||||||
|
mode: 'u=rw,go=r'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Install Nginx SSL options
|
||||||
|
template:
|
||||||
|
src: templates/certbot/options-ssl-nginx.conf
|
||||||
|
dest: '{{ certbot__conf_nginx }}'
|
||||||
|
mode: 'u=rw,go=r'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Obtain Let's Encrypt certificate
|
||||||
|
command: 'certbot certonly'
|
||||||
|
register: certbot__result
|
||||||
|
when: certbot__run|bool
|
||||||
|
changed_when: >-
|
||||||
|
certbot__result.stdout is
|
||||||
|
not search('Certificate not yet due for renewal; no action taken.')
|
||||||
|
|
||||||
|
- name: Find Let's Encrypt certificates and chains
|
||||||
|
register: certs_and_chains
|
||||||
|
find:
|
||||||
|
paths: '{{ certbot__archive_dir }}/{{ certbot__cert_name }}'
|
||||||
|
patterns:
|
||||||
|
- 'cert*.pem'
|
||||||
|
- 'chain*.pem'
|
||||||
|
- 'fullchain*.pem'
|
||||||
|
|
||||||
|
- name: Find Let's Encrypt private keys
|
||||||
|
register: privkeys
|
||||||
|
find:
|
||||||
|
paths: '{{ certbot__archive_dir }}/{{ certbot__cert_name }}'
|
||||||
|
patterns: 'privkey*.pem'
|
||||||
|
|
||||||
|
- name: Display Let's Encrypt certificates and chains
|
||||||
|
debug:
|
||||||
|
msg: "{{ certs_and_chains.files | map(attribute='path') | list }}"
|
||||||
|
|
||||||
|
- name: Display Let's Encrypt private keys
|
||||||
|
debug:
|
||||||
|
msg: "{{ privkeys.files | map(attribute='path') | list }}"
|
||||||
|
|
||||||
|
- name: Change group of Let's Encrypt certificates and chains
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
mode: 'u=rw,go=r'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
with_items: "{{ certs_and_chains.files | map(attribute='path') | list }}"
|
||||||
|
|
||||||
|
- name: Change group of Let's Encrypt private keys
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
mode: 'u=rw,g=r,o='
|
||||||
|
owner: root
|
||||||
|
group: '{{ certbot__group }}'
|
||||||
|
with_items: "{{ privkeys.files | map(attribute='path') | list }}"
|
13
tasks/main.yml
Normal file
13
tasks/main.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
- fail:
|
||||||
|
msg: 'Invalid `certbot__state`: {{ certbot__state }}'
|
||||||
|
when: (certbot__state != None) and
|
||||||
|
(certbot__state != 'purge') and
|
||||||
|
(certbot__state != 'remove') and
|
||||||
|
(certbot__state != 'install')
|
||||||
|
- include_tasks: purge.yml
|
||||||
|
when: certbot__state == 'purge'
|
||||||
|
- include_tasks: remove.yml
|
||||||
|
when: certbot__state == 'remove'
|
||||||
|
- include_tasks: install.yml
|
||||||
|
when: certbot__state == 'install'
|
11
tasks/purge.yml
Normal file
11
tasks/purge.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
- name: Purge Certbot
|
||||||
|
apt:
|
||||||
|
name: certbot
|
||||||
|
state: absent
|
||||||
|
purge: true
|
||||||
|
|
||||||
|
- name: Delete Certbot configuration
|
||||||
|
file:
|
||||||
|
state: absent
|
||||||
|
path: '{{ certbot__conf_dir }}'
|
6
tasks/remove.yml
Normal file
6
tasks/remove.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: Uninstall Certbot
|
||||||
|
apt:
|
||||||
|
name: certbot
|
||||||
|
state: absent
|
||||||
|
purge: false
|
17
templates/cli.ini
Normal file
17
templates/cli.ini
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# see https://certbot.eff.org/docs/using.html#certbot-command-line-options
|
||||||
|
agree-tos = true
|
||||||
|
cert-name = {{ certbot__cert_name }}
|
||||||
|
domains = {{ certbot__cert_domains | join(',') }}
|
||||||
|
email = {{ certbot__email }}
|
||||||
|
max-log-backups = 0
|
||||||
|
no-eff-email = true
|
||||||
|
non-interactive = true
|
||||||
|
{% if certbot__post_hook %}
|
||||||
|
post-hook = {{ certbot__post_hook }}
|
||||||
|
{% endif %}
|
||||||
|
{% if certbot__pre_hook %}
|
||||||
|
pre-hook = {{ certbot__pre_hook }}
|
||||||
|
{% endif %}
|
||||||
|
redirect = true
|
||||||
|
rsa-key-size = 4096
|
||||||
|
standalone = true
|
14
templates/options-ssl-nginx.conf
Normal file
14
templates/options-ssl-nginx.conf
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# This file contains important security parameters. If you modify this file
|
||||||
|
# manually, Certbot will be unable to automatically provide future security
|
||||||
|
# updates. Instead, Certbot will print and log an error message with a path to
|
||||||
|
# the up-to-date file that you will need to refer to when manually updating
|
||||||
|
# this file.
|
||||||
|
|
||||||
|
ssl_session_cache shared:le_nginx_SSL:10m;
|
||||||
|
ssl_session_timeout 1440m;
|
||||||
|
ssl_session_tickets off;
|
||||||
|
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_prefer_server_ciphers off;
|
||||||
|
|
||||||
|
ssl_ciphers "{{ certbot__nginx_ssl_ciphers | join(':') }}";
|
17
vars/main.yml
Normal file
17
vars/main.yml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
certbot__group: 'letsencrypt'
|
||||||
|
certbot__conf_dir: '/etc/letsencrypt'
|
||||||
|
certbot__conf_cli: '{{ certbot__conf_dir }}/cli.ini'
|
||||||
|
certbot__conf_nginx: '{{ certbot__conf_dir }}/options-ssl-nginx.conf'
|
||||||
|
certbot__archive_dir: '{{ certbot__conf_dir }}/archive'
|
||||||
|
certbot__live_dir: '{{ certbot__conf_dir }}/live'
|
||||||
|
|
||||||
|
certbot__nginx_ssl_ciphers:
|
||||||
|
- 'ECDHE-ECDSA-AES128-GCM-SHA256'
|
||||||
|
- 'ECDHE-RSA-AES128-GCM-SHA256'
|
||||||
|
- 'ECDHE-ECDSA-AES256-GCM-SHA384'
|
||||||
|
- 'ECDHE-RSA-AES256-GCM-SHA384'
|
||||||
|
- 'ECDHE-ECDSA-CHACHA20-POLY1305'
|
||||||
|
- 'ECDHE-RSA-CHACHA20-POLY1305'
|
||||||
|
- 'DHE-RSA-AES128-GCM-SHA256'
|
||||||
|
- 'DHE-RSA-AES256-GCM-SHA384'
|
Loading…
Reference in a new issue