====== selbst signierte Zertifikate erstellen (EC) ====== siehe auch: [[::EDV:SSL-Schlüssel generieren]] SSL-Schlüssel mit selbst signiertem Zertifikat erstellen: > /root/bin/make_cert_ec.sh -d www.firma.de -l Hessen -c Frankfurt -o Firma -a Abteilung -u zu einem bereits vorhandenem SSL-Schlüssel ein selbst signiertem Zertifikat erzeugen: > /root/bin/make_cert_ec.sh -d www.test.de -l Mecklenburg -c Schwerin -o Test -a Abteilung -u -k w.firma.de.key Zusammengehörigkeit von Schlüssel und Zertifikat überprüfen: > /root/bin/ssl_check_ec.sh w.firma.de.* read EC key (stdin)= 81a482a5af36c8108cb80f1d7ccd4074 - w.firma.de.crt (stdin)= 81a482a5af36c8108cb80f1d7ccd4074 - w.firma.de.key > /root/bin/ssl_check_ec.sh w.firma.de.key w.test.de.crt read EC key (stdin)= 81a482a5af36c8108cb80f1d7ccd4074 - w.firma.de.key (stdin)= 81a482a5af36c8108cb80f1d7ccd4074 - w.test.de.crt #!/bin/bash # Voreinstellungen STAAT="DE" # Staat EMAIL="default@domain.de" # eMail ZEITRAUM="731" # Gültigkeitszeitraum in Tagen BITLANG="384" # Schlüssellänge in Bit (EC) 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 -sha256 -newkey ec:<(openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-${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 -sha256 -newkey ec:<(openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-${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} -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 -new -key ${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} fi else if [ -z "${KEY}" ] ; then # neuer Schlüssel KEY="${ZNAME}.key" echo "openssl req -x509 -rand /dev/urandom -sha256 -newkey ec:<(openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-${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 -sha256 -newkey ec:<(openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-${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 if [ -r "${KEY}" ] ; then # vorhandener Schlüssel echo "openssl req -x509 -new -key ${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 -new -key ${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 "die Datei ${KEY} ist nicht lesbar..." exit 1 fi fi fi openssl ec -noout -text -in ${KEY} openssl x509 -noout -text -in ${ZNAME}.crt ls -lha ${KEY} ${ZNAME}.crt #!/bin/bash #------------------------------------------------------------------------------# # # NEU - Elliptic curve # überprüft ob EC-SCHLÜSSEL, Zertifikatsanfrage und Zertifikat zusammen gehören # #------------------------------------------------------------------------------# if [ -z "${1}" ] ; then echo "${0} *.simplytel.de.*" exit 1 fi echo for i in ${@} do ENDUNG="$(echo "${i}" | rev | awk -F'.' '{print $1}' | rev)" if [ "${ENDUNG}" == "key" ] ; then #echo "#------------------------------------------------------------------------------#" #ls -lha ${i} #openssl ec -noout -text -in ${i} | sed -ne '/pub:/,/ASN1 OID:/p' #| sed 's/^[ \t][ \t]*//' MD5PRUEFSUMME_EC="$(openssl ec -noout -text -in ${i} | sed -ne '/pub:/,/ASN1 OID:/p' | sed 's/^[ \t][ \t]*//' | openssl md5)" echo "${MD5PRUEFSUMME_EC} - ${i}" #echo "#------------------------------------------------------------------------------#" elif [ "${ENDUNG}" == "csr" ] ; then #echo "#------------------------------------------------------------------------------#" #ls -lha ${i} #openssl req -noout -text -in ${i} | sed -ne '/pub:/,/ASN1 OID:/p' #| sed 's/^[ \t][ \t]*//' MD5PRUEFSUMME_CSR="$(openssl req -noout -text -in ${i} | sed -ne '/pub:/,/ASN1 OID:/p' | sed 's/^[ \t][ \t]*//' | openssl md5)" echo "${MD5PRUEFSUMME_CSR} - ${i}" #echo "#------------------------------------------------------------------------------#" elif [ "${ENDUNG}" == "crt" ] ; then #echo "#------------------------------------------------------------------------------#" #ls -lha ${i} #openssl x509 -noout -text -in ${i} | sed -ne '/pub:/,/ASN1 OID:/p' #| sed 's/^[ \t][ \t]*//' MD5PRUEFSUMME_CRT="$(openssl x509 -noout -text -in ${i} | sed -ne '/pub:/,/ASN1 OID:/p' | sed 's/^[ \t][ \t]*//' | openssl md5)" echo "${MD5PRUEFSUMME_CRT} - ${i}" #echo "#------------------------------------------------------------------------------#" # else # echo "${i} ..." fi done | sort -n echo