mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
* import certificate+key bundle from pkcs12
* fix typo/syntax
* fix variable name
* fix passwords order and improve error handling
* add changelog fragment
* enter keystore pass only once if keystore already exists, and twice at creation
* nomalize tests
- Replace `command` tasks by dedicated (community.crypto) modules.
- Add spaces around jinja2 variable names.
- Call modules by their FQCNs.
* Add tests to check keystore has a private key
fix tests for RedHat/CentOS < 8 (run openssl command as an alternative to
`openssl_pkcs12` module)
(cherry picked from commit 21d5668c97
)
Co-authored-by: quidame <quidame@poivron.org>
This commit is contained in:
parent
ca39c45bd4
commit
c81ea00a97
5 changed files with 203 additions and 75 deletions
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
bugfixes:
|
||||||
|
- java_cert - import private key as well as public certificate from PKCS#12
|
||||||
|
(https://github.com/ansible-collections/community.general/issues/2460).
|
|
@ -11,15 +11,15 @@ DOCUMENTATION = r'''
|
||||||
---
|
---
|
||||||
module: java_cert
|
module: java_cert
|
||||||
|
|
||||||
short_description: Uses keytool to import/remove key from java keystore (cacerts)
|
short_description: Uses keytool to import/remove certificate to/from java keystore (cacerts)
|
||||||
description:
|
description:
|
||||||
- This is a wrapper module around keytool, which can be used to import/remove
|
- This is a wrapper module around keytool, which can be used to import certificates
|
||||||
certificates from a given java keystore.
|
and optionally private keys to a given java keystore, or remove them from it.
|
||||||
options:
|
options:
|
||||||
cert_url:
|
cert_url:
|
||||||
description:
|
description:
|
||||||
- Basic URL to fetch SSL certificate from.
|
- Basic URL to fetch SSL certificate from.
|
||||||
- One of C(cert_url) or C(cert_path) is required to load certificate.
|
- Exactly one of C(cert_url), C(cert_path) or C(pkcs12_path) is required to load certificate.
|
||||||
type: str
|
type: str
|
||||||
cert_port:
|
cert_port:
|
||||||
description:
|
description:
|
||||||
|
@ -30,7 +30,7 @@ options:
|
||||||
cert_path:
|
cert_path:
|
||||||
description:
|
description:
|
||||||
- Local path to load certificate from.
|
- Local path to load certificate from.
|
||||||
- One of C(cert_url) or C(cert_path) is required to load certificate.
|
- Exactly one of C(cert_url), C(cert_path) or C(pkcs12_path) is required to load certificate.
|
||||||
type: path
|
type: path
|
||||||
cert_alias:
|
cert_alias:
|
||||||
description:
|
description:
|
||||||
|
@ -46,6 +46,10 @@ options:
|
||||||
pkcs12_path:
|
pkcs12_path:
|
||||||
description:
|
description:
|
||||||
- Local path to load PKCS12 keystore from.
|
- Local path to load PKCS12 keystore from.
|
||||||
|
- Unlike C(cert_url) and C(cert_path), the PKCS12 keystore embeds the private key matching
|
||||||
|
the certificate, and is used to import both the certificate and its private key into the
|
||||||
|
java keystore.
|
||||||
|
- Exactly one of C(cert_url), C(cert_path) or C(pkcs12_path) is required to load certificate.
|
||||||
type: path
|
type: path
|
||||||
pkcs12_password:
|
pkcs12_password:
|
||||||
description:
|
description:
|
||||||
|
@ -267,6 +271,7 @@ def _export_public_cert_from_pkcs12(module, executable, pkcs_file, alias, passwo
|
||||||
export_cmd = [
|
export_cmd = [
|
||||||
executable,
|
executable,
|
||||||
"-list",
|
"-list",
|
||||||
|
"-noprompt",
|
||||||
"-keystore",
|
"-keystore",
|
||||||
pkcs_file,
|
pkcs_file,
|
||||||
"-alias",
|
"-alias",
|
||||||
|
@ -336,6 +341,44 @@ def _download_cert_url(module, executable, url, port):
|
||||||
return fetch_out
|
return fetch_out
|
||||||
|
|
||||||
|
|
||||||
|
def import_pkcs12_path(module, executable, pkcs12_path, pkcs12_pass, pkcs12_alias,
|
||||||
|
keystore_path, keystore_pass, keystore_alias, keystore_type):
|
||||||
|
''' Import pkcs12 from path into keystore located on
|
||||||
|
keystore_path as alias '''
|
||||||
|
import_cmd = [
|
||||||
|
executable,
|
||||||
|
"-importkeystore",
|
||||||
|
"-noprompt",
|
||||||
|
"-srcstoretype",
|
||||||
|
"pkcs12",
|
||||||
|
"-srckeystore",
|
||||||
|
pkcs12_path,
|
||||||
|
"-srcalias",
|
||||||
|
pkcs12_alias,
|
||||||
|
"-destkeystore",
|
||||||
|
keystore_path,
|
||||||
|
"-destalias",
|
||||||
|
keystore_alias
|
||||||
|
]
|
||||||
|
import_cmd += _get_keystore_type_keytool_parameters(keystore_type)
|
||||||
|
|
||||||
|
secret_data = "%s\n%s" % (keystore_pass, pkcs12_pass)
|
||||||
|
# Password of a new keystore must be entered twice, for confirmation
|
||||||
|
if not os.path.exists(keystore_path):
|
||||||
|
secret_data = "%s\n%s" % (keystore_pass, secret_data)
|
||||||
|
|
||||||
|
# Use local certificate from local path and import it to a java keystore
|
||||||
|
(import_rc, import_out, import_err) = module.run_command(import_cmd, data=secret_data, check_rc=False)
|
||||||
|
|
||||||
|
diff = {'before': '\n', 'after': '%s\n' % keystore_alias}
|
||||||
|
if import_rc == 0 and os.path.exists(keystore_path):
|
||||||
|
module.exit_json(changed=True, msg=import_out,
|
||||||
|
rc=import_rc, cmd=import_cmd, stdout=import_out,
|
||||||
|
error=import_err, diff=diff)
|
||||||
|
else:
|
||||||
|
module.fail_json(msg=import_out, rc=import_rc, cmd=import_cmd, error=import_err)
|
||||||
|
|
||||||
|
|
||||||
def import_cert_path(module, executable, path, keystore_path, keystore_pass, alias, keystore_type, trust_cacert):
|
def import_cert_path(module, executable, path, keystore_path, keystore_pass, alias, keystore_type, trust_cacert):
|
||||||
''' Import certificate from path into keystore located on
|
''' Import certificate from path into keystore located on
|
||||||
keystore_path as alias '''
|
keystore_path as alias '''
|
||||||
|
@ -522,8 +565,12 @@ def main():
|
||||||
# The existing certificate must first be deleted before we insert the correct one
|
# The existing certificate must first be deleted before we insert the correct one
|
||||||
delete_cert(module, executable, keystore_path, keystore_pass, cert_alias, keystore_type, exit_after=False)
|
delete_cert(module, executable, keystore_path, keystore_pass, cert_alias, keystore_type, exit_after=False)
|
||||||
|
|
||||||
import_cert_path(module, executable, new_certificate, keystore_path,
|
if pkcs12_path:
|
||||||
keystore_pass, cert_alias, keystore_type, trust_cacert)
|
import_pkcs12_path(module, executable, pkcs12_path, pkcs12_pass, pkcs12_alias,
|
||||||
|
keystore_path, keystore_pass, cert_alias, keystore_type)
|
||||||
|
else:
|
||||||
|
import_cert_path(module, executable, new_certificate, keystore_path,
|
||||||
|
keystore_pass, cert_alias, keystore_type, trust_cacert)
|
||||||
|
|
||||||
module.exit_json(changed=False)
|
module.exit_json(changed=False)
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,11 @@ test_keystore2_path: "{{ output_dir }}/keystore2.jks"
|
||||||
test_keystore2_password: changeit
|
test_keystore2_password: changeit
|
||||||
test_cert_path: "{{ output_dir }}/cert.pem"
|
test_cert_path: "{{ output_dir }}/cert.pem"
|
||||||
test_key_path: "{{ output_dir }}/key.pem"
|
test_key_path: "{{ output_dir }}/key.pem"
|
||||||
|
test_csr_path: "{{ output_dir }}/req.csr"
|
||||||
test_cert2_path: "{{ output_dir }}/cert2.pem"
|
test_cert2_path: "{{ output_dir }}/cert2.pem"
|
||||||
test_key2_path: "{{ output_dir }}/key2.pem"
|
test_key2_path: "{{ output_dir }}/key2.pem"
|
||||||
|
test_csr2_path: "{{ output_dir }}/req2.csr"
|
||||||
test_pkcs_path: "{{ output_dir }}/cert.p12"
|
test_pkcs_path: "{{ output_dir }}/cert.p12"
|
||||||
test_pkcs2_path: "{{ output_dir }}/cert2.p12"
|
test_pkcs2_path: "{{ output_dir }}/cert2.p12"
|
||||||
test_ssl: setupSSLServer.py
|
test_ssl: setupSSLServer.py
|
||||||
test_ssl_port: 21500
|
test_ssl_port: 21500
|
||||||
|
|
|
@ -7,32 +7,34 @@
|
||||||
block:
|
block:
|
||||||
|
|
||||||
- name: prep pkcs12 file
|
- name: prep pkcs12 file
|
||||||
copy: src="{{ test_pkcs12_path }}" dest="{{output_dir}}/{{ test_pkcs12_path }}"
|
ansible.builtin.copy:
|
||||||
|
src: "{{ test_pkcs12_path }}"
|
||||||
|
dest: "{{ output_dir }}/{{ test_pkcs12_path }}"
|
||||||
|
|
||||||
- name: import pkcs12
|
- name: import pkcs12
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
pkcs12_path: "{{output_dir}}/{{ test_pkcs12_path }}"
|
pkcs12_path: "{{ output_dir }}/{{ test_pkcs12_path }}"
|
||||||
pkcs12_password: changeit
|
pkcs12_password: changeit
|
||||||
pkcs12_alias: default
|
pkcs12_alias: default
|
||||||
cert_alias: default
|
cert_alias: default
|
||||||
keystore_path: "{{output_dir}}/{{ test_keystore_path }}"
|
keystore_path: "{{ output_dir }}/{{ test_keystore_path }}"
|
||||||
keystore_pass: changeme_keystore
|
keystore_pass: changeme_keystore
|
||||||
keystore_create: yes
|
keystore_create: yes
|
||||||
state: present
|
state: present
|
||||||
register: result_success
|
register: result_success
|
||||||
|
|
||||||
- name: verify success
|
- name: verify success
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_success is successful
|
- result_success is successful
|
||||||
|
|
||||||
- name: import pkcs12 with wrong password
|
- name: import pkcs12 with wrong password
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
pkcs12_path: "{{output_dir}}/{{ test_pkcs12_path }}"
|
pkcs12_path: "{{ output_dir }}/{{ test_pkcs12_path }}"
|
||||||
pkcs12_password: wrong_pass
|
pkcs12_password: wrong_pass
|
||||||
pkcs12_alias: default
|
pkcs12_alias: default
|
||||||
cert_alias: default_new
|
cert_alias: default_new
|
||||||
keystore_path: "{{output_dir}}/{{ test_keystore_path }}"
|
keystore_path: "{{ output_dir }}/{{ test_keystore_path }}"
|
||||||
keystore_pass: changeme_keystore
|
keystore_pass: changeme_keystore
|
||||||
keystore_create: yes
|
keystore_create: yes
|
||||||
state: present
|
state: present
|
||||||
|
@ -40,16 +42,16 @@
|
||||||
register: result_wrong_pass
|
register: result_wrong_pass
|
||||||
|
|
||||||
- name: verify fail with wrong import password
|
- name: verify fail with wrong import password
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_wrong_pass is failed
|
- result_wrong_pass is failed
|
||||||
|
|
||||||
- name: test fail on mutually exclusive params
|
- name: test fail on mutually exclusive params
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_path: ca.crt
|
cert_path: ca.crt
|
||||||
pkcs12_path: "{{output_dir}}/{{ test_pkcs12_path }}"
|
pkcs12_path: "{{ output_dir }}/{{ test_pkcs12_path }}"
|
||||||
cert_alias: default
|
cert_alias: default
|
||||||
keystore_path: "{{output_dir}}/{{ test_keystore_path }}"
|
keystore_path: "{{ output_dir }}/{{ test_keystore_path }}"
|
||||||
keystore_pass: changeme_keystore
|
keystore_pass: changeme_keystore
|
||||||
keystore_create: yes
|
keystore_create: yes
|
||||||
state: present
|
state: present
|
||||||
|
@ -57,26 +59,26 @@
|
||||||
register: result_excl_params
|
register: result_excl_params
|
||||||
|
|
||||||
- name: verify failed exclusive params
|
- name: verify failed exclusive params
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_excl_params is failed
|
- result_excl_params is failed
|
||||||
|
|
||||||
- name: test fail on missing required params
|
- name: test fail on missing required params
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
keystore_path: "{{output_dir}}/{{ test_keystore_path }}"
|
keystore_path: "{{ output_dir }}/{{ test_keystore_path }}"
|
||||||
keystore_pass: changeme_keystore
|
keystore_pass: changeme_keystore
|
||||||
state: absent
|
state: absent
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
register: result_missing_required_param
|
register: result_missing_required_param
|
||||||
|
|
||||||
- name: verify failed missing required params
|
- name: verify failed missing required params
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_missing_required_param is failed
|
- result_missing_required_param is failed
|
||||||
|
|
||||||
- name: delete object based on cert_alias parameter
|
- name: delete object based on cert_alias parameter
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
keystore_path: "{{output_dir}}/{{ test_keystore_path }}"
|
keystore_path: "{{ output_dir }}/{{ test_keystore_path }}"
|
||||||
keystore_pass: changeme_keystore
|
keystore_pass: changeme_keystore
|
||||||
cert_alias: default
|
cert_alias: default
|
||||||
state: absent
|
state: absent
|
||||||
|
@ -84,15 +86,15 @@
|
||||||
register: result_alias_deleted
|
register: result_alias_deleted
|
||||||
|
|
||||||
- name: verify object successfully deleted
|
- name: verify object successfully deleted
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_alias_deleted is successful
|
- result_alias_deleted is successful
|
||||||
|
|
||||||
- name: include extended test suite
|
- name: include extended test suite
|
||||||
import_tasks: state_change.yml
|
import_tasks: state_change.yml
|
||||||
|
|
||||||
- name: cleanup environment
|
- name: cleanup environment
|
||||||
file:
|
ansible.builtin.file:
|
||||||
path: "{{ item }}"
|
path: "{{ item }}"
|
||||||
state: absent
|
state: absent
|
||||||
loop:
|
loop:
|
||||||
|
@ -101,7 +103,9 @@
|
||||||
- "{{ test_keystore2_path }}"
|
- "{{ test_keystore2_path }}"
|
||||||
- "{{ test_cert_path }}"
|
- "{{ test_cert_path }}"
|
||||||
- "{{ test_key_path }}"
|
- "{{ test_key_path }}"
|
||||||
|
- "{{ test_csr_path }}"
|
||||||
- "{{ test_cert2_path }}"
|
- "{{ test_cert2_path }}"
|
||||||
- "{{ test_key2_path }}"
|
- "{{ test_key2_path }}"
|
||||||
|
- "{{ test_csr2_path }}"
|
||||||
- "{{ test_pkcs_path }}"
|
- "{{ test_pkcs_path }}"
|
||||||
- "{{ test_pkcs2_path }}"
|
- "{{ test_pkcs2_path }}"
|
||||||
|
|
|
@ -1,36 +1,96 @@
|
||||||
---
|
---
|
||||||
- name: Generate the self signed cert used as a place holder to create the java keystore
|
#
|
||||||
command: openssl req -x509 -newkey rsa:4096 -keyout {{ test_key_path }} -out {{ test_cert_path }} -days 365 -nodes -subj '/CN=localhost'
|
# Prepare X509 and PKCS#12 materials
|
||||||
args:
|
#
|
||||||
creates: "{{ test_key_path }}"
|
|
||||||
|
- name: Create private keys
|
||||||
|
community.crypto.openssl_privatekey:
|
||||||
|
path: "{{ item }}"
|
||||||
|
mode: "u=rw,go="
|
||||||
|
loop:
|
||||||
|
- "{{ test_key_path }}"
|
||||||
|
- "{{ test_key2_path }}"
|
||||||
|
|
||||||
|
- name: Generate CSR for self-signed certificate used as a placeholder to create the java keystore
|
||||||
|
community.crypto.openssl_csr:
|
||||||
|
path: "{{ test_csr_path }}"
|
||||||
|
privatekey_path: "{{ test_key_path }}"
|
||||||
|
commonName: "localhost"
|
||||||
|
|
||||||
|
- name: Generate CSR for self-signed certificate used for testing
|
||||||
|
community.crypto.openssl_csr:
|
||||||
|
path: "{{ test_csr2_path }}"
|
||||||
|
privatekey_path: "{{ test_key2_path }}"
|
||||||
|
commonName: "localhost"
|
||||||
|
|
||||||
|
- name: Generate the self-signed cert used as a placeholder to create the java keystore
|
||||||
|
community.crypto.x509_certificate:
|
||||||
|
path: "{{ test_cert_path }}"
|
||||||
|
csr_path: "{{ test_csr_path }}"
|
||||||
|
privatekey_path: "{{ test_key_path }}"
|
||||||
|
provider: selfsigned
|
||||||
|
|
||||||
- name: Generate the self signed cert we will use for testing
|
- name: Generate the self signed cert we will use for testing
|
||||||
command: openssl req -x509 -newkey rsa:4096 -keyout '{{ test_key2_path }}' -out '{{ test_cert2_path }}' -days 365 -nodes -subj '/CN=localhost'
|
community.crypto.x509_certificate:
|
||||||
args:
|
path: "{{ test_cert2_path }}"
|
||||||
creates: "{{ test_key2_path }}"
|
csr_path: "{{ test_csr2_path }}"
|
||||||
|
privatekey_path: "{{ test_key2_path }}"
|
||||||
|
provider: selfsigned
|
||||||
|
|
||||||
- name: Create the pkcs12 archive from the test x509 cert
|
- name: Create the pkcs12 archive from the test x509 cert
|
||||||
command: >
|
community.crypto.openssl_pkcs12:
|
||||||
openssl pkcs12
|
name: "test_pkcs12_cert"
|
||||||
-in {{ test_cert_path }}
|
path: "{{ test_pkcs_path }}"
|
||||||
-inkey {{ test_key_path }}
|
passphrase: "{{ test_keystore2_password }}"
|
||||||
-export
|
certificate_path: "{{ test_cert_path }}"
|
||||||
-name test_pkcs12_cert
|
privatekey_path: "{{ test_key_path }}"
|
||||||
-out {{ test_pkcs_path }}
|
when:
|
||||||
-passout pass:"{{ test_keystore2_password }}"
|
- "not (ansible_os_family == 'RedHat' and ansible_distribution_version is version('8.0', '<'))"
|
||||||
|
|
||||||
|
- name: Create the pkcs12 archive from the test x509 cert (command)
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: >
|
||||||
|
openssl pkcs12 -export
|
||||||
|
-in {{ test_cert_path }}
|
||||||
|
-inkey {{ test_key_path }}
|
||||||
|
-name test_pkcs12_cert
|
||||||
|
-out {{ test_pkcs_path }}
|
||||||
|
-passout stdin
|
||||||
|
stdin: "{{ test_keystore2_password }}"
|
||||||
|
when:
|
||||||
|
- "ansible_os_family == 'RedHat'"
|
||||||
|
- "ansible_distribution_version is version('8.0', '<')"
|
||||||
|
|
||||||
- name: Create the pkcs12 archive from the certificate we will be trying to add to the keystore
|
- name: Create the pkcs12 archive from the certificate we will be trying to add to the keystore
|
||||||
command: >
|
community.crypto.openssl_pkcs12:
|
||||||
openssl pkcs12
|
name: "test_pkcs12_cert"
|
||||||
-in {{ test_cert2_path }}
|
path: "{{ test_pkcs2_path }}"
|
||||||
-inkey {{ test_key2_path }}
|
passphrase: "{{ test_keystore2_password }}"
|
||||||
-export
|
certificate_path: "{{ test_cert2_path }}"
|
||||||
-name test_pkcs12_cert
|
privatekey_path: "{{ test_key2_path }}"
|
||||||
-out {{ test_pkcs2_path }}
|
when:
|
||||||
-passout pass:"{{ test_keystore2_password }}"
|
- "not (ansible_os_family == 'RedHat' and ansible_distribution_version is version('8.0', '<'))"
|
||||||
|
|
||||||
|
- name: Create the pkcs12 archive from the certificate we will be trying to add to the keystore (command)
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: >
|
||||||
|
openssl pkcs12 -export
|
||||||
|
-in {{ test_cert2_path }}
|
||||||
|
-inkey {{ test_key2_path }}
|
||||||
|
-name test_pkcs12_cert
|
||||||
|
-out {{ test_pkcs2_path }}
|
||||||
|
-passout stdin
|
||||||
|
stdin: "{{ test_keystore2_password }}"
|
||||||
|
when:
|
||||||
|
- "ansible_os_family == 'RedHat'"
|
||||||
|
- "ansible_distribution_version is version('8.0', '<')"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run tests
|
||||||
|
#
|
||||||
|
|
||||||
- name: try to create the test keystore based on the just created pkcs12, keystore_create flag not enabled
|
- name: try to create the test keystore based on the just created pkcs12, keystore_create flag not enabled
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
pkcs12_alias: test_pkcs12_cert
|
pkcs12_alias: test_pkcs12_cert
|
||||||
pkcs12_path: "{{ test_pkcs_path }}"
|
pkcs12_path: "{{ test_pkcs_path }}"
|
||||||
|
@ -41,12 +101,12 @@
|
||||||
register: result_x509_changed
|
register: result_x509_changed
|
||||||
|
|
||||||
- name: Verify the x509 status is failed
|
- name: Verify the x509 status is failed
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_x509_changed is failed
|
- result_x509_changed is failed
|
||||||
|
|
||||||
- name: Create the test keystore based on the just created pkcs12
|
- name: Create the test keystore based on the just created pkcs12
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
pkcs12_alias: test_pkcs12_cert
|
pkcs12_alias: test_pkcs12_cert
|
||||||
pkcs12_path: "{{ test_pkcs_path }}"
|
pkcs12_path: "{{ test_pkcs_path }}"
|
||||||
|
@ -55,8 +115,19 @@
|
||||||
keystore_pass: "{{ test_keystore2_password }}"
|
keystore_pass: "{{ test_keystore2_password }}"
|
||||||
keystore_create: yes
|
keystore_create: yes
|
||||||
|
|
||||||
|
- name: List newly created keystore content
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "keytool -list -keystore {{ test_keystore2_path }}"
|
||||||
|
stdin: "{{ test_keystore2_password }}"
|
||||||
|
register: keytool_list_keystore
|
||||||
|
|
||||||
|
- name: Assert that the keystore has a private key entry
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- "keytool_list_keystore.stdout_lines[5] is match('test_pkcs12_cert,.*, PrivateKeyEntry, $')"
|
||||||
|
|
||||||
- name: try to import from pkcs12 a non existing alias
|
- name: try to import from pkcs12 a non existing alias
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
pkcs12_alias: non_existing_alias
|
pkcs12_alias: non_existing_alias
|
||||||
pkcs12_path: "{{ test_pkcs_path }}"
|
pkcs12_path: "{{ test_pkcs_path }}"
|
||||||
|
@ -68,12 +139,12 @@
|
||||||
register: result_x509_changed
|
register: result_x509_changed
|
||||||
|
|
||||||
- name: Verify the x509 status is failed
|
- name: Verify the x509 status is failed
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_x509_changed is failed
|
- result_x509_changed is failed
|
||||||
|
|
||||||
- name: import initial test certificate from file path
|
- name: import initial test certificate from file path
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_cert
|
cert_alias: test_cert
|
||||||
cert_path: "{{ test_cert_path }}"
|
cert_path: "{{ test_cert_path }}"
|
||||||
keystore_path: "{{ test_keystore2_path }}"
|
keystore_path: "{{ test_keystore2_path }}"
|
||||||
|
@ -83,7 +154,7 @@
|
||||||
register: result_x509_changed
|
register: result_x509_changed
|
||||||
|
|
||||||
- name: Verify the x509 status is changed
|
- name: Verify the x509 status is changed
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_x509_changed is changed
|
- result_x509_changed is changed
|
||||||
|
|
||||||
|
@ -92,7 +163,7 @@
|
||||||
If the java_cert has been updated properly, then this task will report changed each time
|
If the java_cert has been updated properly, then this task will report changed each time
|
||||||
since the module will be comparing the hash of the certificate instead of validating that the alias
|
since the module will be comparing the hash of the certificate instead of validating that the alias
|
||||||
simply exists
|
simply exists
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_cert
|
cert_alias: test_cert
|
||||||
cert_path: "{{ test_cert2_path }}"
|
cert_path: "{{ test_cert2_path }}"
|
||||||
keystore_path: "{{ test_keystore2_path }}"
|
keystore_path: "{{ test_keystore2_path }}"
|
||||||
|
@ -101,13 +172,13 @@
|
||||||
register: result_x509_changed
|
register: result_x509_changed
|
||||||
|
|
||||||
- name: Verify the x509 status is changed
|
- name: Verify the x509 status is changed
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_x509_changed is changed
|
- result_x509_changed is changed
|
||||||
|
|
||||||
- name: |
|
- name: |
|
||||||
We also want to make sure that the status doesnt change if we import the same cert
|
We also want to make sure that the status doesnt change if we import the same cert
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_cert
|
cert_alias: test_cert
|
||||||
cert_path: "{{ test_cert2_path }}"
|
cert_path: "{{ test_cert2_path }}"
|
||||||
keystore_path: "{{ test_keystore2_path }}"
|
keystore_path: "{{ test_keystore2_path }}"
|
||||||
|
@ -116,13 +187,13 @@
|
||||||
register: result_x509_succeeded
|
register: result_x509_succeeded
|
||||||
|
|
||||||
- name: Verify the x509 status is ok
|
- name: Verify the x509 status is ok
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_x509_succeeded is succeeded
|
- result_x509_succeeded is succeeded
|
||||||
|
|
||||||
- name: >
|
- name: >
|
||||||
Ensure the original pkcs12 cert is in the keystore
|
Ensure the original pkcs12 cert is in the keystore
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
pkcs12_alias: test_pkcs12_cert
|
pkcs12_alias: test_pkcs12_cert
|
||||||
pkcs12_path: "{{ test_pkcs_path }}"
|
pkcs12_path: "{{ test_pkcs_path }}"
|
||||||
|
@ -134,7 +205,7 @@
|
||||||
- name: |
|
- name: |
|
||||||
Perform the same test, but we will now be testing the pkcs12 functionality
|
Perform the same test, but we will now be testing the pkcs12 functionality
|
||||||
If we add a different pkcs12 cert with the same alias, we should have a changed result, NOT the same
|
If we add a different pkcs12 cert with the same alias, we should have a changed result, NOT the same
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
pkcs12_alias: test_pkcs12_cert
|
pkcs12_alias: test_pkcs12_cert
|
||||||
pkcs12_path: "{{ test_pkcs2_path }}"
|
pkcs12_path: "{{ test_pkcs2_path }}"
|
||||||
|
@ -145,13 +216,13 @@
|
||||||
register: result_pkcs12_changed
|
register: result_pkcs12_changed
|
||||||
|
|
||||||
- name: Verify the pkcs12 status is changed
|
- name: Verify the pkcs12 status is changed
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_pkcs12_changed is changed
|
- result_pkcs12_changed is changed
|
||||||
|
|
||||||
- name: |
|
- name: |
|
||||||
We are requesting the same cert now, so the status should show OK
|
We are requesting the same cert now, so the status should show OK
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
pkcs12_alias: test_pkcs12_cert
|
pkcs12_alias: test_pkcs12_cert
|
||||||
pkcs12_path: "{{ test_pkcs2_path }}"
|
pkcs12_path: "{{ test_pkcs2_path }}"
|
||||||
|
@ -161,7 +232,7 @@
|
||||||
register: result_pkcs12_succeeded
|
register: result_pkcs12_succeeded
|
||||||
|
|
||||||
- name: Verify the pkcs12 status is ok
|
- name: Verify the pkcs12 status is ok
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_pkcs12_succeeded is succeeded
|
- result_pkcs12_succeeded is succeeded
|
||||||
|
|
||||||
|
@ -178,7 +249,7 @@
|
||||||
- name: |
|
- name: |
|
||||||
Download the original cert.pem from our temporary server. The current cert should contain
|
Download the original cert.pem from our temporary server. The current cert should contain
|
||||||
cert2.pem. Importing this cert should return a status of changed
|
cert2.pem. Importing this cert should return a status of changed
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_cert_localhost
|
cert_alias: test_cert_localhost
|
||||||
cert_url: localhost
|
cert_url: localhost
|
||||||
cert_port: "{{ test_ssl_port }}"
|
cert_port: "{{ test_ssl_port }}"
|
||||||
|
@ -188,12 +259,12 @@
|
||||||
register: result_url_changed
|
register: result_url_changed
|
||||||
|
|
||||||
- name: Verify that the url status is changed
|
- name: Verify that the url status is changed
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_url_changed is changed
|
- result_url_changed is changed
|
||||||
|
|
||||||
- name: Ensure we can remove the x509 cert
|
- name: Ensure we can remove the x509 cert
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_cert
|
cert_alias: test_cert
|
||||||
keystore_path: "{{ test_keystore2_path }}"
|
keystore_path: "{{ test_keystore2_path }}"
|
||||||
keystore_pass: "{{ test_keystore2_password }}"
|
keystore_pass: "{{ test_keystore2_password }}"
|
||||||
|
@ -201,12 +272,12 @@
|
||||||
register: result_x509_absent
|
register: result_x509_absent
|
||||||
|
|
||||||
- name: Verify the x509 cert is absent
|
- name: Verify the x509 cert is absent
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_x509_absent is changed
|
- result_x509_absent is changed
|
||||||
|
|
||||||
- name: Ensure we can remove the certificate imported from pkcs12 archive
|
- name: Ensure we can remove the certificate imported from pkcs12 archive
|
||||||
java_cert:
|
community.general.java_cert:
|
||||||
cert_alias: test_pkcs12_cert
|
cert_alias: test_pkcs12_cert
|
||||||
keystore_path: "{{ test_keystore2_path }}"
|
keystore_path: "{{ test_keystore2_path }}"
|
||||||
keystore_pass: "{{ test_keystore2_password }}"
|
keystore_pass: "{{ test_keystore2_password }}"
|
||||||
|
@ -214,6 +285,6 @@
|
||||||
register: result_pkcs12_absent
|
register: result_pkcs12_absent
|
||||||
|
|
||||||
- name: Verify the pkcs12 archive is absent
|
- name: Verify the pkcs12 archive is absent
|
||||||
assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result_pkcs12_absent is changed
|
- result_pkcs12_absent is changed
|
||||||
|
|
Loading…
Reference in a new issue