Skip to content
Snippets Groups Projects
Commit 911872b4 authored by void's avatar void
Browse files

Erweiterung traefik Rolle für Zertifikatserzeugung

parent 5ee0fed3
No related branches found
No related tags found
No related merge requests found
# Eigene CA und Server Zertifikat erstellen, falls diese noch nicht existiert
- name: "Install Packages"
apt:
name: "{{ packages }}"
state: present
vars:
packages:
- python3-cryptography
- name: "Check if SelfSigned CA key exists"
stat:
path: "{{ basedir }}/ca.key"
register: ca_key_stat_result
- name: "Create SelfSigned CA key"
community.crypto.openssl_privatekey:
path: "{{ basedir }}/ca.key"
when: not ca_key_stat_result.stat.exists
- name: "Check if SelfSigned CA cert exists"
stat:
path: "{{ basedir }}/ca.pem"
register: ca_cert_stat_result
- name: "Check if SelfSigned CA cert CSR"
community.crypto.openssl_csr_pipe:
privatekey_path: "{{ basedir }}/ca.key"
common_name: "{{ selfSignedCN }} CA"
use_common_name_for_san: false # since we do not specify SANs, don't use CN as a SAN
basic_constraints:
- 'CA:TRUE'
basic_constraints_critical: true
key_usage:
- keyCertSign
key_usage_critical: true
register: ca_csr
when: not ca_cert_stat_result.stat.exists
- name: "Create SelfSigned CA cert from CSR"
community.crypto.x509_certificate:
path: "{{ basedir }}/ca.pem"
csr_content: "{{ ca_csr.csr }}"
privatekey_path: "{{ basedir }}/ca.key"
provider: selfsigned
when: not ca_cert_stat_result.stat.exists
- name: "Check if ServerCert key exists"
stat:
path: "{{ basedir }}/cert.key"
register: cert_key_stat_result
- name: "Create ServerCert key"
community.crypto.openssl_privatekey:
path: "{{ basedir }}/cert.key"
when: not cert_key_stat_result.stat.exists
- name: "Check if ServerCert cert exists"
stat:
path: "{{ basedir }}/cert.pem"
register: cert_cert_stat_result
- name: "Create ServerCert CSR"
community.crypto.openssl_csr_pipe:
privatekey_path: "{{ basedir }}/cert.key"
subject_alt_name:
- "DNS:{{ selfSignedDomain }}"
- "DNS:{{ domain }}"
register: cert_csr
when: not cert_cert_stat_result.stat.exists
- name: "Create ServerCert from CSR"
community.crypto.x509_certificate:
path: "{{ basedir }}/cert.pem"
csr_content: "{{ cert_csr.csr }}"
provider: ownca
ownca_path: "{{ basedir }}/ca.pem"
ownca_privatekey_path: "{{ basedir }}/ca.key"
ownca_not_after: +9999d # long lifetime
ownca_not_before: "-1d" # valid since yesterday
when: not cert_cert_stat_result.stat.exists
- include: ../functions/get_secret.yml - include: ../functions/get_secret.yml
with_items: with_items:
- { path: "{{ basedir }}/letsencrypt_notification_email", length: -1 } - { path: "{{ basedir }}/letsencrypt_notification_email", length: -1 }
when: selfSignedCN is not defined
- name: "create folder struct for {{ servicename }}" - name: "create folder struct for {{ servicename }}"
file: file:
...@@ -11,6 +12,11 @@ ...@@ -11,6 +12,11 @@
- "{{ basedir }}" - "{{ basedir }}"
- "{{ basedir }}/dynamic" - "{{ basedir }}/dynamic"
- name: "Check if CertStore exists"
stat:
path: "{{ basedir }}/acme.json"
register: acme_stat_result
- name: "Create CertStore if needed and set permissions" - name: "Create CertStore if needed and set permissions"
file: file:
path: "{{ basedir }}/acme.json" path: "{{ basedir }}/acme.json"
...@@ -18,6 +24,12 @@ ...@@ -18,6 +24,12 @@
group: root group: root
mode: '600' mode: '600'
state: touch state: touch
when: not acme_stat_result.stat.exists
- name: "Create SelfSigned CA and Cert"
ansible.builtin.include_tasks: certificate.yml
when: selfSignedCN is defined
- name: Docker Compose Konfig-Datei erstellen - name: Docker Compose Konfig-Datei erstellen
template: template:
......
...@@ -10,15 +10,15 @@ services: ...@@ -10,15 +10,15 @@ services:
- "443:443" - "443:443"
{% if matrix_federation is defined and matrix_federation == true %} - "8448:8448" {% if matrix_federation is defined and matrix_federation == true %} - "8448:8448"
{% endif %} {% endif %}
- "{{ int_ip4 }}:8081:8080" - "{{ int_ip4 }}:8080:8080"
volumes: volumes:
- "/srv/traefik/traefik.yml:/etc/traefik/traefik.yml:ro" - "/srv/traefik/traefik.yml:/etc/traefik/traefik.yml:ro"
- "/srv/traefik/dynamic:/etc/traefik/dynamic:ro" - "/srv/traefik/dynamic:/etc/traefik/dynamic:ro"
- "/srv/traefik/acme.json:/acme.json" - "/srv/traefik/acme.json:/acme.json"
- "/var/run/docker.sock:/var/run/docker.sock" - "/var/run/docker.sock:/var/run/docker.sock"
{% if certFile is defined %} {% if selfSignedCN is defined %}
- "{{ basedir }}/{{ certFile }}:/{{ certFile }}:ro" - "{{ basedir }}/cert.pem:/cert.pem:ro"
- "{{ basedir }}/{{ keyFile }}:/{{ keyFile }}:ro" - "{{ basedir }}/cert.key:/cert.key:ro"
{% endif %} {% endif %}
networks: networks:
- default - default
......
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
# TLS Options # TLS Options
tls: tls:
{% if certFile is defined %} {% if selfSignedCN is defined %}
# use local certificate # use local certificate
certificates: certificates:
- certFile: "/{{ certFile }}" - certFile: "/cert.pem"
keyFile: "/{{ keyFile }}" keyFile: "/cert.key"
{% endif %} {% endif %}
......
...@@ -73,6 +73,8 @@ log: ...@@ -73,6 +73,8 @@ log:
format: "common" format: "common"
{% if selfSignedCN is not defined %}
# get certificates from letsEncrypt # get certificates from letsEncrypt
certificatesResolvers: certificatesResolvers:
letsencrypt: letsencrypt:
...@@ -80,3 +82,5 @@ certificatesResolvers: ...@@ -80,3 +82,5 @@ certificatesResolvers:
email: "{{ letsencrypt_notification_email }}" email: "{{ letsencrypt_notification_email }}"
storage: "/acme.json" storage: "/acme.json"
tlsChallenge: true tlsChallenge: true
{% endif %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment