selbst signierte Zertifikate erstellen (EC)

siehe auch: 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
/root/bin/make_cert_ec.sh
#!/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
/root/bin/ssl_check_ec.sh
#!/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