#!/bin/bash # Voreinstellungen STAAT="DE" # Staat EMAIL="default@domain.de" # eMail ZEITRAUM="731" # Gültigkeitszeitraum in Tagen BITLANG="4096" # Schlüssellänge in Bit if [ -z "${1}" ] ; then echo "${0} -h" exit 1 fi while [ "${#}" -ne "0" ]; do case "${1}" in -d) DOMAIN=${2} # neuen oder vorhandenen Schlüssel verwenden shift ;; -k) KEY=${2} # neuen oder vorhandenen Schlüssel verwenden shift ;; -u) UNSIGNIERT=JA # Schlüssel mit unsigniertem Zertifikat erstellen shift ;; -s) STAAT=${2} # z.B.: DE shift ;; -l) LAND=${2} # z.B.: Hessen shift ;; -c) STADT=${2} # z.B.: Frankfurt shift ;; -o) ORGANISATION=${2} # Organisation shift ;; -a) ABTEILUNG=${2} # Abteilung shift ;; -m) EMAIL=${2} # z.B.: default@domain.de shift ;; -z) ZEITRAUM=${2} # Gültigkeitszeitraum: 730 shift ;; -b) BITLANG=${2} # Schlüssellänge: 4096 shift ;; -h) echo " zwingend erforderliche Parameter: -d Domain/FQDN -l Land -c City/Stadt -o Organisation/Mandant -a Abteilung/Marke optionale Parameter: -k Key-Datei der schon existiert -s Staat -m Mail -z Zeitraum der Gültigkeit -b Bit-Länge des Schlüssels Beispiele wild-card-Zertifikat mit neuem Schlüssel: # ${0} -d '*.firma.de' -l Hessen -c Frankfurt -o Firma -a Abteilung unsigniertes Standard-Zertifikat mit vorhandenem Schlüssel: # ${0} -d www.firma.de -l Hessen -c Frankfurt -o Firma -a Abteilung -k www.firma.de.key -u " exit 0 ;; *) if [ "$(echo "${1}"|egrep '^-')" ] ; then echo "Der Parameter '${1}' wird nicht unterstützt!" exit 1 fi shift ;; esac done ZNAME="$(echo "${DOMAIN}" | tr -s '[*]' 'w')" if [ -z "${DOMAIN}" -o -z "${LAND}" -o -z "${STADT}" -o -z "${ORGANISATION}" -o -z "${ABTEILUNG}" ] ; then echo " Es werden mind. die Parameter -d, -l, -c, -o, und -a benötigt! => ${0} -h " exit 1 fi if [ "${UNSIGNIERT}" == "JA" ] ; then if [ -z "${KEY}" ] ; then # neuer Schlüssel KEY="${ZNAME}.key" echo "openssl req -x509 -rand /dev/urandom -sha1 -newkey rsa:${BITLANG} -nodes -keyout ${KEY} -keyform PEM -out ${ZNAME}.crt -outform PEM -subj \"/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}\" -days ${ZEITRAUM}" openssl req -x509 -rand /dev/urandom -sha1 -newkey rsa:${BITLANG} -nodes -keyout ${KEY} -keyform PEM -out ${ZNAME}.crt -outform PEM -subj "/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}" -days ${ZEITRAUM} else echo "openssl req -x509 -new -key ${KEY} -out ${ZNAME}.crt -outform PEM -subj "/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}" -days ${ZEITRAUM}" openssl req -x509 -new -key ${KEY} -out ${ZNAME}.crt -outform PEM -subj "/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}" -days ${ZEITRAUM} fi else if [ -z "${KEY}" ] ; then # neuer Schlüssel KEY="${ZNAME}.key" echo "openssl req -rand /dev/urandom -sha1 -newkey rsa:${BITLANG} -nodes -keyout ${KEY} -keyform PEM -out ${ZNAME}.csr -outform PEM -subj \"/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}\" -days ${ZEITRAUM}" openssl req -rand /dev/urandom -sha1 -newkey rsa:${BITLANG} -nodes -keyout ${KEY} -keyform PEM -out ${ZNAME}.csr -outform PEM -subj "/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}" -days ${ZEITRAUM} else if [ -r "${KEY}" ] ; then # vorhandener Schlüssel echo "openssl req -new -key ${KEY} -keyform PEM -out ${ZNAME}.csr -outform PEM -subj \"/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}\" -days ${ZEITRAUM}" openssl req -new -key ${KEY} -keyform PEM -out ${ZNAME}.csr -outform PEM -subj "/emailAddress=${EMAIL}/C=${STAAT}/ST=${LAND}/L=${STADT}/O=${ORGANISATION}/OU=${ABTEILUNG}/CN=${DOMAIN}" -days ${ZEITRAUM} else echo "die Datei ${KEY} ist nicht lesbar..." exit 1 fi fi fi if [ -r "${ZNAME}.csr" ] ; then echo "${ZNAME}.csr $(openssl req -text -verify -in ${ZNAME}.csr)" fi if [ -r "${KEY}" ] ; then echo "${KEY} $(openssl rsa -noout -modulus -in ${KEY} | openssl md5)" fi if [ -r "${ZNAME}.csr" ] ; then echo "${ZNAME}.csr $(openssl req -noout -modulus -in ${ZNAME}.csr | openssl md5)" fi if [ -r "${ZNAME}.crt" ] ; then echo "${ZNAME}.crt $(openssl x509 -noout -modulus -in ${ZNAME}.crt | openssl md5)" fi