Browse Source

use certificate role

master
parent
commit
ae42a28a7e
6 changed files with 78 additions and 102 deletions
  1. +0
    -2
      defaults/main.yml
  2. +48
    -0
      tasks/directory.yml
  3. +23
    -77
      tasks/main.yml
  4. +0
    -6
      templates/basic_constraints.json.j2
  5. +0
    -9
      templates/extensions.cnf.j2
  6. +7
    -8
      templates/openssl.cnf.j2

+ 0
- 2
defaults/main.yml View File

@@ -1,4 +1,2 @@
certificate_authority_private_key_size: 4096
certificate_authority_subject: "{% if certificate_authority_country is defined%}/C={{certificate_authority_country}}{% endif %}{% if certificate_authority_state is defined%}/ST={{certificate_authority_state}}{% endif %}{% if certificate_authority_locality is defined%}/L={{certificate_authority_locality}}{% endif %}{% if certificate_authority_organization is defined%}/O={{certificate_authority_organization}}{% endif %}{% if certificate_authority_organizational_unit is defined%}/OU={{certificate_authority_organizational_unit}}{% endif %}/CN={{certificate_authority_common_name}}"
certificate_authority_policy: strict
certificate_authority_unique_subject: no

+ 48
- 0
tasks/directory.yml View File

@@ -0,0 +1,48 @@
---

# setup ca directory

- name: directory
file:
path: "{{ certificate_authority_directory }}"
#mode: 0700
state: directory

- name: subdirectories
file:
path: "{{ certificate_authority_directory }}/{{ item }}"
#mode: 0700
state: directory
with_items:
- certs
- crl
- csr
- newcerts

- name: private directory
file:
path: "{{ certificate_authority_directory }}/private"
mode: 0700
state: directory

- name: index
copy:
content: ""
dest: "{{ certificate_authority_directory }}/index"
force: no

- name: index config
template:
src: index.attr.j2
dest: "{{ certificate_authority_directory }}/index.attr"

- name: serial
copy:
content: "00\n"
dest: "{{ certificate_authority_directory }}/serial"
force: no

- name: openssl config
template:
src: openssl.cnf.j2
dest: "{{ certificate_authority_directory }}/openssl.cnf"

+ 23
- 77
tasks/main.yml View File

@@ -2,89 +2,35 @@

# https://jamielinux.com/docs/openssl-certificate-authority/create-the-root-pair.html

- name: directory
file:
path: "{{ certificate_authority_directory }}"
#mode: 0700
state: directory

- name: subdirectories
file:
path: "{{ certificate_authority_directory }}/{{ item }}"
#mode: 0700
state: directory
with_items:
- certs
- crl
- csr
- newcerts

- name: private directory
file:
path: "{{ certificate_authority_directory }}/private"
mode: 0700
state: directory

- name: private key
command:
openssl genrsa
-out private/ca.key.pem
{{ certificate_authority_private_key_size }}
args:
chdir: "{{ certificate_authority_directory }}"
creates: "{{ certificate_authority_directory }}/private/ca.key.pem"

- name: openssl config
template:
src: openssl.cnf.j2
dest: "{{ certificate_authority_directory }}/openssl.cnf"

- name: extensions config
template:
src: extensions.cnf.j2
dest: "{{ certificate_authority_directory }}/extensions.cnf"

- name: index config
template:
src: index.attr.j2
dest: "{{ certificate_authority_directory }}/index.attr"

- name: index
copy:
content: ""
dest: "{{ certificate_authority_directory }}/index"
force: no

- name: serial
copy:
content: "00\n"
dest: "{{ certificate_authority_directory }}/serial"
force: no

- name: certificate signing request
command: openssl req -new
-config openssl.cnf
-key private/ca.key.pem
-days {{ certificate_authority_days }}
-sha256
-out csr/ca.csr.pem
-subj "{{ certificate_authority_subject }}"
args:
chdir: "{{ certificate_authority_directory }}"
creates: "{{ certificate_authority_directory }}/csr/ca.csr.pem"
#when: certificate_authority_type == "intermediate"
- include: directory.yml

- include_role:
name: certificate
vars:
certificate_name: ca
certificate_provider: manual
certificate_authority: true
certificate_key_usage:
- digitalSignature
- cRLSign
- keyCertSign
certificate_directory: "{{ certificate_authority_directory }}"
certificate_file: "{{ certificate_authority_directory }}/certs/ca.cert.pem"
certificate_signing_request_file: "{{ certificate_authority_directory }}/csr/ca.csr.pem"
certificate_signing_request_config_file: "{{ certificate_authority_directory }}/csr/ca.csr.cnf"
certificate_private_key_file: "{{ certificate_authority_directory }}/private/ca.key.pem"

- name: self sign certificate
command: openssl ca -selfsign -batch
command: openssl ca -selfsign -batch -notext
-config openssl.cnf
-days {{ certificate_authority_days }}
-extensions certificate_authority
-in csr/ca.csr.pem
-out certs/ca.cert.pem
-subj "{{ certificate_authority_subject }}"
{{ certificate_private_key_password is defined | ternary('-passin env:PRIVATE_KEY_PASSWORD','') }}
args:
chdir: "{{ certificate_authority_directory }}"
creates: "{{ certificate_authority_directory }}/certs/ca.cert.pem"
environment:
PRIVATE_KEY_PASSWORD: "{{ certificate_private_key_password | default('') }}"
when: certificate_authority_type == "root"

- name: certificate info
@@ -94,6 +40,6 @@
changed_when: false
register: _certificate_authority_info

- name: show certificate info
- name: certificate debug
debug:
msg: "{{ _certificate_authority_info }}"
msg: "{{ _certificate_authority_info.stdout_lines }}"

+ 0
- 6
templates/basic_constraints.json.j2 View File

@@ -1,6 +0,0 @@
[
"CA:TRUE",
{% if certificate_authority_pathlen is defined %}
"pathlen:{{certificate_authority_pathlen}}",
{% endif %}
]

+ 0
- 9
templates/extensions.cnf.j2 View File

@@ -1,9 +0,0 @@
[ certificate_authority ]
# Extensions for a typical CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, {{ certificate_authority_basic_constraints | join(', ') }}
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
{% if certificate_authority_name_constraints is defined %}
nameConstraints = critical, {{ certificate_authority_name_constraints | join(',') }}
{% endif %}

+ 7
- 8
templates/openssl.cnf.j2 View File

@@ -1,3 +1,5 @@
{{ ansible_managed | comment }}

[ ca ]
# `man ca`
default_ca = CA_default
@@ -27,10 +29,13 @@ default_md = sha256

name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_{{ certificate_authority_policy }}

copy_extensions = copy

default_enddate = {{ lookup('pipe','date -u --date="'+(certificate_authority_enddate|string)+'" +%Y%m%d%H%M%SZ') }}

[ policy_strict ]
# The root CA should only sign intermediate certificates that match.
# See the POLICY FORMAT section of `man ca`.
@@ -92,23 +97,17 @@ localityName_default = {{ certificate_authority_locality | default(''
organizationalUnitName_default = {{ certificate_authority_organizational_unit | default('') }}
#emailAddress_default =

{% include "extensions.cnf.j2" %}

[ usr_cert ]
# Extensions for client certificates (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection

[ server_cert ]
# Extensions for server certificates (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment


Loading…
Cancel
Save