This commit is contained in:
5 files changed
+132
-94
No files matched your search
@@ -1,51 +1,12 @@
|
|||||||
---
|
---
|
||||||
- name: Install ldap directory
|
- name: Create/rotate ldap certificate
|
||||||
ansible.builtin.file:
|
ansible.builtin.include_role:
|
||||||
path: /etc/pki/ldap.konchin.com
|
name: pki_cert
|
||||||
state: directory
|
vars:
|
||||||
mode: '0700'
|
pki_cert_name: ldap.konchin.com
|
||||||
owner: root
|
pki_cert_dir: /etc/pki/ldap.konchin.com
|
||||||
group: root
|
pki_cert_sans:
|
||||||
|
|
||||||
- name: Create private key for ldap
|
|
||||||
community.crypto.openssl_privatekey:
|
|
||||||
path: /etc/pki/ldap.konchin.com/cert.key
|
|
||||||
|
|
||||||
- name: Create CSR for ldap
|
|
||||||
community.crypto.openssl_csr_pipe:
|
|
||||||
privatekey_path: /etc/pki/ldap.konchin.com/cert.key
|
|
||||||
subject_alt_name:
|
|
||||||
- 'DNS:ldap'
|
- 'DNS:ldap'
|
||||||
- 'DNS:ldaps'
|
- 'DNS:ldaps'
|
||||||
- 'DNS:ldap.konchin.com'
|
- 'DNS:ldap.konchin.com'
|
||||||
- 'DNS:ldaps.konchin.com'
|
- 'DNS:ldaps.konchin.com'
|
||||||
register: csr
|
|
||||||
|
|
||||||
- name: Sign with root ca
|
|
||||||
community.crypto.x509_certificate:
|
|
||||||
path: /etc/pki/ldap.konchin.com/cert.pem
|
|
||||||
csr_content: "{{ csr.csr }}"
|
|
||||||
provider: ownca
|
|
||||||
ownca_path: /etc/pki/konchin.com/rootca.pem
|
|
||||||
ownca_privatekey_path: /etc/pki/konchin.com/rootca.key
|
|
||||||
ownca_privatekey_passphrase: "{{ secret_ca_passphrase }}"
|
|
||||||
ownca_not_after: +365d # valid for one year
|
|
||||||
ownca_not_before: -1d # valid since yesterday
|
|
||||||
return_content: true
|
|
||||||
register: cert
|
|
||||||
|
|
||||||
- name: Create full chain
|
|
||||||
block:
|
|
||||||
- name: Slurp root ca
|
|
||||||
ansible.builtin.slurp:
|
|
||||||
src: /etc/pki/konchin.com/rootca.pem
|
|
||||||
register: rootca
|
|
||||||
- name: Create full chain cert
|
|
||||||
ansible.builtin.copy:
|
|
||||||
content: |
|
|
||||||
{{ cert.certificate | trim }}
|
|
||||||
{{ rootca['content'] | b64decode | trim }}
|
|
||||||
dest: /etc/pki/ldap.konchin.com/full-chain.pem
|
|
||||||
mode: '0600'
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
@@ -33,12 +33,12 @@
|
|||||||
key_usage:
|
key_usage:
|
||||||
- keyCertSign
|
- keyCertSign
|
||||||
key_usage_critical: true
|
key_usage_critical: true
|
||||||
register: ca_csr
|
register: create_rootca_ca_csr
|
||||||
|
|
||||||
- name: Create cert for root ca
|
- name: Create cert for root ca
|
||||||
community.crypto.x509_certificate:
|
community.crypto.x509_certificate:
|
||||||
path: /etc/pki/konchin.com/rootca.pem
|
path: /etc/pki/konchin.com/rootca.pem
|
||||||
csr_content: "{{ ca_csr.csr }}"
|
csr_content: "{{ create_rootca_ca_csr.csr }}"
|
||||||
privatekey_path: /etc/pki/konchin.com/rootca.key
|
privatekey_path: /etc/pki/konchin.com/rootca.key
|
||||||
privatekey_passphrase: "{{ secret_ca_passphrase }}"
|
privatekey_passphrase: "{{ secret_ca_passphrase }}"
|
||||||
provider: selfsigned
|
provider: selfsigned
|
||||||
@@ -1,49 +1,10 @@
|
|||||||
---
|
---
|
||||||
- name: Install www directory
|
- name: Create/rotate www certificate
|
||||||
ansible.builtin.file:
|
ansible.builtin.include_role:
|
||||||
path: /etc/pki/www.konchin.com
|
name: pki_cert
|
||||||
state: directory
|
vars:
|
||||||
mode: '0700'
|
pki_cert_name: www.konchin.com
|
||||||
owner: root
|
pki_cert_dir: /etc/pki/www.konchin.com
|
||||||
group: root
|
pki_cert_sans:
|
||||||
|
|
||||||
- name: Create private key for www
|
|
||||||
community.crypto.openssl_privatekey:
|
|
||||||
path: /etc/pki/www.konchin.com/cert.key
|
|
||||||
|
|
||||||
- name: Create CSR for www
|
|
||||||
community.crypto.openssl_csr_pipe:
|
|
||||||
privatekey_path: /etc/pki/www.konchin.com/cert.key
|
|
||||||
subject_alt_name:
|
|
||||||
- 'DNS:www.konchin.com'
|
- 'DNS:www.konchin.com'
|
||||||
- 'DNS:*.konchin.com'
|
- 'DNS:*.konchin.com'
|
||||||
register: csr
|
|
||||||
|
|
||||||
- name: Sign with root ca
|
|
||||||
community.crypto.x509_certificate:
|
|
||||||
path: /etc/pki/www.konchin.com/cert.pem
|
|
||||||
csr_content: "{{ csr.csr }}"
|
|
||||||
provider: ownca
|
|
||||||
ownca_path: /etc/pki/konchin.com/rootca.pem
|
|
||||||
ownca_privatekey_path: /etc/pki/konchin.com/rootca.key
|
|
||||||
ownca_privatekey_passphrase: "{{ secret_ca_passphrase }}"
|
|
||||||
ownca_not_after: +365d # valid for one year
|
|
||||||
ownca_not_before: -1d # valid since yesterday
|
|
||||||
return_content: true
|
|
||||||
register: cert
|
|
||||||
|
|
||||||
- name: Create full chain
|
|
||||||
block:
|
|
||||||
- name: Slurp root ca
|
|
||||||
ansible.builtin.slurp:
|
|
||||||
src: /etc/pki/konchin.com/rootca.pem
|
|
||||||
register: rootca
|
|
||||||
- name: Create full chain cert
|
|
||||||
ansible.builtin.copy:
|
|
||||||
content: |
|
|
||||||
{{ cert.certificate | trim }}
|
|
||||||
{{ rootca['content'] | b64decode | trim }}
|
|
||||||
dest: /etc/pki/www.konchin.com/full-chain.pem
|
|
||||||
mode: '0600'
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
# How long before its actual expiry a certificate should be rotated.
|
||||||
|
pki_cert_renew_before: +183d
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
- name: Install PKI directory for {{ pki_cert_name }}
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ pki_cert_dir }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0700'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Check for existing certificate
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "{{ pki_cert_dir }}/cert.pem"
|
||||||
|
register: pki_cert_existing
|
||||||
|
|
||||||
|
- name: Inspect existing certificate expiry
|
||||||
|
community.crypto.x509_certificate_info:
|
||||||
|
path: "{{ pki_cert_dir }}/cert.pem"
|
||||||
|
valid_at:
|
||||||
|
still_valid_before_renewal_window: "{{ pki_cert_renew_before }}"
|
||||||
|
register: pki_cert_info
|
||||||
|
when: pki_cert_existing.stat.exists
|
||||||
|
|
||||||
|
- name: Determine whether certificate needs rotation
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
pki_cert_needs_rotation: "{{ pki_cert_existing.stat.exists and not pki_cert_info.valid_at.still_valid_before_renewal_window }}"
|
||||||
|
|
||||||
|
- name: Archive certificate nearing expiry
|
||||||
|
when: pki_cert_needs_rotation
|
||||||
|
block:
|
||||||
|
- name: Compute archive directory name
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
pki_cert_archive_dir: "{{ pki_cert_dir }}/{{ (pki_cert_info.not_before | to_datetime('%Y%m%d%H%M%SZ')).strftime('%Y-%m') }}"
|
||||||
|
|
||||||
|
- name: Create archive directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ pki_cert_archive_dir }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0700'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
|
||||||
|
- name: Check which certificate files exist
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "{{ pki_cert_dir }}/{{ item }}"
|
||||||
|
register: pki_cert_files
|
||||||
|
loop:
|
||||||
|
- cert.key
|
||||||
|
- cert.pem
|
||||||
|
- full-chain.pem
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item }}"
|
||||||
|
|
||||||
|
- name: Copy existing certificate files into archive
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: "{{ pki_cert_dir }}/{{ item.item }}"
|
||||||
|
dest: "{{ pki_cert_archive_dir }}/{{ item.item }}"
|
||||||
|
remote_src: true
|
||||||
|
mode: preserve
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
loop: "{{ pki_cert_files.results }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.item }}"
|
||||||
|
when: item.stat.exists
|
||||||
|
|
||||||
|
- name: Remove archived certificate files from live directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ pki_cert_dir }}/{{ item.item }}"
|
||||||
|
state: absent
|
||||||
|
loop: "{{ pki_cert_files.results }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.item }}"
|
||||||
|
when: item.stat.exists
|
||||||
|
|
||||||
|
- name: Create private key for {{ pki_cert_name }}
|
||||||
|
community.crypto.openssl_privatekey:
|
||||||
|
path: "{{ pki_cert_dir }}/cert.key"
|
||||||
|
|
||||||
|
- name: Create CSR for {{ pki_cert_name }}
|
||||||
|
community.crypto.openssl_csr_pipe:
|
||||||
|
privatekey_path: "{{ pki_cert_dir }}/cert.key"
|
||||||
|
subject_alt_name: "{{ pki_cert_sans }}"
|
||||||
|
register: pki_cert_csr
|
||||||
|
|
||||||
|
- name: Sign with root ca
|
||||||
|
community.crypto.x509_certificate:
|
||||||
|
path: "{{ pki_cert_dir }}/cert.pem"
|
||||||
|
csr_content: "{{ pki_cert_csr.csr }}"
|
||||||
|
provider: ownca
|
||||||
|
ownca_path: /etc/pki/konchin.com/rootca.pem
|
||||||
|
ownca_privatekey_path: /etc/pki/konchin.com/rootca.key
|
||||||
|
ownca_privatekey_passphrase: "{{ secret_ca_passphrase }}"
|
||||||
|
ownca_not_after: +365d # valid for one year
|
||||||
|
ownca_not_before: -1d # valid since yesterday
|
||||||
|
return_content: true
|
||||||
|
register: pki_cert_signed
|
||||||
|
|
||||||
|
- name: Create full chain
|
||||||
|
block:
|
||||||
|
- name: Slurp root ca
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: /etc/pki/konchin.com/rootca.pem
|
||||||
|
register: pki_cert_rootca
|
||||||
|
|
||||||
|
- name: Create full chain cert
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: |
|
||||||
|
{{ pki_cert_signed.certificate | trim }}
|
||||||
|
{{ pki_cert_rootca['content'] | b64decode | trim }}
|
||||||
|
dest: "{{ pki_cert_dir }}/full-chain.pem"
|
||||||
|
mode: '0600'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
Reference in new issue
Block a user