|
|
- ---
- - name: 'TLS | verify if cert is valid'
- command: >
- openssl verify
- -CAfile {{ ca_cert_tls_ca_path }}
- -untrusted {{ ca_cert_tls_cert_path }}
- -verify_hostname {{ ca_cert_common_name }}
- {{ ca_cert_tls_cert_path }}
- register: ca_cert_tls_cert_is_valid
- check_mode: false
- changed_when: ca_cert_tls_cert_is_valid.rc != 0
- failed_when: false
- when: ca_cert_proto == 'tls'
-
- - name: 'SSH | verify if cert is valid and get info'
- ssh_cert:
- path: '{{ ca_cert_ssh_key_path }}-cert.pub'
- ca_path: '{{ ca_cert_ssh_ca_path }}'
- principals: [ '{{ ca_cert_common_name }}' ]
- register: ca_cert_ssh_cert_is_valid
- changed_when: ca_cert_ssh_cert_is_valid.rc != 0
- ignore_errors: true
- check_mode: false
- when: ca_cert_proto == 'ssh'
-
- - name: 'TLS | get remaining validity'
- shell: >
- {% if ansible_distribution != 'OpenWrt' %}
- echo $(( ($(date -d "$(openssl x509 -in {{ ca_cert_tls_cert_path }} -enddate -noout | sed "s/.*=\(.*\)/\1/")" +%s)-$(date -d now +%s))/86400 ))
- {% else %}
- echo $(( ($(date -D '%b %e %H:%M:%S %Y' -d "$(openssl x509 -in {{ ca_cert_tls_cert_path }} -enddate -noout | sed "s/.*=\(.*\)/\1/")" +%s)-$(date +%s))/86400 ))
- {% endif %}
- register: ca_cert_cert_remaining_days
- changed_when: false
- check_mode: false
- when: ca_cert_proto == 'tls' and not ca_cert_tls_cert_is_valid.changed
-
- - name: 'set cert validity'
- set_fact:
- ca_cert_cert_is_valid: >-
- {% if ca_cert_proto == 'tls' %}{{ ca_cert_tls_cert_is_valid }}{%
- elif ca_cert_proto == 'ssh' %}{{ ca_cert_ssh_cert_is_valid }}{% endif %}
-
- - name: 'set remaning validity'
- set_fact:
- ca_cert_cert_remaining_days: >-
- {% if ca_cert_proto == 'tls' %}{{ ca_cert_cert_remaining_days.stdout }}{%
- elif ca_cert_proto == 'ssh' %}{{ ca_cert_cert_is_valid.certificate.valid.remaining_days }}{% endif %}
- when: ca_cert_cert_is_valid.rc|d(1) == 0
-
- - name: 'renew'
- block:
- - name: 'RENEW | backup existing private keys'
- copy:
- remote_src: true
- src: '{{ item }}'
- dest: '{{ item }}-backup'
- failed_when: false
- register: ca_cert_key_backup
- loop: '{{ keypair[ca_cert_proto] }}'
- vars:
- keypair:
- ssh:
- - '{{ ca_cert_ssh_key_path }}'
- - '{{ ca_cert_ssh_key_path }}.pub'
- tls:
- - '{{ ca_cert_tls_key_path }}'
-
- - name: 'RENEW | TLS | create private key (if not exists)'
- command: >
- openssl genpkey
- -algorithm {{ ca_cert_tls_key_algorithm }}
- -out {{ ca_cert_tls_key_path }}
- args:
- creates: >-
- {{ "" if ca_cert_renew_private_key else ca_cert_tls_key_path }}
- when: ca_cert_proto == 'tls'
-
- - name: 'RENEW | SSH | create key pair'
- openssh_keypair:
- force: '{{ ca_cert_renew_private_key }}'
- path: '{{ ca_cert_ssh_key_path }}'
- type: 'ed25519'
- when: ca_cert_proto == 'ssh'
-
- - name: 'RENEW | TLS | create cert signing request'
- command: >
- openssl req
- -new
- -subj '{{ ca_cert_tls_subj }}'
- -key '{{ ca_cert_tls_key_path }}'
- -out '{{ ca_cert_tls_csr_path }}'
- when: ca_cert_proto == 'tls'
-
- - name: 'RENEW | CA_MANAGER | generate json signing request'
- cert_request:
- host: '{{ ca_cert_common_name }}'
- path: >-
- {% if ca_cert_proto == 'tls' %}{{ ca_cert_tls_csr_path }}{%
- elif ca_cert_proto == 'ssh' %}{{ ca_cert_ssh_key_path+'.pub' }}{% endif %}
- proto: '{{ "ssl" if ca_cert_proto == "tls" else ca_cert_proto }}'
- client: '{{ ca_cert_client }}'
- register: ca_cert_signing_request
-
- - name: 'RENEW | CA_MANAGER | send signing request'
- raw: '{{ ca_cert_signing_request | to_json }}'
- delegate_to: '{{ ca_cert_ca_manager_host }}'
- delegate_facts: true
- register: ca_cert_signing_request_results
- failed_when: (ca_cert_signing_request_results.stdout|from_json).failed
-
- - name: 'RENEW | CA_MANAGER | set signing request id'
- set_fact:
- ca_cert_request_id: >-
- {{ (ca_cert_signing_request_results.stdout|from_json).requestID }}
-
- - name: 'RENEW | CA_MANAGER | generate json get request'
- set_fact:
- ca_cert_get_request:
- type: 'get_certificate'
- requestID: '{{ ca_cert_request_id }}'
-
- - name: 'RENEW | CA_MANAGER | prompt for signature'
- debug:
- msg: >-
- Please manually confirm sign request with id {{ ca_cert_request_id }}.
-
- - name: 'RENEW | CA_MANAGER | send get request'
- raw: '{{ ca_cert_get_request | to_json }}'
- delegate_to: '{{ ca_cert_ca_manager_host }}'
- delegate_facts: true
- register: ca_cert_get_request_results
- failed_when: (ca_cert_get_request_results.stdout|from_json).failed
-
- - name: 'RENEW | store new certificate'
- copy:
- content: '{{ (ca_cert_get_request_results.stdout|from_json).result }}'
- dest: >-
- {% if ca_cert_proto == 'tls' %}{{ ca_cert_tls_cert_path }}{%
- elif ca_cert_proto == 'ssh' %}{{ ca_cert_ssh_key_path }}-cert.pub{% endif %}
- rescue:
- - name: 'RENEW FAILED | restore backup'
- copy:
- remote_src: true
- src: '{{ item.dest }}'
- dest: '{{ item.src }}'
- when: not item.failed
- loop: '{{ ca_cert_key_backup.results }}'
- always:
- - name: 'RENEW | clean backup'
- file:
- path: '{{ item.dest }}'
- state: 'absent'
- when: not item.failed
- loop: '{{ ca_cert_key_backup.results }}'
- when: ca_cert_cert_is_valid.changed or ca_cert_cert_remaining_days|int < ca_cert_min_days_validity
- ...
|