diff --git a/ssl-ca b/ssl-ca index 4389d82def50fba10bc9c99b0f1e48e3210d6d9d..378143de266ae5672e98d5a046c93bbca9ced759 100755 --- a/ssl-ca +++ b/ssl-ca @@ -1,18 +1,28 @@ #!/bin/sh -e -domain="$(basename $(pwd))" -default_config=\ +export domain="$(basename $PWD)" +seed="$(hexdump -n10 -e '10/1 "%02o" "\n"' /dev/urandom)" +config=\ "[ ca ] default_ca = CA_default [ CA_default ] -dir = . -certs = certs -certificate = CA.crt -private_key = CA.key +dir = $PWD +certs = \$dir/certs +certificate = \$dir/CA.crt +private_key = \$dir/CA.key default_md = sha256 default_days = 365 email_in_dn = no +RANDFILE = /dev/urandom +database = /dev/null + +[ req ] +distinguished_name = req_distinguished_name +prompt = no +encrypt_key = no +default_md = sha256 +default_bits = 2048 [ req_distinguished_name] #C = 2 letter country code @@ -21,57 +31,46 @@ email_in_dn = no #O = Organization name #OU = Organizational unit #emailAddress = email address -#CN = *.*.$domain - -[ req ] -distinguished_name = req_distinguished_name -prompt = no -encrypt_key = no -default_md = sha256 -default_bits = 2048" +CN = *.*.\${ENV::domain} +" usage () { echo "Usage: $0 init|gen|sign|resign" } init () { - mkdir -p "certs" - mkdir -p "keys" - echo "$default_config" > "openssl.cnf" + mkdir -p "certs" "keys" + echo "$config" > "openssl.cnf" openssl genrsa \ -out CA.key openssl req \ -x509 \ -config openssl.cnf \ -new \ - -subj "CN=*.*.$domain" \ -key CA.key \ -out CA.crt } sign_key () { - echo "Generating CSR for $1.$domain." csr="$(mktemp -t ssl-ca)" + export domain="$1.$domain" openssl req \ -key keys/$1 \ -new \ -config openssl.cnf \ - -subj "/CN=*.*.$1.$domain" \ -out "$csr" - echo "Generating cert for $1.$domain." - openssl x509 \ + fqdn="$1.$domain" openssl x509 \ -req \ -in "$csr" \ -out "certs/$1" \ -CA CA.crt \ - -CAcreateserial \ + -set_serial $seed \ -extensions v3_ca \ -CAkey CA.key rm "$csr" } gen_key () { - echo "Generating key for $1.$domain." openssl genrsa -out "keys/$1" }