Ajout d'un rôle de génération de certificats.
Le rôle `openssl-cert-builder` est encore très expérimental et dépend d'une modification de la collection `community.crypto` qui n'est pas encore terminée et donc pas encore intégrée à l'upstream.
This commit is contained in:
parent
4f1d598fb5
commit
7fd8bd5b9b
3 changed files with 95 additions and 0 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,4 @@
|
||||||
loot/certs/*
|
loot/certs/*
|
||||||
!loot/certs/.gitkeep
|
!loot/certs/.gitkeep
|
||||||
|
loot/csr/*
|
||||||
|
!loot/csr/.gitkeep
|
4
roles/openssl-cert-builder/meta/main.yml
Normal file
4
roles/openssl-cert-builder/meta/main.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- role: openssl-common
|
||||||
|
...
|
89
roles/openssl-cert-builder/tasks/main.yml
Normal file
89
roles/openssl-cert-builder/tasks/main.yml
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
---
|
||||||
|
- name: Generate the private key
|
||||||
|
become: yes
|
||||||
|
openssl_privatekey:
|
||||||
|
path: "/etc/ssl/private/{{ certificate.slug }}.pem"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=r,g=,o=
|
||||||
|
type: ECC
|
||||||
|
curve: secp384r1
|
||||||
|
|
||||||
|
- name: Generate the CSR
|
||||||
|
become: yes
|
||||||
|
openssl_csr:
|
||||||
|
privatekey_path: "/etc/ssl/private/{{ certificate.slug }}.pem"
|
||||||
|
path: "/etc/ssl/csr/{{ certificate.slug }}.csr"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=r,g=r,o=r
|
||||||
|
common_name: "{{ certificate.common_name }}"
|
||||||
|
# À terme, tous les champs seront définis via les overrides
|
||||||
|
# directement à la génération du certificat.
|
||||||
|
# On ne veut pas le faire ici, car c'est effectué sur des hôtes
|
||||||
|
# potentiellement compromis, et ils pourraient exploiter une
|
||||||
|
# race condition pour envoyer leur CSR et la faire signer à
|
||||||
|
# l'AC.
|
||||||
|
use_common_name_for_san: true
|
||||||
|
basic_constraints:
|
||||||
|
- CA:FALSE
|
||||||
|
basic_constraints_critical: true
|
||||||
|
key_usage:
|
||||||
|
- digitalSignature
|
||||||
|
- keyEncipherment
|
||||||
|
key_usage_critical: true
|
||||||
|
extended_key_usage:
|
||||||
|
- serverAuth
|
||||||
|
extended_key_usage_critical: true
|
||||||
|
|
||||||
|
- name: Download the CSR to local
|
||||||
|
fetch:
|
||||||
|
src: "/etc/ssl/csr/{{ certificate.slug }}.csr"
|
||||||
|
dest: "loot/csr/{{ certificate.slug }}.csr"
|
||||||
|
flat: yes
|
||||||
|
|
||||||
|
- name: Upload the CSR to CA server
|
||||||
|
become: true
|
||||||
|
copy:
|
||||||
|
# FIXME: on devrait faire un répertoire "incoming" pour
|
||||||
|
# pas réecrire la CSR et le certificat de l'AC !
|
||||||
|
src: "loot/csr/{{ certificate.slug }}.csr"
|
||||||
|
dest: "/etc/ssl/csr/{{ certificate.slug }}.csr"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=r,g=r,o=r
|
||||||
|
|
||||||
|
- name: Generate the certificate from CSR
|
||||||
|
become: yes
|
||||||
|
openssl_certificate:
|
||||||
|
ownca_privatekey_path: "/etc/ssl/private/{{ root_ca.slug }}.pem"
|
||||||
|
ownca_path: "/etc/ssl/certs/{{ root_ca.slug }}.pem"
|
||||||
|
csr_path: "/etc/ssl/csr/{{ certificate.slug }}.csr"
|
||||||
|
path: "/etc/ssl/certs/{{ certificate.slug }}.pem"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=r,g=r,o=r
|
||||||
|
provider: ownca
|
||||||
|
ownca_not_before: "{{ certificate.not_before }}"
|
||||||
|
ownca_not_after: "{{ certificate.not_after }}"
|
||||||
|
ownca_locality_name: "{{ root_ca.locality_name }}"
|
||||||
|
ownca_country_name: "{{ root_ca.country_name }}"
|
||||||
|
ownca_organization_name: "{{ root_ca.organization_name }}"
|
||||||
|
delegate_to: "{{ openssl_ca_host }}"
|
||||||
|
|
||||||
|
- name: Retrieve the certificate
|
||||||
|
fetch:
|
||||||
|
src: "/etc/ssl/certs/{{ certificate.slug }}.pem"
|
||||||
|
dest: "loot/certs/{{ certificate.slug }}.pem"
|
||||||
|
flat: yes
|
||||||
|
delegate_to: "{{ openssl_ca_host }}"
|
||||||
|
|
||||||
|
- name: Send the certificate to host
|
||||||
|
become: yes
|
||||||
|
copy:
|
||||||
|
src: "loot/certs/{{ certificate.slug }}.pem"
|
||||||
|
dest: "/etc/ssl/certs/{{ certificate.slug }}.pem"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=r,g=r,o=r
|
||||||
|
...
|
Loading…
Reference in a new issue