Skip to content

Commit d68d99a

Browse files
committed
Refactor certificates role to normalize server and client certificate creation
Signed-off-by: Eric D. Helms <ericdhelms@gmail.com>
1 parent 87d380d commit d68d99a

File tree

6 files changed

+139
-150
lines changed

6 files changed

+139
-150
lines changed

playbooks/deploy.yaml

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,36 @@
55
become: true
66
vars:
77
certificates_hostnames:
8+
- "{{ ansible_fqdn }}"
89
- localhost
10+
ca_certificate: "{{ certificates_ca_directory }}/certs/ca.crt"
11+
ca_key: "{{ certificates_ca_directory }}/private/ca.key"
12+
server_certificate: "{{ certificates_ca_directory }}/certs/{{ ansible_fqdn }}.crt"
13+
server_key: "{{ certificates_ca_directory }}/private/{{ ansible_fqdn }}.key"
14+
client_certificate: "{{ certificates_ca_directory }}/certs/{{ ansible_fqdn }}-client.crt"
15+
client_key: "{{ certificates_ca_directory }}/private/{{ ansible_fqdn }}-client.key"
916
candlepin_db_password: "CHANGEME"
1017
candlepin_keystore_password: "CHANGEME"
1118
candlepin_oauth_secret: "CHANGEME"
12-
candlepin_ca_key: "{{ certificates_ca_directory }}/private/ca.key"
13-
candlepin_ca_certificate: "{{ certificates_ca_directory }}/certs/ca.crt"
19+
candlepin_ca_key: "{{ ca_key }}"
20+
candlepin_ca_certificate: "{{ ca_certificate }}"
1421
candlepin_tomcat_key: "{{ certificates_ca_directory }}/private/localhost.key"
1522
candlepin_tomcat_certificate: "{{ certificates_ca_directory }}/certs/localhost.crt"
16-
candlepin_client_key: "{{ certificates_ca_directory }}/private/{{ certificates_server }}-client.key"
17-
candlepin_client_certificate: "{{ certificates_ca_directory }}/certs/{{ certificates_server }}-client.crt"
18-
foreman_proxy_ca_certificate: "{{ certificates_ca_directory }}/certs/ca.crt"
19-
foreman_proxy_server_key: "{{ certificates_ca_directory }}/private/{{ certificates_server }}.key"
20-
foreman_proxy_server_certificate: "{{ certificates_ca_directory }}/certs/{{ certificates_server }}.crt"
21-
foreman_proxy_client_key: "{{ certificates_ca_directory }}/private/{{ certificates_server }}-client.key"
22-
foreman_proxy_client_certificate: "{{ certificates_ca_directory }}/certs/{{ certificates_server }}-client.crt"
23-
foreman_ca_certificate: "{{ certificates_ca_directory }}/certs/ca.crt"
24-
foreman_client_key: "{{ certificates_ca_directory }}/private/{{ certificates_server }}-client.key"
25-
foreman_client_certificate: "{{ certificates_ca_directory }}/certs/{{ certificates_server }}-client.crt"
23+
candlepin_client_key: "{{ client_key }}"
24+
candlepin_client_certificate: "{{ client_certificate }}"
25+
foreman_proxy_ca_certificate: "{{ ca_certificate }}"
26+
foreman_proxy_server_key: "{{ server_key }}"
27+
foreman_proxy_server_certificate: "{{ server_ceritificate }}"
28+
foreman_proxy_client_key: "{{ client_key }}"
29+
foreman_proxy_client_certificate: "{{ client_certificate }}"
30+
foreman_ca_certificate: "{{ ca_certificate }}"
31+
foreman_client_key: "{{ client_key }}"
32+
foreman_client_certificate: "{{ client_certificate }}"
2633
foreman_db_password: "CHANGEME"
27-
httpd_server_ca_certificate: "{{ certificates_ca_directory }}/certs/ca.crt"
28-
httpd_client_ca_certificate: "{{ certificates_ca_directory }}/certs/ca.crt"
29-
httpd_server_certificate: "{{ certificates_ca_directory }}/certs/{{ certificates_server }}.crt"
30-
httpd_server_key: "{{ certificates_ca_directory }}/private/{{ certificates_server }}.key"
34+
httpd_server_ca_certificate: "{{ ca_certificate }}"
35+
httpd_client_ca_certificate: "{{ ca_certificate }}"
36+
httpd_server_certificate: "{{ server_certificate }}"
37+
httpd_server_key: "{{ server_key }}"
3138
pulp_db_password: "CHANGEME"
3239
pulp_content_origin: "https://{{ ansible_fqdn }}"
3340
postgresql_databases:
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
---
2+
certificates_ca: true
23
certificates_ca_directory: /root/certificates # Change this to /var/lib?
34
certificates_ca_directory_keys: "{{ certificates_ca_directory }}/private"
45
certificates_ca_directory_certs: "{{ certificates_ca_directory }}/certs"
56
certificates_ca_directory_requests: "{{ certificates_ca_directory }}/requests"
6-
certificates_server: "{{ ansible_fqdn }}"
7-
certificates_client: "{{ ansible_fqdn }}-client"

roles/certificates/tasks/ca.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
- name: 'Install openssl'
3+
ansible.builtin.package:
4+
name: openssl
5+
state: present
6+
7+
- name: 'Create certs directory'
8+
ansible.builtin.file:
9+
path: "{{ certificates_ca_directory_certs }}"
10+
state: directory
11+
mode: '0755'
12+
13+
- name: 'Create keys directory'
14+
ansible.builtin.file:
15+
path: "{{ certificates_ca_directory_keys }}"
16+
state: directory
17+
mode: '0755'
18+
19+
- name: 'Create requests directory'
20+
ansible.builtin.file:
21+
path: "{{ certificates_ca_directory_requests }}"
22+
state: directory
23+
mode: '0755'
24+
25+
- name: 'Deploy configuration file'
26+
ansible.builtin.template:
27+
src: openssl.cnf.j2
28+
dest: "{{ certificates_ca_directory }}/openssl.cnf"
29+
owner: root
30+
group: root
31+
mode: '0644'
32+
33+
- name: 'Create index file'
34+
ansible.builtin.file:
35+
path: "{{ certificates_ca_directory }}/index.txt"
36+
state: touch
37+
owner: root
38+
group: root
39+
mode: '0644'
40+
41+
- name: 'Ensure serial starting number'
42+
ansible.builtin.template:
43+
src: serial.j2
44+
dest: "{{ certificates_ca_directory }}/serial"
45+
force: false
46+
owner: root
47+
group: root
48+
mode: '0644'
49+
50+
- name: 'Creating CA certificate and key'
51+
ansible.builtin.command: >
52+
openssl req -new
53+
-x509
54+
-nodes
55+
-extensions v3_ca
56+
-config "{{ certificates_ca_directory }}/openssl.cnf"
57+
-keyout "{{ certificates_ca_directory_keys }}/ca.key"
58+
-out "{{ certificates_ca_directory_certs }}/ca.crt"
59+
args:
60+
creates: "{{ certificates_ca_directory_certs }}/ca.crt"

roles/certificates/tasks/issue.yml

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,60 @@
11
---
2-
- name: 'Creating signing request'
2+
- name: 'Create server key'
33
ansible.builtin.command: >
4-
openssl req -new
5-
-newkey rsa:2048
6-
-nodes
7-
-out "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}.csr"
8-
-keyout "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}.key"
9-
-subj "/C=US/ST=North Carolina/L=Raleigh/O=Foreman/OU=Katello/CN={{ certificates_hostname }}"
4+
openssl genrsa
5+
-out "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}.key"
6+
4096
7+
args:
8+
creates: "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}.key"
9+
10+
- name: 'Creating server signing request'
11+
ansible.builtin.command: >
12+
openssl req
13+
-new
14+
-config "{{ certificates_ca_directory }}/openssl.cnf"
15+
-key "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}.key"
16+
-out "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}.csr"
1017
args:
1118
creates: "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}.csr"
1219

13-
- name: 'Sign signing request'
20+
- name: 'Sign server signing request'
21+
ansible.builtin.command: >
22+
openssl ca
23+
-create_serial
24+
-batch
25+
-extensions ssl_server
26+
-config "{{ certificates_ca_directory }}/openssl.cnf"
27+
-in "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}.csr"
28+
-out "{{ certificates_ca_directory_certs }}/{{ certificates_hostname }}.crt"
29+
args:
30+
creates: "{{ certificates_ca_directory_certs }}/{{ certificates_hostname }}.crt"
31+
32+
- name: 'Create client key'
33+
ansible.builtin.command: >
34+
openssl genrsa
35+
-out "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}-client.key"
36+
4096
37+
args:
38+
creates: "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}-client.key"
39+
40+
- name: 'Creating client signing request'
41+
ansible.builtin.command: >
42+
openssl req
43+
-new
44+
-config "{{ certificates_ca_directory }}/openssl.cnf"
45+
-key "{{ certificates_ca_directory_keys }}/{{ certificates_hostname }}-client.key"
46+
-out "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}-client.csr"
47+
args:
48+
creates: "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}-client.csr"
49+
50+
- name: 'Sign client signing request'
1451
ansible.builtin.command: >
1552
openssl ca
16-
-config "{{ certificates_ca_directory }}/openssl.cnf"
53+
-create_serial
1754
-batch
18-
-policy signing_policy
19-
-extensions signing_req
20-
-out "{{ certificates_ca_directory_certs }}/{{ certificates_hostname }}.crt"
21-
-infiles "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}.csr"
55+
-extensions ssl_client
56+
-config "{{ certificates_ca_directory }}/openssl.cnf"
57+
-in "{{ certificates_ca_directory_requests }}/{{ certificates_hostname }}-client.csr"
58+
-out "{{ certificates_ca_directory_certs }}/{{ certificates_hostname }}-client.crt"
2259
args:
23-
creates: "{{ certificates_ca_directory_certs }}/{{ certificates_hostname }}.crt"
60+
creates: "{{ certificates_ca_directory_certs }}/{{ certificates_hostname }}-client.crt"

roles/certificates/tasks/main.yml

Lines changed: 3 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,7 @@
11
---
2-
- name: 'Install openssl'
3-
ansible.builtin.package:
4-
name: openssl
5-
state: present
6-
7-
- name: 'Create certs directory'
8-
ansible.builtin.file:
9-
path: "{{ certificates_ca_directory_certs }}"
10-
state: directory
11-
mode: '0755'
12-
13-
- name: 'Create keys directory'
14-
ansible.builtin.file:
15-
path: "{{ certificates_ca_directory_keys }}"
16-
state: directory
17-
mode: '0755'
18-
19-
- name: 'Create requests directory'
20-
ansible.builtin.file:
21-
path: "{{ certificates_ca_directory_requests }}"
22-
state: directory
23-
mode: '0755'
24-
25-
- name: 'Deploy configuration file'
26-
ansible.builtin.template:
27-
src: openssl.cnf.j2
28-
dest: "{{ certificates_ca_directory }}/openssl.cnf"
29-
owner: root
30-
group: root
31-
mode: '0644'
32-
33-
- name: 'Create index file'
34-
ansible.builtin.file:
35-
path: "{{ certificates_ca_directory }}/index.txt"
36-
state: touch
37-
owner: root
38-
group: root
39-
mode: '0644'
40-
41-
- name: 'Ensure serial starting number'
42-
ansible.builtin.template:
43-
src: serial.j2
44-
dest: "{{ certificates_ca_directory }}/serial"
45-
force: false
46-
owner: root
47-
group: root
48-
mode: '0644'
49-
50-
- name: 'Creating CA certificate and key'
51-
ansible.builtin.command: >
52-
openssl req -new
53-
-x509
54-
-nodes
55-
-extensions v3_ca
56-
-config "{{ certificates_ca_directory }}/openssl.cnf"
57-
-keyout "{{ certificates_ca_directory_keys }}/ca.key"
58-
-out "{{ certificates_ca_directory_certs }}/ca.crt"
59-
args:
60-
creates: "{{ certificates_ca_directory_certs }}/ca.crt"
61-
62-
- name: 'Create server key'
63-
ansible.builtin.command: >
64-
openssl genrsa
65-
-out "{{ certificates_ca_directory_keys }}/{{ certificates_server }}.key"
66-
args:
67-
creates: "{{ certificates_ca_directory_keys }}/{{ certificates_server }}.key"
68-
69-
- name: 'Create server signing request'
70-
ansible.builtin.command: >
71-
openssl req
72-
-new
73-
-config "{{ certificates_ca_directory }}/openssl.cnf"
74-
-key "{{ certificates_ca_directory_keys }}/{{ certificates_server }}.key"
75-
-out "{{ certificates_ca_directory_requests }}/{{ certificates_server }}.csr"
76-
args:
77-
creates: "{{ certificates_ca_directory_requests }}/{{ certificates_server }}.csr"
78-
79-
- name: 'Create server certificate'
80-
ansible.builtin.command: >
81-
openssl ca
82-
-create_serial
83-
-batch
84-
-extensions ssl_server
85-
-config "{{ certificates_ca_directory }}/openssl.cnf"
86-
-in "{{ certificates_ca_directory_requests }}/{{ certificates_server }}.csr"
87-
-out "{{ certificates_ca_directory_certs }}/{{ certificates_server }}.crt"
88-
args:
89-
creates: "{{ certificates_ca_directory_certs }}/{{ certificates_server }}.crt"
90-
91-
- name: 'Create client key'
92-
ansible.builtin.command: >
93-
openssl genrsa
94-
-out "{{ certificates_ca_directory_keys }}/{{ certificates_client }}.key"
95-
args:
96-
creates: "{{ certificates_ca_directory_keys }}/{{ certificates_client }}.key"
97-
98-
- name: 'Create client signing request'
99-
ansible.builtin.command: >
100-
openssl req
101-
-new
102-
-config "{{ certificates_ca_directory }}/openssl.cnf"
103-
-key "{{ certificates_ca_directory_keys }}/{{ certificates_client }}.key"
104-
-out "{{ certificates_ca_directory_requests }}/{{ certificates_client }}.csr"
105-
args:
106-
creates: "{{ certificates_ca_directory_requests }}/{{ certificates_client }}.csr"
107-
108-
- name: 'Create server certificate'
109-
ansible.builtin.command: >
110-
openssl ca
111-
-create_serial
112-
-batch
113-
-extensions ssl_client
114-
-config "{{ certificates_ca_directory }}/openssl.cnf"
115-
-in "{{ certificates_ca_directory_requests }}/{{ certificates_client }}.csr"
116-
-out "{{ certificates_ca_directory_certs }}/{{ certificates_client }}.crt"
117-
args:
118-
creates: "{{ certificates_ca_directory_certs }}/{{ certificates_client }}.crt"
2+
- name: 'Generate CA certificate'
3+
ansible.builtin.include_tasks: ca.yml
4+
when: certificates_ca
1195

1206
- name: 'Issue other certificates'
1217
ansible.builtin.include_tasks: issue.yml

roles/certificates/templates/openssl.cnf.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ commonName = supplied
3636
emailAddress = optional
3737

3838
[ req ]
39-
default_bits = 2048
39+
default_bits = 4096
4040
default_keyfile = privkey.pem
4141
distinguished_name = req_distinguished_name
4242
req_extensions = v3_req

0 commit comments

Comments
 (0)