summaryrefslogtreecommitdiff
path: root/test/integration/targets/openssl_privatekey/tasks/impl.yml
blob: a5128451f7c44afcc6986a76ae554c6aff25aedb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
---
- name: Generate privatekey1 - standard
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey1.pem'
    select_crypto_backend: '{{ select_crypto_backend }}'

- name: Generate privatekey2 - size 2048
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey2.pem'
    size: 2048
    select_crypto_backend: '{{ select_crypto_backend }}'

- name: Generate privatekey3 - type DSA
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey3.pem'
    type: DSA
    size: 3072
    select_crypto_backend: '{{ select_crypto_backend }}'

- name: Generate privatekey4 - standard
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey4.pem'
    select_crypto_backend: '{{ select_crypto_backend }}'

- name: Delete privatekey4 - standard
  openssl_privatekey:
    state: absent
    path: '{{ output_dir }}/privatekey4.pem'
    select_crypto_backend: '{{ select_crypto_backend }}'

- name: Generate privatekey5 - standard - with passphrase
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey5.pem'
    passphrase: ansible
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'

- name: Generate privatekey5 - standard - idempotence
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey5.pem'
    passphrase: ansible
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
  register: privatekey5_idempotence

- name: Generate privatekey6 - standard - with non-ASCII passphrase
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey6.pem'
    passphrase: ànsïblé
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'

- set_fact:
    ecc_types: []
  when: select_crypto_backend == 'pyopenssl'
- set_fact:
    ecc_types:
    # - curve: X448
    #   min_cryptography_version: "2.5"
    # - curve: X25519
    #   min_cryptography_version: "2.0"
    - curve: secp384r1
      openssl_name: secp384r1
      min_cryptography_version: "0.5"
    - curve: secp521r1
      openssl_name: secp521r1
      min_cryptography_version: "0.5"
    - curve: secp224r1
      openssl_name: secp224r1
      min_cryptography_version: "0.5"
    - curve: secp192r1
      openssl_name: prime192v1
      min_cryptography_version: "0.5"
    - curve: secp256k1
      openssl_name: secp256k1
      min_cryptography_version: "0.9"
    - curve: brainpoolP256r1
      openssl_name: brainpoolP256r1
      min_cryptography_version: "2.2"
    - curve: brainpoolP384r1
      openssl_name: brainpoolP384r1
      min_cryptography_version: "2.2"
    - curve: brainpoolP512r1
      openssl_name: brainpoolP512r1
      min_cryptography_version: "2.2"
    - curve: sect571k1
      openssl_name: sect571k1
      min_cryptography_version: "0.5"
    - curve: sect409k1
      openssl_name: sect409k1
      min_cryptography_version: "0.5"
    - curve: sect283k1
      openssl_name: sect283k1
      min_cryptography_version: "0.5"
    - curve: sect233k1
      openssl_name: sect233k1
      min_cryptography_version: "0.5"
    - curve: sect163k1
      openssl_name: sect163k1
      min_cryptography_version: "0.5"
    - curve: sect571r1
      openssl_name: sect571r1
      min_cryptography_version: "0.5"
    - curve: sect409r1
      openssl_name: sect409r1
      min_cryptography_version: "0.5"
    - curve: sect283r1
      openssl_name: sect283r1
      min_cryptography_version: "0.5"
    - curve: sect233r1
      openssl_name: sect233r1
      min_cryptography_version: "0.5"
    - curve: sect163r2
      openssl_name: sect163r2
      min_cryptography_version: "0.5"
  when: select_crypto_backend == 'cryptography'

- name: Test ECC key generation
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey-{{ item.curve }}.pem'
    type: ECC
    curve: "{{ item.curve }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
  when: |
    cryptography_version.stdout is version(item.min_cryptography_version, '>=') and
    item.openssl_name in openssl_ecc_list
  loop: "{{ ecc_types }}"
  loop_control:
    label: "{{ item.curve }}"
  register: privatekey_ecc_generate

- name: Test ECC key generation (idempotency)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey-{{ item.curve }}.pem'
    type: ECC
    curve: "{{ item.curve }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
  when: |
    cryptography_version.stdout is version(item.min_cryptography_version, '>=') and
    item.openssl_name in openssl_ecc_list
  loop: "{{ ecc_types }}"
  loop_control:
    label: "{{ item.curve }}"
  register: privatekey_ecc_idempotency

- name: Generate privatekey with passphrase
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    passphrase: hunter2
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
  register: passphrase_1

- name: Generate privatekey with passphrase (idempotent)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    passphrase: hunter2
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
  register: passphrase_2

- name: Regenerate privatekey without passphrase
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
  register: passphrase_3

- name: Regenerate privatekey without passphrase (idempotent)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
  register: passphrase_4

- name: Regenerate privatekey with passphrase
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    passphrase: hunter2
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
  register: passphrase_5

- name: Create broken key
  copy:
    dest: "{{ output_dir }}/broken"
    content: "broken"
- name: Regenerate broken key
  openssl_privatekey:
    path: '{{ output_dir }}/broken.pem'
    select_crypto_backend: '{{ select_crypto_backend }}'
  register: output_broken

- name: Remove module
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    passphrase: hunter2
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
    state: absent
  register: remove_1

- name: Remove module (idempotent)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekeypw.pem'
    passphrase: hunter2
    cipher: "{{ 'aes256' if select_crypto_backend == 'pyopenssl' else 'auto' }}"
    select_crypto_backend: '{{ select_crypto_backend }}'
    backup: yes
    state: absent
  register: remove_2

- name: Generate privatekey_mode (mode 0400)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey_mode.pem'
    mode: '0400'
    select_crypto_backend: '{{ select_crypto_backend }}'
  register: privatekey_mode_1
- name: Stat for privatekey_mode
  stat:
    path: '{{ output_dir }}/privatekey_mode.pem'
  register: privatekey_mode_1_stat

- name: Generate privatekey_mode (mode 0400, idempotency)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey_mode.pem'
    mode: '0400'
    select_crypto_backend: '{{ select_crypto_backend }}'
  register: privatekey_mode_2

- name: Generate privatekey_mode (mode 0400, force)
  openssl_privatekey:
    path: '{{ output_dir }}/privatekey_mode.pem'
    mode: '0400'
    force: yes
    select_crypto_backend: '{{ select_crypto_backend }}'
  register: privatekey_mode_3
- name: Stat for privatekey_mode
  stat:
    path: '{{ output_dir }}/privatekey_mode.pem'
  register: privatekey_mode_3_stat