summaryrefslogtreecommitdiff
path: root/roles/x509/managed-ca/cert/prepare/tasks/main.yml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/x509/managed-ca/cert/prepare/tasks/main.yml')
-rw-r--r--roles/x509/managed-ca/cert/prepare/tasks/main.yml123
1 files changed, 123 insertions, 0 deletions
diff --git a/roles/x509/managed-ca/cert/prepare/tasks/main.yml b/roles/x509/managed-ca/cert/prepare/tasks/main.yml
new file mode 100644
index 00000000..97292b04
--- /dev/null
+++ b/roles/x509/managed-ca/cert/prepare/tasks/main.yml
@@ -0,0 +1,123 @@
+---
+- name: compute path to managed-ca certificate directory
+ set_fact:
+ managed_ca_cert_path: "{{ managed_ca_cert_config.path | default([managed_ca_cert_base_dir, managed_ca_cert_name] | path_join) }}"
+
+- name: create directory for managed-ca certificate
+ file:
+ path: "{{ managed_ca_cert_path }}"
+ state: directory
+ mode: "{{ managed_ca_cert_config.mode | default('0700') }}"
+ owner: "{{ managed_ca_cert_config.owner | default(omit) }}"
+ group: "{{ managed_ca_cert_config.group | default(omit) }}"
+ notify:
+ - reload services for x509 certificates
+ - restart services for x509 certificates
+
+- name: generate key for managed-ca certificate
+ openssl_privatekey:
+ path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-key.pem"
+ mode: "{{ managed_ca_cert_config.key.mode | default('0600') }}"
+ owner: "{{ managed_ca_cert_config.key.owner | default(omit) }}"
+ group: "{{ managed_ca_cert_config.key.group | default(omit) }}"
+ type: "{{ managed_ca_cert_config.key.type | default(omit) }}"
+ size: "{{ managed_ca_cert_config.key.size | default(omit) }}"
+ notify:
+ - reload services for x509 certificates
+ - restart services for x509 certificates
+ register: _managed_ca_key_
+
+- name: generate csr for managed-ca certificate
+ community.crypto.openssl_csr:
+ path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-csr.pem"
+ mode: "{{ managed_ca_cert_config.cert.mode | default('0644') }}"
+ owner: "{{ managed_ca_cert_config.cert.owner | default(omit) }}"
+ group: "{{ managed_ca_cert_config.cert.group | default(omit) }}"
+ privatekey_path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-key.pem"
+ create_subject_key_identifier: "{{ managed_ca_cert_config.cert.create_subject_key_identifier | default(omit) }}"
+ digest: "{{ managed_ca_cert_config.cert.digest | default(omit) }}"
+ common_name: "{{ managed_ca_cert_config.cert.common_name | default(managed_ca_cert_name) }}"
+ subject_alt_name: "{{ ['DNS:'] | product(managed_ca_cert_hostnames) | map('join') | union(managed_ca_cert_config.cert.san_extra | default([])) | list }}"
+ subject_alt_name_critical: yes
+ use_common_name_for_san: no
+ country_name: "{{ managed_ca_cert_config.cert.country_name | default(omit) }}"
+ locality_name: "{{ managed_ca_cert_config.cert.locality_name | default(omit) }}"
+ organization_name: "{{ managed_ca_cert_config.cert.organization_name | default(omit) }}"
+ organizational_unit_name: "{{ managed_ca_cert_config.cert.organizational_unit_name | default(omit) }}"
+ state_or_province_name: "{{ managed_ca_cert_config.cert.state_or_province_name | default(omit) }}"
+ basic_constraints: "{{ managed_ca_cert_config.cert.basic_constraints | default(omit) }}"
+ basic_constraints_critical: "{{ managed_ca_cert_config.cert.basic_constraints_critical | default(omit) }}"
+ key_usage: "{{ managed_ca_cert_config.cert.key_usage | default(omit) }}"
+ key_usage_critical: "{{ managed_ca_cert_config.cert.key_usage_critical | default(omit) }}"
+ extended_key_usage: "{{ managed_ca_cert_config.cert.extended_key_usage | default(omit) }}"
+ extended_key_usage_critical: "{{ managed_ca_cert_config.cert.extended_key_usage_critical | default(omit) }}"
+
+- name: slurp csr for managed-ca certificate
+ slurp:
+ src: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-csr.pem"
+ register: _managed_ca_csr_
+
+- name: check if managed-ca certificate already exists
+ stat:
+ path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem"
+ register: _managed_ca_cert_file_
+
+- name: check validity of existing managed-ca certificate
+ when: _managed_ca_cert_file_.stat.exists
+ openssl_certificate_info:
+ path: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem"
+ valid_at:
+ renew_margin: "{{ managed_ca_cert_config.cert.renew_margin | default(managed_ca_cert_default_renew_margin) }}"
+ register: _managed_ca_cert_info_
+
+- name: slurp existing existing managed-ca certificate
+ when: _managed_ca_cert_file_.stat.exists
+ slurp:
+ src: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem"
+ register: _managed_ca_cert_current_
+
+- name: generate managed-ca certificate
+ delegate_to: "{{ managed_ca_cert_config.ca.host }}"
+ community.crypto.x509_certificate_pipe:
+ content: "{{ _managed_ca_cert_current_.content | default('') | b64decode }}"
+ csr_content: "{{ _managed_ca_csr_.content | b64decode }}"
+ provider: ownca
+ ownca_path: "/etc/ssl/managed-ca/{{ managed_ca_cert_config.ca.name }}/crt.pem"
+ ownca_privatekey_path: "/etc/ssl/managed-ca/{{ managed_ca_cert_config.ca.name }}/key.pem"
+ ownca_digest: "{{ managed_ca_cert_config.cert.digest | default(omit) }}"
+ ownca_not_before: "{{ managed_ca_cert_config.cert.not_before | default(omit) }}"
+ ownca_not_after: "{{ managed_ca_cert_config.cert.not_after | default(omit) }}"
+ force: "{{ _managed_ca_cert_file_.stat.exists and (not _managed_ca_cert_info_.valid_at.renew_margin) }}"
+ register: _managed_ca_cert_new_
+
+- name: store managed-ca certificate
+ copy:
+ content: "{{ _managed_ca_cert_new_.certificate }}"
+ dest: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem"
+ mode: "{{ managed_ca_cert_config.cert.mode | default('0644') }}"
+ owner: "{{ managed_ca_cert_config.cert.owner | default(omit) }}"
+ group: "{{ managed_ca_cert_config.cert.group | default(omit) }}"
+ register: _managed_ca_cert_
+ notify:
+ - reload services for x509 certificates
+ - restart services for x509 certificates
+
+- name: export paths to certificate files
+ set_fact:
+ x509_certificate_path_key: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-key.pem"
+ x509_certificate_path_cert: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem"
+ x509_certificate_path_chain: ""
+ x509_certificate_path_fullchain: "{{ managed_ca_cert_path }}/{{ managed_ca_cert_name }}-crt.pem"
+
+- name: generate custom post-renewal script
+ when: x509_certificate_renewal is defined
+ template:
+ src: updated.sh.j2
+ dest: "{{ managed_ca_cert_path }}/updated.sh"
+ mode: 0755
+
+- name: call custom post-renewal script
+ when:
+ - x509_certificate_renewal is defined
+ - (_managed_ca_key_ is changed) or (_managed_ca_cert_ is changed)
+ command: "{{ managed_ca_cert_path }}/updated.sh"