X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3fa0a5500d5b58b5d0b9ea940dac85be2da079ec..08078f621c8dbc1ecbd6e030bb0fac848cb6a01c:/tools/salt-install/config_examples/single_host/single_hostname/states/snakeoil_certs.sls diff --git a/tools/salt-install/config_examples/single_host/single_hostname/states/snakeoil_certs.sls b/tools/salt-install/config_examples/single_host/single_hostname/states/snakeoil_certs.sls index d88adbc536..0ee7949183 100644 --- a/tools/salt-install/config_examples/single_host/single_hostname/states/snakeoil_certs.sls +++ b/tools/salt-install/config_examples/single_host/single_hostname/states/snakeoil_certs.sls @@ -1,117 +1,135 @@ # Copyright (C) The Arvados Authors. All rights reserved. # -# SPDX-License-Identifier: AGPL-3.0 +# SPDX-License-Identifier: Apache-2.0 {%- set curr_tpldir = tpldir %} {%- set tpldir = 'arvados' %} {%- from "arvados/map.jinja" import arvados with context %} {%- set tpldir = curr_tpldir %} -{%- set arvados_ca_cert_file = '/etc/ssl/certs/arvados-snakeoil-ca.pem' %} +{%- set orig_cert_dir = salt['pillar.get']('extra_custom_certs_dir', '/srv/salt/certs') %} + +include: + - nginx.passenger + - nginx.config + - nginx.service + +# Debian uses different dirs for certs and keys, but being a Snake Oil example, +# we'll keep it simple here. +{%- set arvados_ca_cert_file = '/etc/ssl/private/arvados-snakeoil-ca.pem' %} {%- set arvados_ca_key_file = '/etc/ssl/private/arvados-snakeoil-ca.key' %} -{%- set arvados_cert_file = '/etc/ssl/certs/arvados-snakeoil-cert.pem' %} -{%- set arvados_csr_file = '/etc/ssl/private/arvados-snakeoil-cert.csr' %} -{%- set arvados_key_file = '/etc/ssl/private/arvados-snakeoil-cert.key' %} {%- if grains.get('os_family') == 'Debian' %} {%- set arvados_ca_cert_dest = '/usr/local/share/ca-certificates/arvados-snakeoil-ca.crt' %} {%- set update_ca_cert = '/usr/sbin/update-ca-certificates' %} {%- set openssl_conf = '/etc/ssl/openssl.cnf' %} + +extra_snakeoil_certs_ssl_cert_pkg_installed: + pkg.installed: + - name: ssl-cert + - require_in: + - sls: postgres + {%- else %} {%- set arvados_ca_cert_dest = '/etc/pki/ca-trust/source/anchors/arvados-snakeoil-ca.pem' %} {%- set update_ca_cert = '/usr/bin/update-ca-trust' %} {%- set openssl_conf = '/etc/pki/tls/openssl.cnf' %} + {%- endif %} -arvados_test_salt_states_examples_single_host_snakeoil_certs_dependencies_pkg_installed: +extra_snakeoil_certs_dependencies_pkg_installed: pkg.installed: - pkgs: - openssl - ca-certificates -arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_ca_cmd_run: +# Remove the RANDFILE parameter in openssl.cnf as it makes openssl fail in Ubuntu 18.04 +# Saving and restoring the rng state is not necessary anymore in the openssl 1.1.1 +# random generator, cf +# https://github.com/openssl/openssl/issues/7754 +# +extra_snakeoil_certs_file_comment_etc_openssl_conf: + file.comment: + - name: /etc/ssl/openssl.cnf + - regex: ^RANDFILE.* + - onlyif: grep -q ^RANDFILE /etc/ssl/openssl.cnf + - require_in: + - cmd: extra_snakeoil_certs_arvados_snakeoil_ca_cmd_run + +extra_snakeoil_certs_arvados_snakeoil_ca_cmd_run: # Taken from https://github.com/arvados/arvados/blob/master/tools/arvbox/lib/arvbox/docker/service/certificate/run cmd.run: - name: | - # These dirs are not to CentOS-ish, but this is a helper script + # These dirs are not too CentOS-ish, but this is a helper script # and they should be enough - mkdir -p /etc/ssl/certs/ /etc/ssl/private/ && \ + /bin/bash -c "mkdir -p /etc/ssl/certs/ /etc/ssl/private/ && \ openssl req \ -new \ -nodes \ -sha256 \ -x509 \ - -subj "/C=CC/ST=Some State/O=Arvados Formula/OU=arvados-formula/CN=snakeoil-ca-{{ arvados.cluster.name }}.{{ arvados.cluster.domain }}" \ + -subj \"/C=CC/ST=Some State/O=Arvados Formula/OU=arvados-formula/CN=snakeoil-ca-{{ arvados.cluster.name }}.{{ arvados.cluster.domain }}\" \ -extensions x509_ext \ -config <(cat {{ openssl_conf }} \ - <(printf "\n[x509_ext]\nbasicConstraints=critical,CA:true,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign")) \ + <(printf \"\n[x509_ext]\nbasicConstraints=critical,CA:true,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign\")) \ -out {{ arvados_ca_cert_file }} \ -keyout {{ arvados_ca_key_file }} \ -days 365 && \ cp {{ arvados_ca_cert_file }} {{ arvados_ca_cert_dest }} && \ - {{ update_ca_cert }} + {{ update_ca_cert }}" - unless: - test -f {{ arvados_ca_cert_file }} - openssl verify -CAfile {{ arvados_ca_cert_file }} {{ arvados_ca_cert_file }} - require: - - pkg: arvados_test_salt_states_examples_single_host_snakeoil_certs_dependencies_pkg_installed + - pkg: extra_snakeoil_certs_dependencies_pkg_installed + +{%- set arvados_cert_file = orig_cert_dir ~ '/arvados-__HOSTNAME_EXT__.pem' %} +{%- set arvados_csr_file = orig_cert_dir ~ '/arvadoos-__HOSTNAME_EXT__.csr' %} +{%- set arvados_key_file = orig_cert_dir ~ '/arvados-__HOSTNAME_EXT__.key' %} -arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_cert_cmd_run: +extra_snakeoil_certs_arvados_snakeoil_cert___HOSTNAME_EXT___cmd_run: cmd.run: - name: | - cat > /tmp/openssl.cnf <<-CNF + cat > /tmp/__HOSTNAME_EXT__.openssl.cnf <<-CNF [req] default_bits = 2048 prompt = no default_md = sha256 - req_extensions = rext distinguished_name = dn + req_extensions = rext + [rext] + subjectAltName = @alt_names [dn] C = CC ST = Some State L = Some Location - O = Arvados Formula - OU = arvados-formula + O = Arvados Provision Example Single Host / Single Hostname + OU = arvados-provision-example-single_host_single_hostname CN = {{ arvados.cluster.name }}.{{ arvados.cluster.domain }} emailAddress = admin@{{ arvados.cluster.name }}.{{ arvados.cluster.domain }} - [rext] - subjectAltName = @alt_names [alt_names] {%- for entry in grains.get('ipv4') %} IP.{{ loop.index }} = {{ entry }} {%- endfor %} - {%- for entry in [ - 'keep', - 'collections', - 'download', - 'keepweb', - 'ws', - 'workbench', - 'workbench2', - ] - %} - DNS.{{ loop.index }} = {{ entry }} - {%- endfor %} - DNS.8 = {{ arvados.cluster.name }}.{{ arvados.cluster.domain }} - DNS.9 = '__HOSTNAME_EXT__' - DNS.10 = '__HOSTNAME_INT__' + DNS.1 = {{ arvados.cluster.name }}.{{ arvados.cluster.domain }} + DNS.2 = '__HOSTNAME_EXT__' CNF # The req openssl req \ - -config /tmp/openssl.cnf \ + -config /tmp/__HOSTNAME_EXT__.openssl.cnf \ -new \ -nodes \ -sha256 \ -out {{ arvados_csr_file }} \ - -keyout {{ arvados_key_file }} > /tmp/snake_oil_certs.output 2>&1 && \ + -keyout {{ arvados_key_file }} > /tmp/snake_oil_certs.__HOSTNAME_EXT__.output 2>&1 && \ # The cert openssl x509 \ -req \ -days 365 \ -in {{ arvados_csr_file }} \ -out {{ arvados_cert_file }} \ - -extfile /tmp/openssl.cnf \ + -extfile /tmp/__HOSTNAME_EXT__.openssl.cnf \ -extensions rext \ -CA {{ arvados_ca_cert_file }} \ -CAkey {{ arvados_ca_key_file }} \ @@ -122,37 +140,19 @@ arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_c - test -f {{ arvados_key_file }} - openssl verify -CAfile {{ arvados_ca_cert_file }} {{ arvados_cert_file }} - require: - - pkg: arvados_test_salt_states_examples_single_host_snakeoil_certs_dependencies_pkg_installed - - cmd: arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_ca_cmd_run - -{%- if grains.get('os_family') == 'Debian' %} -arvados_test_salt_states_examples_single_host_snakeoil_certs_ssl_cert_pkg_installed: - pkg.installed: - - name: ssl-cert + - pkg: extra_snakeoil_certs_dependencies_pkg_installed + - cmd: extra_snakeoil_certs_arvados_snakeoil_ca_cmd_run - require_in: - - sls: postgres + - file: extra_custom_certs_file_copy_arvados-__HOSTNAME_EXT__.pem + - file: extra_custom_certs_file_copy_arvados-__HOSTNAME_EXT__.key -arvados_test_salt_states_examples_single_host_snakeoil_certs_certs_permissions_cmd_run: - cmd.run: - - name: | - chown root:ssl-cert {{ arvados_key_file }} - - require: - - cmd: arvados_test_salt_states_examples_single_host_snakeoil_certs_arvados_snake_oil_cert_cmd_run - - pkg: arvados_test_salt_states_examples_single_host_snakeoil_certs_ssl_cert_pkg_installed -{%- endif %} - -arvados_test_salt_states_examples_single_host_snakeoil_certs_nginx_snakeoil_file_managed: + {%- if grains.get('os_family') == 'Debian' %} +extra_snakeoil_certs_certs_permissions___HOSTNAME_EXT___cmd_run: file.managed: - - name: /etc/nginx/snippets/arvados-snakeoil.conf - - contents: | - ssl_certificate {{ arvados_cert_file }}; - ssl_certificate_key {{ arvados_key_file }}; + - name: {{ arvados_key_file }} + - owner: root + - group: ssl-cert - require: - - pkg: nginx_install - - require_in: - - file: nginx_config - - service: nginx_service - - watch_in: - - service: nginx_service - - + - cmd: extra_snakeoil_certs_arvados_snakeoil_cert___HOSTNAME_EXT___cmd_run + - pkg: extra_snakeoil_certs_ssl_cert_pkg_installed + {%- endif %}