Add a certificate generator makefile/config
Update XOS core certificates
Change-Id: I1e4cda425704e724b9b494609f2e7777424c1951
diff --git a/scripts/pki/Makefile b/scripts/pki/Makefile
new file mode 100644
index 0000000..a21f042
--- /dev/null
+++ b/scripts/pki/Makefile
@@ -0,0 +1,110 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+# XOS pki makefile
+# Configuration is also given in xos-pki.cnf
+
+SHELL = bash -eu -o pipefail
+
+# parameters
+KEY_SIZE ?= 2048
+EXPIRATION_DAYS ?= 366
+OPENSSL_CNF ?= xos-pki.cnf
+
+# utility/validation targets
+
+help:
+ @echo "Usually you want to run 'make helm_xos_pki.yaml'"
+
+validate:
+ openssl verify -verbose -purpose sslserver -CAfile xos-CA.pem xos-core.crt
+
+printca: xos-CA.pem
+ openssl x509 -in $< -text -noout
+
+printkey: xos-core.key
+ openssl rsa -in $< -check
+
+printcsr: xos-core.csr
+ openssl req -in $< -text -noout -verify
+
+printpem: xos-core.pem
+ openssl x509 -in $< -text -noout
+
+all_certs: xos-core.pem
+
+helm_xos_pki.yaml: xos-CA.pem xos-core.pem xos-core.key
+ @echo "Creating helm compatible YAML file containing certs"
+ @echo "---" > $@
+ @echo "# Certificates can be regenerated with scripts/pki/Makefile" >> $@
+ @echo "# Created on: `date -u`, good for $(EXPIRATION_DAYS) days" >> $@
+ @echo "ca_cert_chain: |" >> $@
+ @cat xos-CA.pem | base64 -b 72 | sed 's/^/ /' >> $@
+ @echo "secrets:" >> $@
+ @echo " core_api_cert: |" >> $@
+ @cat xos-core.pem | base64 -b 72 | sed 's/^/ /' >> $@
+ @echo " core_api_key: |" >> $@
+ @cat xos-core.key | base64 -b 72 | sed 's/^/ /' >> $@
+
+clean:
+ rm -rf root_ca *.pem *.key *.csr helm_xos_pki.yaml
+
+# CA creation
+root_ca:
+ mkdir -p root_ca/private root_ca/newcerts
+ chmod 700 root_ca/private
+ echo 1000 > root_ca/serial
+ touch root_ca/index.txt
+
+root_ca/private/ca_root_phrase: root_ca
+ @echo "TestingXOSRootCAPassPhrase" > root_ca/private/ca_root_phrase
+
+root_ca/private/ca_key.pem: root_ca root_ca/private/ca_root_phrase
+ @echo "## Creating CA private key, $@"
+ openssl genrsa -aes256 \
+ -passout file:root_ca/private/ca_root_phrase \
+ -out root_ca/private/ca_key.pem $(KEY_SIZE)
+
+xos-CA.pem: xos-pki.cnf root_ca/private/ca_key.pem
+ @echo "## Creating self-signed CA public key: $@"
+ openssl req -config $(OPENSSL_CNF) \
+ -new -x509 -days $(EXPIRATION_DAYS) -sha256 \
+ -extensions v3_ca \
+ -key root_ca/private/ca_key.pem \
+ -passin file:root_ca/private/ca_root_phrase \
+ -subj "/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=CORD Test Root CA" \
+ -out $@
+
+# cert creation
+.PRECIOUS: %.key %.csr # don't delete intermediate files
+
+%.key:
+ @echo "## Creating server private key: $@"
+ openssl genrsa -out $@ $(KEY_SIZE)
+
+%.csr: %.key $(OPENSSL_CNF)
+ @echo "## Creating signing request $@ from $<"
+ openssl req -config $(OPENSSL_CNF) \
+ -new -sha256 -key $< \
+ -subj "/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=$*" \
+ -out $@
+
+%.pem: %.csr xos-CA.pem $(OPENSSL_CNF)
+ @echo "## Signing voltha.csr to create signed public key: voltha.crt"
+ openssl ca -config $(OPENSSL_CNF) \
+ -batch -days $(EXPIRATION_DAYS) -md sha256 \
+ -passin file:root_ca/private/ca_root_phrase \
+ -extensions $* \
+ -in $< \
+ -out $@