--- - block: - name: 'Generate privatekey' openssl_privatekey: path: "{{ output_dir }}/ansible_pkey.pem" - name: 'Generate privatekey2' openssl_privatekey: path: "{{ output_dir }}/ansible_pkey2.pem" - name: 'Generate privatekey3' openssl_privatekey: path: "{{ output_dir }}/ansible_pkey3.pem" - name: 'Generate CSR' openssl_csr: path: "{{ output_dir }}/ansible.csr" privatekey_path: "{{ output_dir }}/ansible_pkey.pem" commonName: 'www.ansible.com' - name: 'Generate CSR 2' openssl_csr: path: "{{ output_dir }}/ansible2.csr" privatekey_path: "{{ output_dir }}/ansible_pkey2.pem" commonName: 'www2.ansible.com' - name: 'Generate CSR 3' openssl_csr: path: "{{ output_dir }}/ansible3.csr" privatekey_path: "{{ output_dir }}/ansible_pkey3.pem" commonName: 'www3.ansible.com' - name: 'Generate certificate' openssl_certificate: path: "{{ output_dir }}/{{ item.name }}.crt" privatekey_path: "{{ output_dir }}/{{ item.pkey }}" csr_path: "{{ output_dir }}/{{ item.name }}.csr" provider: selfsigned loop: - name: ansible pkey: ansible_pkey.pem - name: ansible2 pkey: ansible_pkey2.pem - name: ansible3 pkey: ansible_pkey3.pem - name: 'Generate PKCS#12 file' openssl_pkcs12: path: "{{ output_dir }}/ansible.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present register: p12_standard - name: 'Generate PKCS#12 file again, idempotency' openssl_pkcs12: path: "{{ output_dir }}/ansible.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present register: p12_standard_idempotency - name: 'Generate PKCS#12 file (force)' openssl_pkcs12: path: "{{ output_dir }}/ansible.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present force: True register: p12_force - name: 'Generate PKCS#12 file (force + change mode)' openssl_pkcs12: path: "{{ output_dir }}/ansible.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present force: True mode: 0644 register: p12_force_and_mode - name: 'Dump PKCS#12' openssl_pkcs12: src: "{{ output_dir }}/ansible.p12" path: "{{ output_dir }}/ansible_parse.pem" action: 'parse' state: 'present' - name: 'Generate PKCS#12 file with multiple certs' openssl_pkcs12: path: "{{ output_dir }}/ansible_multi_certs.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" ca_certificates: - "{{ output_dir }}/ansible2.crt" - "{{ output_dir }}/ansible3.crt" state: present register: p12_multiple_certs - name: 'Generate PKCS#12 file with multiple certs, again (idempotency)' openssl_pkcs12: path: "{{ output_dir }}/ansible_multi_certs.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" ca_certificates: - "{{ output_dir }}/ansible2.crt" - "{{ output_dir }}/ansible3.crt" state: present register: p12_multiple_certs_idempotency - name: 'Dump PKCS#12 with multiple certs' openssl_pkcs12: src: "{{ output_dir }}/ansible_multi_certs.p12" path: "{{ output_dir }}/ansible_parse_multi_certs.pem" action: 'parse' state: 'present' - name: Generate privatekey with password openssl_privatekey: path: '{{ output_dir }}/privatekeypw.pem' passphrase: hunter2 cipher: auto select_crypto_backend: cryptography - name: 'Generate PKCS#12 file (password fail 1)' openssl_pkcs12: path: "{{ output_dir }}/ansible_pw1.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" privatekey_passphrase: hunter2 certificate_path: "{{ output_dir }}/ansible.crt" state: present ignore_errors: yes register: passphrase_error_1 - name: 'Generate PKCS#12 file (password fail 2)' openssl_pkcs12: path: "{{ output_dir }}/ansible_pw2.p12" friendly_name: 'abracadabra' privatekey_path: '{{ output_dir }}/privatekeypw.pem' privatekey_passphrase: wrong_password certificate_path: "{{ output_dir }}/ansible.crt" state: present ignore_errors: yes register: passphrase_error_2 - name: 'Generate PKCS#12 file (password fail 3)' openssl_pkcs12: path: "{{ output_dir }}/ansible_pw3.p12" friendly_name: 'abracadabra' privatekey_path: '{{ output_dir }}/privatekeypw.pem' certificate_path: "{{ output_dir }}/ansible.crt" state: present ignore_errors: yes register: passphrase_error_3 - name: 'Generate PKCS#12 file, no privatekey' openssl_pkcs12: path: "{{ output_dir }}/ansible_no_pkey.p12" friendly_name: 'abracadabra' certificate_path: "{{ output_dir }}/ansible.crt" state: present register: p12_no_pkey - name: 'Create broken PKCS#12' copy: dest: "{{ output_dir }}/broken.p12" content: "broken" - name: 'Regenerate broken PKCS#12' openssl_pkcs12: path: "{{ output_dir }}/broken.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present force: True mode: 0644 register: output_broken - name: 'Generate PKCS#12 file' openssl_pkcs12: path: "{{ output_dir }}/ansible_backup.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present backup: yes register: p12_backup_1 - name: 'Generate PKCS#12 file (idempotent)' openssl_pkcs12: path: "{{ output_dir }}/ansible_backup.p12" friendly_name: 'abracadabra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present backup: yes register: p12_backup_2 - name: 'Generate PKCS#12 file (change)' openssl_pkcs12: path: "{{ output_dir }}/ansible_backup.p12" friendly_name: 'abra' privatekey_path: "{{ output_dir }}/ansible_pkey.pem" certificate_path: "{{ output_dir }}/ansible.crt" state: present force: yes # FIXME: idempotency does not work, so we have to force! (https://github.com/ansible/ansible/issues/53221) backup: yes register: p12_backup_3 - name: 'Generate PKCS#12 file (remove)' openssl_pkcs12: path: "{{ output_dir }}/ansible_backup.p12" state: absent backup: yes register: p12_backup_4 - name: 'Generate PKCS#12 file (remove, idempotent)' openssl_pkcs12: path: "{{ output_dir }}/ansible_backup.p12" state: absent backup: yes register: p12_backup_5 - import_tasks: ../tests/validate.yml always: - name: 'Delete PKCS#12 file' openssl_pkcs12: state: absent path: '{{ output_dir }}/{{ item }}.p12' loop: - 'ansible' - 'ansible_no_pkey' - 'ansible_multi_certs' - 'ansible_pw1' - 'ansible_pw2' - 'ansible_pw3'