#!/bin/sh usage() { printf "Usage: %s [-c curve] [-d days] domain\n" "${0##*/}" >&2 exit 1 } tonumber() { printf "%u\n" "$*" } curve=secp384r1 days=3650 while getopts c:d: flag; do case $flag in c) [ -n "$OPTARG" ] || usage curve=$OPTARG ;; d) days=$(tonumber "$OPTARG") || usage ;; *) usage ;; esac done shift $((OPTIND - 1)) [ $# -eq 1 ] && [ -n "$1" ] || usage domain=$1 if [ -f "$domain.key" ]; then printf "%s: key for %s already exists; reusing it.\n" \ "${0##*/}" "$domain" >&2 else (umask 0377 && openssl ecparam -genkey -name "$curve" -out "$domain.key") fi umask 0333 && openssl req -new -x509 -days "$days" -subj "/CN=$domain" \ -key "$domain.key" -out "$domain.pem"