You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.0 KiB
YAML

---
- 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 générer une CSR
# arbitraire et la faire signer à l'AC (qui sera possiblement
# acceptée par les navigateurs des techniciens).
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/ext/{{ certificate.slug }}.csr"
flat: yes
- name: Create directories for CSRs and certificates
become: true
file:
state: directory
name: "{{ item }}"
owner: root
group: root
mode: u=rwx,g=rx,o=rx
loop:
- /etc/ssl/csr/ext
- /etc/ssl/certs/ext
- 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/ext/{{ certificate.slug }}.csr"
dest: "/etc/ssl/csr/ext/{{ certificate.slug }}.csr"
owner: root
group: root
mode: u=r,g=r,o=r
delegate_to: "{{ openssl_ca_host }}"
- name: Generate the certificate from CSR
become: yes
openssl_certificate:
ownca_privatekey_path: "/etc/ssl/private/{{ hostvars[openssl_ca_host].root_ca.slug }}.pem"
ownca_path: "/etc/ssl/certs/{{ hostvars[openssl_ca_host].root_ca.slug }}.pem"
csr_path: "/etc/ssl/csr/ext/{{ certificate.slug }}.csr"
path: "/etc/ssl/certs/ext/{{ 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: "{{ hostvars[openssl_ca_host].root_ca.locality_name }}"
ownca_country_name: "{{ hostvars[openssl_ca_host].root_ca.country_name }}"
delegate_to: "{{ openssl_ca_host }}"
- name: Retrieve the certificate
fetch:
src: "/etc/ssl/certs/ext/{{ certificate.slug }}.pem"
dest: "loot/certs/ext/{{ certificate.slug }}.pem"
flat: yes
delegate_to: "{{ openssl_ca_host }}"
- name: Send the certificate to host
become: yes
copy:
src: "loot/certs/ext/{{ certificate.slug }}.pem"
dest: "/etc/ssl/certs/{{ certificate.slug }}.pem"
owner: root
group: root
mode: u=r,g=r,o=r
...