1*c340ef28SDag-Erling Smørgrav# 2*c340ef28SDag-Erling Smørgrav# Copyright (c) 2025 Dag-Erling Smørgrav <des@FreeBSD.org> 3*c340ef28SDag-Erling Smørgrav# 4*c340ef28SDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause 5*c340ef28SDag-Erling Smørgrav# 6*c340ef28SDag-Erling Smørgrav 7*c340ef28SDag-Erling Smørgrav# Generate a random name 8*c340ef28SDag-Erling Smørgravrand_name() { 9*c340ef28SDag-Erling Smørgrav local length=${1:-32} 10*c340ef28SDag-Erling Smørgrav 11*c340ef28SDag-Erling Smørgrav jot -r -c -s '' ${length} A Z 12*c340ef28SDag-Erling Smørgrav} 13*c340ef28SDag-Erling Smørgrav 14*c340ef28SDag-Erling Smørgrav# Generate a subject for a given name 15*c340ef28SDag-Erling Smørgravsubject() { 16*c340ef28SDag-Erling Smørgrav local crtname=$1 17*c340ef28SDag-Erling Smørgrav 18*c340ef28SDag-Erling Smørgrav echo "/CN=${crtname}/O=FreeBSD/OU=Test/" 19*c340ef28SDag-Erling Smørgrav} 20*c340ef28SDag-Erling Smørgrav 21*c340ef28SDag-Erling Smørgrav# Generate a key 22*c340ef28SDag-Erling Smørgravgen_key() { 23*c340ef28SDag-Erling Smørgrav local keyname=$1 24*c340ef28SDag-Erling Smørgrav 25*c340ef28SDag-Erling Smørgrav env -i PATH="${PATH}" OPENSSL_CONF=/dev/null \ 26*c340ef28SDag-Erling Smørgrav openssl genrsa -out ${keyname}.key 27*c340ef28SDag-Erling Smørgrav} 28*c340ef28SDag-Erling Smørgrav 29*c340ef28SDag-Erling Smørgrav# Generate a certificate for a given name, key, and serial number 30*c340ef28SDag-Erling Smørgravgen_crt() { 31*c340ef28SDag-Erling Smørgrav local crtname=$1 32*c340ef28SDag-Erling Smørgrav local keyname=${2:-${crtname}} 33*c340ef28SDag-Erling Smørgrav local serial=${3:-1} 34*c340ef28SDag-Erling Smørgrav 35*c340ef28SDag-Erling Smørgrav if ! [ -f "${keyname}".key ]; then 36*c340ef28SDag-Erling Smørgrav gen_key "${keyname}" 37*c340ef28SDag-Erling Smørgrav fi 38*c340ef28SDag-Erling Smørgrav env -i PATH="${PATH}" OPENSSL_CONF=/dev/null \ 39*c340ef28SDag-Erling Smørgrav openssl req -x509 -new \ 40*c340ef28SDag-Erling Smørgrav -subj="$(subject ${crtname})" \ 41*c340ef28SDag-Erling Smørgrav -set_serial ${serial} \ 42*c340ef28SDag-Erling Smørgrav -key ${keyname}.key \ 43*c340ef28SDag-Erling Smørgrav -out ${crtname}.crt 44*c340ef28SDag-Erling Smørgrav} 45