docs(examples): reduce snakeoil cert days to 1yr
[arvados-formula.git] / test / salt / states / examples / single_host / snakeoil_certs.sls
1 {%- set curr_tpldir = tpldir %}
2 {%- set tpldir = 'arvados' %}
3 {%- from "arvados/map.jinja" import arvados with context %}
4 {%- set tpldir = curr_tpldir %}
5
6 include:
7   - nginx.service
8
9 {%- set arvados_ca_cert_file = '/etc/ssl/certs/arvados-snakeoil-ca.pem' %}
10 {%- set arvados_ca_key_file = '/etc/ssl/private/arvados-snakeoil-ca.key' %}
11 {%- set arvados_cert_file = '/etc/ssl/certs/arvados-snakeoil-cert.pem' %}
12 {%- set arvados_csr_file = '/etc/ssl/private/arvados-snakeoil-cert.csr' %}
13 {%- set arvados_key_file = '/etc/ssl/private/arvados-snakeoil-cert.key' %}
14
15 {%- if grains.get('os_family') == 'Debian' %}
16   {%- set arvados_ca_cert_dest = '/usr/local/share/ca-certificates/arvados-snakeoil-ca.crt' %}
17   {%- set update_ca_cert = '/usr/sbin/update-ca-certificates' %}
18   {%- set openssl_conf = '/etc/ssl/openssl.cnf' %}
19 {%- else %}
20   {%- set arvados_ca_cert_dest = '/etc/pki/ca-trust/source/anchors/arvados-snakeoil-ca.pem' %}
21   {%- set update_ca_cert = '/usr/bin/update-ca-trust' %}
22   {%- set openssl_conf = '/etc/pki/tls/openssl.cnf' %}
23 {%- endif %}
24
25 arvados_test_salt_states_examples_single_host_snakeoil_certs_dependencies_pkg_installed:
26   pkg.installed:
27     - pkgs:
28       - openssl
29       - ca-certificates
30
31 arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_ca_cmd_run:
32   # Taken from https://github.com/arvados/arvados/blob/master/tools/arvbox/lib/arvbox/docker/service/certificate/run
33   cmd.run:
34     - name: |
35         # These dirs are not to CentOS-ish, but this is a helper script
36         # and they should be enough
37         mkdir -p /etc/ssl/certs/ /etc/ssl/private/ && \
38         openssl req \
39           -new \
40           -nodes \
41           -sha256 \
42           -x509 \
43           -subj "/C=CC/ST=Some State/O=Arvados Formula/OU=arvados-formula/CN=snakeoil-ca-{{ arvados.cluster.name }}.{{ arvados.cluster.domain }}" \
44           -extensions x509_ext \
45           -config <(cat {{ openssl_conf }} \
46                   <(printf "\n[x509_ext]\nbasicConstraints=critical,CA:true,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign")) \
47           -out {{ arvados_ca_cert_file }} \
48           -keyout {{ arvados_ca_key_file }} \
49           -days 365 && \
50         cp {{ arvados_ca_cert_file }} {{ arvados_ca_cert_dest }} && \
51         {{ update_ca_cert }}
52     - unless:
53       - test -f {{ arvados_ca_cert_file }}
54       - openssl verify -CAfile {{ arvados_ca_cert_file }} {{ arvados_ca_cert_file }}
55     - require:
56       - pkg: arvados_test_salt_states_examples_single_host_snakeoil_certs_dependencies_pkg_installed
57
58 arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_cert_cmd_run:
59   cmd.run:
60     - name: |
61         cat > /tmp/openssl.cnf <<-CNF
62         [req]
63         default_bits = 2048
64         prompt = no
65         default_md = sha256
66         req_extensions = rext
67         distinguished_name = dn
68         [dn]
69         C   = CC
70         ST  = Some State
71         L   = Some Location
72         O   = Arvados Formula
73         OU  = arvados-formula
74         CN  = {{ arvados.cluster.name }}.{{ arvados.cluster.domain }}
75         emailAddress = admin@{{ arvados.cluster.name }}.{{ arvados.cluster.domain }}
76         [rext]
77         subjectAltName = @alt_names
78         [alt_names]
79         {%- for entry in grains.get('ipv4') %}
80         IP.{{ loop.index }} = {{ entry }}
81         {%- endfor %}
82         {%- for entry in [
83             'keep',
84             'collections',
85             'download',
86             'ws',
87             'workbench',
88             'workbench2',
89           ]
90         %}
91         DNS.{{ loop.index }} = {{ entry }}.{{ arvados.cluster.name }}.{{ arvados.cluster.domain }}
92         {%- endfor %}
93         DNS.7 = {{ arvados.cluster.name }}.{{ arvados.cluster.domain }}
94         CNF
95
96         # The req
97         openssl req \
98           -config /tmp/openssl.cnf \
99           -new \
100           -nodes \
101           -sha256 \
102           -out {{ arvados_csr_file }} \
103           -keyout {{ arvados_key_file }} > /tmp/snake_oil_certs.output 2>&1 && \
104         # The cert
105         openssl x509 \
106           -req \
107           -days 365 \
108           -in {{ arvados_csr_file }} \
109           -out {{ arvados_cert_file }} \
110           -extfile /tmp/openssl.cnf \
111           -extensions rext \
112           -CA {{ arvados_ca_cert_file }} \
113           -CAkey {{ arvados_ca_key_file }} \
114           -set_serial $(date +%s) && \
115         chmod 0644 {{ arvados_cert_file }} && \
116         chmod 0640 {{ arvados_key_file }}
117     - unless:
118       - test -f {{ arvados_key_file }}
119       - openssl verify -CAfile {{ arvados_ca_cert_file }} {{ arvados_cert_file }}
120     - require:
121       - pkg: arvados_test_salt_states_examples_single_host_snakeoil_certs_dependencies_pkg_installed
122       - cmd: arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_ca_cmd_run
123
124 {%- if grains.get('os_family') == 'Debian' %}
125 arvados_test_salt_states_examples_single_host_snakeoil_certs_ssl_cert_pkg_installed:
126   pkg.installed:
127     - name: ssl-cert
128     - require_in:
129       - sls: postgres
130
131 arvados_test_salt_states_examples_single_host_snakeoil_certs_certs_permissions_cmd_run:
132   cmd.run:
133     - name: |
134         chown root:ssl-cert {{ arvados_key_file }}
135     - require:
136       - cmd: arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_cert_cmd_run
137       - pkg: arvados_test_salt_states_examples_single_host_snakeoil_certs_ssl_cert_pkg_installed
138 {%- endif %}
139
140 arvados_test_salt_states_examples_single_host_snakeoil_certs_nginx_snakeoil_file_managed:
141   file.managed:
142     - name: /etc/nginx/snippets/arvados-snakeoil.conf
143     - contents: |
144         ssl_certificate {{ arvados_cert_file }};
145         ssl_certificate_key {{ arvados_key_file }};
146     - watch_in:
147       - service: nginx_service
148
149