Helm-Toolkit: TLS cert generator
This PS adds a function to generate tls certificates from a CA. It also adds a script to generate a snakeoil ca for dev and future gating work. Change-Id: Ic94a9ab5fa3ebb912b507008a6b2f78e16dade67 Signed-off-by: Pete Birley <pete@port.direct>
This commit is contained in:
parent
f8e8ff0082
commit
96703649a5
70
helm-toolkit/templates/tls/_tls_generate_certs.tpl
Normal file
70
helm-toolkit/templates/tls/_tls_generate_certs.tpl
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{{/*
|
||||||
|
Copyright 2017 The Openstack-Helm Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
abstract: |
|
||||||
|
Produces a certificate from a certificate authority.
|
||||||
|
values: |
|
||||||
|
test:
|
||||||
|
hosts:
|
||||||
|
names:
|
||||||
|
- barbican.openstackhelm.example
|
||||||
|
- barbican.openstack.svc.cluster.local
|
||||||
|
ips:
|
||||||
|
- 127.0.0.1
|
||||||
|
- 192.168.0.1
|
||||||
|
life: 3
|
||||||
|
ca:
|
||||||
|
crt: |
|
||||||
|
<CA CRT>
|
||||||
|
key: |
|
||||||
|
<CA PRIVATE KEY>
|
||||||
|
usage: |
|
||||||
|
{{ include "helm-toolkit.utils.tls_generate_certs" (dict "params" .Values.test) }}
|
||||||
|
return: |
|
||||||
|
ca: |
|
||||||
|
<CA CRT>
|
||||||
|
crt: |
|
||||||
|
<CRT>
|
||||||
|
exp: 2018-09-01T10:56:07.895392915-05:00
|
||||||
|
key: |
|
||||||
|
<CRT PRIVATE KEY>
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- define "helm-toolkit.utils.tls_generate_certs" -}}
|
||||||
|
{{- $params := index . "params" -}}
|
||||||
|
{{- $local := dict -}}
|
||||||
|
|
||||||
|
{{- $_hosts := $params.hosts.names | default list }}
|
||||||
|
{{- if kindIs "string" $params.hosts.names }}
|
||||||
|
{{- $_ := set $local "certHosts" (list $params.hosts.names) }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $_ := set $local "certHosts" $_hosts }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- $_ips := $params.hosts.ips | default list }}
|
||||||
|
{{- if kindIs "string" $params.hosts.ips }}
|
||||||
|
{{- $_ := set $local "certIps" (list $params.hosts.ips) }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $_ := set $local "certIps" $_ips }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- $ca := buildCustomCert ($params.ca.crt | b64enc ) ($params.ca.key | b64enc ) }}
|
||||||
|
{{- $expDate := date_modify (printf "+%sh" (mul $params.life 24 |toString)) now }}
|
||||||
|
{{- $rawCert := genSignedCert (first $local.certHosts) ($local.certIps) (rest $local.certHosts) (int $params.life) $ca }}
|
||||||
|
{{- $certificate := dict "crt" $rawCert.Cert "key" $rawCert.Key "ca" $params.ca.crt "exp" $expDate "" }}
|
||||||
|
{{- $certificate | toYaml }}
|
||||||
|
{{- end -}}
|
91
tools/gate/tls-ca-boostrapper/01-setup.sh
Normal file
91
tools/gate/tls-ca-boostrapper/01-setup.sh
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright 2018 The Openstack-Helm Authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
CFSSLURL=https://pkg.cfssl.org/R1.2
|
||||||
|
for CFSSL_BIN in cfssl cfssljson; do
|
||||||
|
if ! type -p "${CFSSL_BIN}"; then
|
||||||
|
sudo curl -sSL -o "/usr/local/bin/${CFSSL_BIN}" "${CFSSLURL}/${CFSSL_BIN}_linux-amd64"
|
||||||
|
sudo chmod +x "/usr/local/bin/${CFSSL_BIN}"
|
||||||
|
ls "/usr/local/bin/${CFSSL_BIN}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
OSH_CONFIG_ROOT="/etc/openstack-helm"
|
||||||
|
OSH_CA_ROOT="${OSH_CONFIG_ROOT}/certs/ca"
|
||||||
|
OSH_SERVER_TLS_ROOT="${OSH_CONFIG_ROOT}/certs/server"
|
||||||
|
|
||||||
|
sudo mkdir -p ${OSH_CONFIG_ROOT}
|
||||||
|
sudo chown $(whoami): -R ${OSH_CONFIG_ROOT}
|
||||||
|
|
||||||
|
mkdir -p "${OSH_CA_ROOT}"
|
||||||
|
tee ${OSH_CA_ROOT}/ca-config.json << EOF
|
||||||
|
{
|
||||||
|
"signing": {
|
||||||
|
"default": {
|
||||||
|
"expiry": "1y"
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"server": {
|
||||||
|
"expiry": "1y",
|
||||||
|
"usages": [
|
||||||
|
"signing",
|
||||||
|
"key encipherment",
|
||||||
|
"server auth"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
tee ${OSH_CA_ROOT}/ca-csr.json << EOF
|
||||||
|
{
|
||||||
|
"CN": "ACME Company",
|
||||||
|
"key": {
|
||||||
|
"algo": "rsa",
|
||||||
|
"size": 2048
|
||||||
|
},
|
||||||
|
"names": [
|
||||||
|
{
|
||||||
|
"C": "US",
|
||||||
|
"L": "SomeState",
|
||||||
|
"ST": "SomeCity",
|
||||||
|
"O": "SomeOrg",
|
||||||
|
"OU": "SomeUnit"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cfssl gencert -initca ${OSH_CA_ROOT}/ca-csr.json | cfssljson -bare ${OSH_CA_ROOT}/ca -
|
||||||
|
|
||||||
|
function check_cert_and_key () {
|
||||||
|
TLS_CERT=$1
|
||||||
|
TLS_KEY=$2
|
||||||
|
openssl x509 -inform pem -in ${TLS_CERT} -noout -text
|
||||||
|
CERT_MOD="$(openssl x509 -noout -modulus -in ${TLS_CERT})"
|
||||||
|
KEY_MOD="$(openssl rsa -noout -modulus -in ${TLS_KEY})"
|
||||||
|
if ! [ "${CERT_MOD}" = "${KEY_MOD}" ]; then
|
||||||
|
echo "Failure: TLS private key does not match this certificate."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
CERT_MOD=""
|
||||||
|
KEY_MOD=""
|
||||||
|
echo "Pass: ${TLS_CERT} is valid with ${TLS_KEY}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
check_cert_and_key ${OSH_CA_ROOT}/ca.pem ${OSH_CA_ROOT}/ca-key.pem
|
Loading…
Reference in New Issue
Block a user