ssl-schluessel_generieren
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| ssl-schluessel_generieren [2024-04-05 13:30:12] – [Skript mit Parametern] manfred | ssl-schluessel_generieren [2024-04-05 14:27:07] (aktuell) – gelöscht manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== SSL-Schlüssel generieren ====== | ||
| - | |||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | > openssl s_client -connect www.heise.de: | ||
| - | |||
| - | **[[einen selbst signierten SSL-Schlüssel generieren]]** | ||
| - | |||
| - | |||
| - | ==== mit einem einzigen Aufruf einen neuen Schlüssen und sein Zertifikat erzeugen ==== | ||
| - | |||
| - | **'' | ||
| - | > openssl req -rand / | ||
| - | > openssl rsa -in / | ||
| - | |||
| - | **'' | ||
| - | > openssl req -rand / | ||
| - | > openssl pkey -in / | ||
| - | |||
| - | **'' | ||
| - | > openssl req -rand / | ||
| - | > openssl pkey -in / | ||
| - | |||
| - | Die DSA-Schlüssel sind alle NSA-optimiert und somit als unsicher anzusehen. | ||
| - | Auch von den Schlüsseln mit elliptischen Kurven wird vermutet, dass sie NSA-optimiert sind. | ||
| - | Weiterhin gilt die Einschränkung, | ||
| - | Auch wenn von RSA nicht vermutet wird, das es NSA-optimiert ist, so arbeitet RSA doch deterministisch und ist deshalb unter Umständen für bestimmte Angriffe anfällig. In der Praxis wird RSA daher mit dem " | ||
| - | Daraus ergibt sich, dass ein RSA-Algorithmus, | ||
| - | |||
| - | Ein 160 Bit langer Schüssel, der auf elliptischen Kurven basieren (ECDH), gilt als ähnlich sicher wie ein 1024 Bit langer RSA-Schlüssel (RSA/DH): | ||
| - | 160 Bit ECDH - 1024 Bit RSA/DH | ||
| - | 224 Bit ECDH - 2048 Bit RSA/DH | ||
| - | 256 Bit ECDH - 3072 Bit RSA/DH | ||
| - | 384 Bit ECDH - 7680 Bit RSA/DH | ||
| - | ECDH-Schlüssel eignet sich daher besonders dann, wenn die Speicher- oder Rechenkapazität begrenzt ist, z. B. in Smartcards oder anderen eingebetteten Systemen. | ||
| - | |||
| - | |||
| - | ===== Elliptische Kurve (OpenSSL 1.0.1j-freebsd) ===== | ||
| - | |||
| - | * [[https:// | ||
| - | * [[http:// | ||
| - | |||
| - | erst einen neuen Schlüssen mit elliptischen Kurven erstellen und dann sein Zertifikat erzeugen: | ||
| - | openssl ecparam -list_curves | ||
| - | openssl ecparam -out / | ||
| - | openssl req -new -x509 -key / | ||
| - | |||
| - | |||
| - | ===== Beschreibung (PEM) ===== | ||
| - | |||
| - | |||
| - | === privater Schlüssel === | ||
| - | |||
| - | *.key | ||
| - | | ||
| - | -----BEGIN RSA PRIVATE KEY----- | ||
| - | ... | ||
| - | -----END RSA PRIVATE KEY----- | ||
| - | |||
| - | |||
| - | === Zertifikat (öffentlicher Schlüssel) === | ||
| - | |||
| - | *.crt | ||
| - | | ||
| - | -----BEGIN CERTIFICATE----- | ||
| - | ... | ||
| - | -----END CERTIFICATE----- | ||
| - | |||
| - | |||
| - | === Anfrage zur Zertifikatssignierung (enthält das Zertifikat) === | ||
| - | |||
| - | *.csr | ||
| - | | ||
| - | -----BEGIN CERTIFICATE REQUEST----- | ||
| - | ... | ||
| - | -----END CERTIFICATE REQUEST----- | ||
| - | |||
| - | |||
| - | === alle Zertifikate aus der PEM-Datei separat rausschreiben === | ||
| - | |||
| - | **//Das ist jetzt nicht mehr nötig, aktuelle OpenSSL-Versionen können problemlos mit PEM-Dateien umgehen.// | ||
| - | |||
| - | > vi PEM2CRT.sh | ||
| - | < | ||
| - | #!/bin/bash | ||
| - | |||
| - | # | ||
| - | # Dieses Skript schreibt alle Zertifikate aus einer PEM-Datei | ||
| - | # in einzelne CRT-Dateien, | ||
| - | # überprüfen kann. | ||
| - | # | ||
| - | |||
| - | VERSION=" | ||
| - | |||
| - | |||
| - | if [ -z " | ||
| - | echo "${0} zertifikatsdateiname.pem" | ||
| - | exit 1; | ||
| - | else | ||
| - | PEMDATEI=" | ||
| - | fi | ||
| - | |||
| - | |||
| - | NR=0 | ||
| - | cat " | ||
| - | do | ||
| - | if [ " | ||
| - | SCHREIBEN=" | ||
| - | NR=" | ||
| - | #echo " | ||
| - | rm -f " | ||
| - | echo " | ||
| - | fi | ||
| - | |||
| - | if [ " | ||
| - | echo " | ||
| - | fi | ||
| - | |||
| - | if [ " | ||
| - | #echo "ENDE: Zertifikat_${NR}.crt" | ||
| - | SCHREIBEN=" | ||
| - | fi | ||
| - | done | ||
| - | |||
| - | #ls -l Zertifikat_*.crt | ||
| - | </ | ||
| - | |||
| - | > vi CRT-Check.sh | ||
| - | < | ||
| - | #!/bin/bash | ||
| - | |||
| - | # | ||
| - | # Dieses Skript gibt den CN eines Zertifikates aus, | ||
| - | # welches in einer PAM-Datei steckt. | ||
| - | # Sind in der PEM-Datei mehrere Zertifikate enthalten, | ||
| - | # dann wird der CN von jedem einzelnen ausgegeben. | ||
| - | # | ||
| - | |||
| - | VERSION=" | ||
| - | |||
| - | PATH="/ | ||
| - | MEINVERZ=" | ||
| - | |||
| - | |||
| - | if [ -z " | ||
| - | echo "${0} www.domain.de.pem" | ||
| - | exit 1; | ||
| - | else | ||
| - | PEMDATEI=" | ||
| - | fi | ||
| - | |||
| - | ${MEINVERZ}/ | ||
| - | do | ||
| - | sync | ||
| - | if [ -r " | ||
| - | CN=" | ||
| - | echo "' | ||
| - | fi | ||
| - | done | ||
| - | </ | ||
| - | |||
| - | Beide Dateien müssen im selben Verzeichnis liegen! | ||
| - | |||
| - | |||
| - | ===== Zugehörigkeiten verifizieren ===== | ||
| - | |||
| - | Will man wissen, ob z.B. ein Zertifikat zu einem Schlüssel gehört, | ||
| - | dann kann man das so überprüfen: | ||
| - | # openssl rsa -noout -modulus -in domain.de.key | openssl md5 | ||
| - | 0d35e7c7e4db8c07fff78dd4c3de17f1 | ||
| - | # openssl req -noout -modulus -in domain.de.csr | openssl md5 | ||
| - | 0d35e7c7e4db8c07fff78dd4c3de17f1 | ||
| - | # openssl x509 -noout -modulus -in domain.de.crt | openssl md5 | ||
| - | 0d35e7c7e4db8c07fff78dd4c3de17f1 | ||
| - | |||
| - | Wenn alle Checksummen identisch sind, dann gehören alle Dateien zusammen. | ||
| - | |||
| - | |||
| - | ===== Schlüssel und Zertifikat überprüfen ===== | ||
| - | |||
| - | ==== Der Schlüssel, die Zertifikatsanfrage und das Zertifikat befinden sich in jeweils einzelnen Dateien ==== | ||
| - | |||
| - | nachsehen, was im RSA-Schlüssel steht: | ||
| - | > openssl rsa -noout -text -in domain.de.key | ||
| - | Private-Key: | ||
| - | ... | ||
| - | |||
| - | nachsehen, was in der Zertifikatsanfrage steht: | ||
| - | > openssl req -noout -text -in domain.de.csr | ||
| - | |||
| - | nachsehen, was im Zertifikat steht: | ||
| - | > openssl x509 -noout -text -in domain.de.crt | ||
| - | |||
| - | nachsehen, mit welcher Verschlüsselungs-Algorithmus verwendet wurde: | ||
| - | > openssl x509 -noout -text -in domain.de.crt | fgrep Algorithm | ||
| - | Signature Algorithm: sha256WithRSAEncryption | ||
| - | Public Key Algorithm: rsaEncryption | ||
| - | Signature Algorithm: sha256WithRSAEncryption | ||
| - | |||
| - | Da das Zertifikat auf einem RSA-Schlüssel basiert, muss das folgende Kommando zur Ausgabe des Modulus aus dem Schlüssel, die Option '' | ||
| - | |||
| - | diese Ausgaben müssen alle identische Ausgaben liefern, dann gehören sie zusammen: | ||
| - | > openssl rsa -noout -modulus -in domain.de.key | openssl md5 | ||
| - | > openssl req -noout -modulus -in domain.de.csr | openssl md5 | ||
| - | > openssl x509 -noout -modulus -in domain.de.crt | openssl md5 | ||
| - | |||
| - | diese Ausgabe muss anders sein, weil ihr ein anderer Schlüssel zu grunde liegt: | ||
| - | > openssl x509 -noout -modulus -in intermediate.domain.de.crt | openssl md5 | ||
| - | |||
| - | Kontrolle, ob das Zwischenzertifikat der Authentifizierungsstelle zum Zertifikat unseres Schlüssels passt: | ||
| - | > openssl verify -CAfile intermediate.domain.de.crt domain.de.crt | ||
| - | domain.de.crt: | ||
| - | |||
| - | Ablaufdatum vom Zertifikat ausgeben: | ||
| - | > openssl x509 -noout -text -in domain.de.crt | fgrep -A1 'Not After' | ||
| - | |||
| - | ==== Der Schlüssel und das Zertifikat befinden sich in der selben Dateien ==== | ||
| - | |||
| - | sollte man ersteinmal den Schlüssel und das Zertifikat in unterschiedliche Dateien vorliegen haben, dann kann man sie beide wie folgt zu einer einzigen PEM-Datei zusammenfühgen: | ||
| - | > cat domain.de.key domain.de.crt > domain.de.pem | ||
| - | > rm domain.de.key domain.de.crt | ||
| - | |||
| - | nachsehen, was im RSA-Schlüssel steht: | ||
| - | > openssl rsa -noout -text -in domain.de.pem | ||
| - | Private-Key: | ||
| - | ... | ||
| - | |||
| - | nachsehen, was in der Zertifikatsanfrage steht: | ||
| - | > openssl req -noout -text -in domain.de.pem | ||
| - | |||
| - | nachsehen, was im Zertifikat steht: | ||
| - | > openssl x509 -noout -text -in domain.de.pem | ||
| - | |||
| - | nachsehen, mit welcher Verschlüsselungs-Algorithmus verwendet wurde: | ||
| - | > openssl x509 -noout -text -in domain.de.pem | fgrep Algorithm | ||
| - | Signature Algorithm: sha256WithRSAEncryption | ||
| - | Public Key Algorithm: rsaEncryption | ||
| - | Signature Algorithm: sha256WithRSAEncryption | ||
| - | |||
| - | Da das Zertifikat auf einem RSA-Schlüssel basiert, muss das folgende Kommando zur Ausgabe des Modulus aus dem Schlüssel, die Option '' | ||
| - | |||
| - | __diese Ausgaben müssen alle identische Ausgaben liefern, dann gehören sie zusammen__: | ||
| - | > openssl rsa -noout -modulus -in domain.de.pem | openssl md5 | ||
| - | > openssl req -noout -modulus -in domain.de.csr | openssl md5 | ||
| - | > openssl x509 -noout -modulus -in domain.de.pem | openssl md5 | ||
| - | |||
| - | diese Ausgabe muss anders sein, weil ihr ein anderer Schlüssel zu grunde liegt: | ||
| - | > openssl x509 -noout -modulus -in intermediate.domain.de.crt | openssl md5 | ||
| - | |||
| - | __Kontrolle, | ||
| - | > openssl verify -CAfile intermediate.domain.de.crt domain.de.pem | ||
| - | domain.de.crt: | ||
| - | |||
| - | Ablaufdatum vom Zertifikat ausgeben: | ||
| - | > openssl x509 -noout -text -in domain.de.pem | fgrep -A1 'Not After' | ||
| - | |||
| - | ===== Einzelschritte von Hand ==== | ||
| - | |||
| - | Wenn Schlüssellänge egal ist und der Schlüssel keinen Passwortschutz benötigt, | ||
| - | dann braucht man keinen Schlüssel separat erzeugen | ||
| - | weil beim erzeugen eines Zertifikates automatisch ein Schlüssel generiert wird, | ||
| - | wenn keiner vorhanden ist. | ||
| - | |||
| - | Alle gewünschten Parameter (z.B. Schlüssellänge) müssen in der ''/ | ||
| - | |||
| - | |||
| - | ==== einen SSL-Schlüssel generieren ==== | ||
| - | |||
| - | |||
| - | === ohne Passphrase === | ||
| - | |||
| - | **Wenn man einen Schlüssel mit einer bestimmten Länge möchte:** | ||
| - | # openssl genrsa -out server.key 4096 | ||
| - | |||
| - | |||
| - | === mit Passphrase === | ||
| - | |||
| - | **Wenn man einen mit Passwort geschützten Schlüssel möchte:** | ||
| - | # openssl genrsa -des3 -out server.key 4096 | ||
| - | |||
| - | |||
| - | === Passphrase entfernen === | ||
| - | |||
| - | # openssl rsa < server.pem > private_key_ohne_passphrase.key | ||
| - | |||
| - | |||
| - | ==== eine Zertifikatsanfrage (CSR) generieren ==== | ||
| - | |||
| - | Wenn man bei einer öffentlichen Signierungsstelle (CA) ein signiertes Zertifikat kaufen möchte, | ||
| - | dann braucht man die CSR-Datei: | ||
| - | > openssl req -new -key server.key -keyform PEM -out server.csr -outform PEM -days 7000 -subj "/ | ||
| - | |||
| - | wenn der SSL-Schlüssel gleich mit generiert werden soll, weil es noch keinen gibt: | ||
| - | > openssl req -rand / | ||
| - | |||
| - | |||
| - | === eine Zertifikatsanfrage (CSR) für ein Multi-Domain-Zertifikat generieren === | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | ~/ | ||
| - | |||
| - | <file bash ~/ | ||
| - | #!/bin/bash | ||
| - | |||
| - | # | ||
| - | # | ||
| - | # hiermit können Multi-Domain-CSRs erstellt werden | ||
| - | # | ||
| - | # | ||
| - | # | ||
| - | # openssl req -noout -text -in w.galeria-mobil.de.csr | ||
| - | # https:// | ||
| - | # | ||
| - | # | ||
| - | |||
| - | VERSION=" | ||
| - | |||
| - | # Voreinstellungen | ||
| - | # | ||
| - | ZEITRAUM=" | ||
| - | # | ||
| - | BITLANG=" | ||
| - | |||
| - | if [ -z " | ||
| - | echo "${0} -h" | ||
| - | exit 1 | ||
| - | fi | ||
| - | |||
| - | while [ " | ||
| - | case " | ||
| - | -a) | ||
| - | ABTEILUNG=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -b) | ||
| - | BITLANG=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -c) | ||
| - | STADT=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -d) | ||
| - | DOMAIN=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -e) | ||
| - | EMAIL=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -k) | ||
| - | KEY=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -l) | ||
| - | LAND=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -m) | ||
| - | MULTI_DOMAIN=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -o) | ||
| - | ORGANISATION=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -s) | ||
| - | STAAT=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -z) | ||
| - | ZEITRAUM=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -h) | ||
| - | echo " | ||
| - | zwingend erforderliche Parameter: | ||
| - | -d Domain/FQDN | ||
| - | -l Land | ||
| - | -c City/Stadt | ||
| - | -o Organisation/ | ||
| - | -a Abteilung/ | ||
| - | |||
| - | 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 ' | ||
| - | Standard-Zertifikat mit vorhandenem Schlüssel: | ||
| - | # ${0} -d www.telco.de -s DE -l Hessen -c Maintal -o Drillisch -a telco -k www.telco.de.key -m ssladmin@iq-optimize.de | ||
| - | " | ||
| - | exit 0 | ||
| - | ;; | ||
| - | *) | ||
| - | if [ " | ||
| - | echo "Der Parameter ' | ||
| - | exit 1 | ||
| - | fi | ||
| - | shift | ||
| - | ;; | ||
| - | esac | ||
| - | done | ||
| - | |||
| - | |||
| - | ZNAME=" | ||
| - | if [ -z " | ||
| - | echo " | ||
| - | Es werden alle Parameter benötigt! | ||
| - | => ${0} -h | ||
| - | " | ||
| - | exit 1 | ||
| - | fi | ||
| - | |||
| - | |||
| - | # | ||
| - | #rm -fr / | ||
| - | #mkdir / | ||
| - | #cd / | ||
| - | # | ||
| - | |||
| - | ZUFALLSWERT=" | ||
| - | CFG_DATEI="/ | ||
| - | MULTIDOMAIN=" | ||
| - | |||
| - | MD=" | ||
| - | for MD in ${MULTI_DOMAIN} | ||
| - | do | ||
| - | NR=" | ||
| - | echo " | ||
| - | done | tr -s ' | ||
| - | echo " | ||
| - | MD=${MD} | ||
| - | " | ||
| - | M_DOMAINS=" | ||
| - | for MD in ${MULTI_DOMAIN} | ||
| - | do | ||
| - | NR=" | ||
| - | echo " | ||
| - | done)" | ||
| - | |||
| - | echo " | ||
| - | # / | ||
| - | |||
| - | RANDFILE=/ | ||
| - | |||
| - | [ ca ] | ||
| - | default_ca | ||
| - | |||
| - | [ CA_default ] | ||
| - | default_days | ||
| - | |||
| - | [ req ] | ||
| - | distinguished_name | ||
| - | req_extensions | ||
| - | string_mask | ||
| - | |||
| - | [ distinguished_name ] | ||
| - | emailAddress | ||
| - | C = ${STAAT} | ||
| - | ST = ${LAND} | ||
| - | L = ${STADT} | ||
| - | O = ${ORGANISATION} | ||
| - | OU = ${ABTEILUNG} | ||
| - | CN = ${DOMAIN} | ||
| - | |||
| - | |||
| - | [v3_req] | ||
| - | keyUsage | ||
| - | extendedKeyUsage | ||
| - | subjectAltName | ||
| - | |||
| - | [ subject_alt_names ] | ||
| - | ${M_DOMAINS} | ||
| - | " > ${CFG_DATEI} | ||
| - | |||
| - | echo " | ||
| - | cat ${CFG_DATEI} | ||
| - | echo " | ||
| - | # | ||
| - | |||
| - | |||
| - | if [ -z " | ||
| - | echo "################################################################################" | ||
| - | # neuer Schlüssel | ||
| - | echo " | ||
| - | openssl req -sha256 -newkey rsa: | ||
| - | ls -lha ${CFG_DATEI} | ||
| - | rm -f ${CFG_DATEI} | ||
| - | else | ||
| - | if [ -r " | ||
| - | # vorhandener Schlüssel | ||
| - | echo " | ||
| - | openssl req -new -key ${KEY} -keyform PEM -out ${ZNAME}.csr -outform PEM -subj "/ | ||
| - | ls -lha ${CFG_DATEI} | ||
| - | rm -f ${CFG_DATEI} | ||
| - | else | ||
| - | echo "die Datei ${KEY} ist nicht lesbar..." | ||
| - | exit 1 | ||
| - | fi | ||
| - | fi | ||
| - | |||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== ein selbst signiertes Zertifikat (CRT) generieren ==== | ||
| - | |||
| - | [[http:// | ||
| - | |||
| - | **EC-Schlüssel (elliptic curve = Elliptische Kurve) generieren: | ||
| - | > openssl ecparam -list_curves | ||
| - | |||
| - | **Schlüssel und Zertifikat in Standardlänge erzeugen:** | ||
| - | > openssl req -new -x509 -nodes -keyout server.key -out server.crt -days 7000 | ||
| - | > openssl ecparam -out / | ||
| - | |||
| - | **Schlüssel und Zertifikat mit definierter Länge (hier 4096 Bit) erzeugen:** | ||
| - | > openssl req -rand / | ||
| - | |||
| - | **Zertifikat für ein vorhandenen Schlüssel erzeugen:** | ||
| - | > openssl req -new -x509 -key server.key -keyform PEM -out server.crt -outform PEM -days 7000 -subj "/ | ||
| - | |||
| - | |||
| - | ==== letzte Schritte - Die Überprüfung ==== | ||
| - | |||
| - | **damit nicht jeder ran kann:** | ||
| - | > chmod 0600 server.* | ||
| - | |||
| - | **Fingerabdruck anzeigen:** | ||
| - | > openssl x509 -noout -fingerprint -in server.crt | ||
| - | |||
| - | **Zertifikats-Ersteller -Signierer und Gültigkeitszeitraum: | ||
| - | > openssl x509 -noout -subject -issuer -dates -in server.crt | ||
| - | |||
| - | **SSL-Schlüssellänge ausgeben:** | ||
| - | > openssl x509 -noout -text -in server.crt | fgrep ' bit)' | ||
| - | |||
| - | |||
| - | ===== per Skript ===== | ||
| - | |||
| - | |||
| - | ==== einfaches Skript ==== | ||
| - | |||
| - | <file bash make_csr_rsa.sh> | ||
| - | #!/bin/bash | ||
| - | |||
| - | SSLNAME=" | ||
| - | RECHNERNAME=" | ||
| - | |||
| - | EMAIL=" | ||
| - | STAAT=" | ||
| - | LAND=" | ||
| - | STADT=" | ||
| - | ORGANISATION=" | ||
| - | ABTEILUNG=" | ||
| - | ZEITRAUM=" | ||
| - | BITLANG=" | ||
| - | |||
| - | |||
| - | openssl req -rand / | ||
| - | |||
| - | |||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | |||
| - | if [ -r " | ||
| - | echo " | ||
| - | openssl x509 -noout -subject -issuer -dates -in ${SSLNAME}.crt | ||
| - | fi | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== Skript mit Parametern ==== | ||
| - | |||
| - | Um ein Zertifikat von einer offiziellen CA signieren lassen | ||
| - | zu können, brauchen wir eine '' | ||
| - | |||
| - | Die '' | ||
| - | die dann das signierte Zertifikat in einer '' | ||
| - | schicken. | ||
| - | |||
| - | **'' | ||
| - | # bin/ | ||
| - | |||
| - | nur **'' | ||
| - | # bin/ | ||
| - | |||
| - | **'' | ||
| - | # bin/ | ||
| - | |||
| - | nur **'' | ||
| - | # bin/ | ||
| - | |||
| - | |||
| - | === bin/ | ||
| - | |||
| - | #!/bin/bash | ||
| - | | ||
| - | # Voreinstellungen | ||
| - | STAAT=" | ||
| - | EMAIL=" | ||
| - | ZEITRAUM=" | ||
| - | BITLANG=" | ||
| - | | ||
| - | if [ -z " | ||
| - | echo "${0} -h" | ||
| - | exit 1 | ||
| - | fi | ||
| - | | ||
| - | while [ " | ||
| - | case " | ||
| - | -d) | ||
| - | DOMAIN=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -k) | ||
| - | KEY=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -u) | ||
| - | UNSIGNIERT=JA | ||
| - | shift | ||
| - | ;; | ||
| - | -s) | ||
| - | STAAT=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -l) | ||
| - | LAND=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -c) | ||
| - | STADT=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -o) | ||
| - | ORGANISATION=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -a) | ||
| - | ABTEILUNG=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -m) | ||
| - | EMAIL=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -z) | ||
| - | ZEITRAUM=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -b) | ||
| - | BITLANG=${2} | ||
| - | shift | ||
| - | ;; | ||
| - | -h) | ||
| - | echo " | ||
| - | zwingend erforderliche Parameter: | ||
| - | -d Domain/FQDN | ||
| - | -l Land | ||
| - | -c City/Stadt | ||
| - | -o Organisation/ | ||
| - | -a Abteilung/ | ||
| - | | ||
| - | 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 ' | ||
| - | 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 "Der Parameter ' | ||
| - | exit 1 | ||
| - | fi | ||
| - | shift | ||
| - | ;; | ||
| - | esac | ||
| - | done | ||
| - | | ||
| - | | ||
| - | ZNAME=" | ||
| - | if [ -z " | ||
| - | echo " | ||
| - | Es werden mind. die Parameter -d, -l, -c, -o, und -a benötigt! | ||
| - | => ${0} -h | ||
| - | " | ||
| - | exit 1 | ||
| - | fi | ||
| - | | ||
| - | | ||
| - | if [ " | ||
| - | | ||
| - | if [ -z " | ||
| - | # neuer Schlüssel | ||
| - | KEY=" | ||
| - | echo " | ||
| - | openssl req -x509 -rand / | ||
| - | else | ||
| - | echo " | ||
| - | openssl req -x509 -new -key ${KEY} -out ${ZNAME}.crt -outform PEM -subj "/ | ||
| - | fi | ||
| - | | ||
| - | else | ||
| - | | ||
| - | if [ -z " | ||
| - | # neuer Schlüssel | ||
| - | KEY=" | ||
| - | echo " | ||
| - | openssl req -rand / | ||
| - | else | ||
| - | if [ -r " | ||
| - | # vorhandener Schlüssel | ||
| - | echo " | ||
| - | openssl req -new -key ${KEY} -keyform PEM -out ${ZNAME}.csr -outform PEM -subj "/ | ||
| - | else | ||
| - | echo "die Datei ${KEY} ist nicht lesbar..." | ||
| - | exit 1 | ||
| - | fi | ||
| - | fi | ||
| - | | ||
| - | fi | ||
| - | | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | if [ -r " | ||
| - | echo " | ||
| - | fi | ||
| - | |||
| - | |||
| - | ==== Zertifikat mit der eigenen CA signieren ==== | ||
| - | |||
| - | |||
| - | === bin/ | ||
| - | |||
| - | Dieses Script erstellt eine eigene CA. | ||
| - | |||
| - | #!/bin/bash | ||
| - | | ||
| - | # | ||
| - | # Schlüssel mit Zertifikat | ||
| - | # für eine CA-Signatur erzeugen | ||
| - | # | ||
| - | | ||
| - | if [ -z " | ||
| - | echo "${0} [CA-Name]" | ||
| - | exit 1 | ||
| - | else | ||
| - | ### initialisieren | ||
| - | . $(dirname ${0})/ | ||
| - | rm -fr CA | ||
| - | mkdir -p ~/ | ||
| - | openssl req -x509 -rand / | ||
| - | echo -e " | ||
| - | fi | ||
| - | |||
| - | Für eine Testumgebung kann man die Passphrase auch entfernen: | ||
| - | # openssl rsa < ~/ | ||
| - | # mv ca.key ~/ | ||
| - | |||
| - | |||
| - | === bin/ | ||
| - | |||
| - | Dieses Script generiert einen privaten Schlüssel, | ||
| - | ein Zertifikat (öffentlicher Schlüssel) und | ||
| - | signiert das Zertifikat mit der eigenen CA. | ||
| - | |||
| - | #!/bin/bash | ||
| - | | ||
| - | # | ||
| - | # Schlüssel mit signiertem Zertifikat erzeugen | ||
| - | # | ||
| - | | ||
| - | if [ -z " | ||
| - | echo "${0} [FQDN des Zielhost]" | ||
| - | echo "${0} www.domain.org" | ||
| - | echo "${0} ' | ||
| - | exit 1 | ||
| - | else | ||
| - | ### generieren | ||
| - | ZNAME=" | ||
| - | . $(dirname ${0})/ | ||
| - | openssl req -x509 -rand / | ||
| - | | ||
| - | ### signieren | ||
| - | openssl ca -config ~/ | ||
| - | echo | ||
| - | cp ~/ | ||
| - | rm -f $(tail -n1 ~/ | ||
| - | openssl x509 -noout -subject -issuer -dates -in ${ZNAME}.pem | ||
| - | ls -1 ${ZNAME}.* | ||
| - | fi | ||
| - | |||
| - | |||
| - | === bin/ | ||
| - | |||
| - | <file bash / | ||
| - | #!/bin/bash | ||
| - | | ||
| - | # | ||
| - | # | ||
| - | # ALT | ||
| - | # überprüft ob RSA-SCHLÜSSEL, | ||
| - | # | ||
| - | # | ||
| - | |||
| - | if [ -z " | ||
| - | echo "${0} *.simplytel.de.*" | ||
| - | exit 1 | ||
| - | fi | ||
| - | |||
| - | echo | ||
| - | |||
| - | for i in ${@} | ||
| - | do | ||
| - | ENDUNG=" | ||
| - | if [ " | ||
| - | MD5PRUEFSUMME_RSA=" | ||
| - | echo " | ||
| - | elif [ " | ||
| - | MD5PRUEFSUMME_CSR=" | ||
| - | echo " | ||
| - | elif [ " | ||
| - | MD5PRUEFSUMME_CRT=" | ||
| - | echo " | ||
| - | # else | ||
| - | # echo "${i} ..." | ||
| - | fi | ||
| - | done | sort -n | ||
| - | |||
| - | echo | ||
| - | </ | ||
| - | |||
| - | Zusammengehörigkeit von Schlüssel und Zertifikatsanfrage überprüfen: | ||
| - | # / | ||
| - | | ||
| - | 0d345e7c7e4db8c05fff48d4c3de17e1 - www.domain.de.crt | ||
| - | 0d345e7c7e4db8c05fff48d4c3de17e1 - www.domain.de.csr | ||
| - | 0d345e7c7e4db8c05fff48d4c3de17e1 - www.domain.de.key | ||
| - | |||
| - | <file bash / | ||
| - | #!/bin/bash | ||
| - | | ||
| - | # | ||
| - | # | ||
| - | # NEU - Elliptic curve | ||
| - | # überprüft ob EC-SCHLÜSSEL, | ||
| - | # | ||
| - | # | ||
| - | |||
| - | if [ -z " | ||
| - | echo "${0} *.simplytel.de.*" | ||
| - | exit 1 | ||
| - | fi | ||
| - | |||
| - | echo | ||
| - | |||
| - | for i in ${@} | ||
| - | do | ||
| - | ENDUNG=" | ||
| - | if [ " | ||
| - | #echo "# | ||
| - | #ls -lha ${i} | ||
| - | #openssl ec -noout -text -in ${i} | sed -ne '/ | ||
| - | MD5PRUEFSUMME_EC=" | ||
| - | echo " | ||
| - | #echo "# | ||
| - | elif [ " | ||
| - | #echo "# | ||
| - | #ls -lha ${i} | ||
| - | #openssl req -noout -text -in ${i} | sed -ne '/ | ||
| - | MD5PRUEFSUMME_CSR=" | ||
| - | echo " | ||
| - | #echo "# | ||
| - | elif [ " | ||
| - | #echo "# | ||
| - | #ls -lha ${i} | ||
| - | #openssl x509 -noout -text -in ${i} | sed -ne '/ | ||
| - | MD5PRUEFSUMME_CRT=" | ||
| - | echo " | ||
| - | #echo "# | ||
| - | # else | ||
| - | # echo "${i} ..." | ||
| - | fi | ||
| - | done | sort -n | ||
| - | |||
| - | echo | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== im Apache HTTPS aktivieren ===== | ||
| - | |||
| - | |||
| - | ==== Ubuntu ==== | ||
| - | |||
| - | nachlesen wie es geht: | ||
| - | # zless / | ||
| - | |||
| - | Schlüssel und signiertes Zertifikat an die richtige Stelle legen: | ||
| - | # cp www.test.net.pem / | ||
| - | # cp www.test.net.key / | ||
| - | |||
| - | den gewünschten Schlüssel mit Zertifikat eintragen: | ||
| - | # vi / | ||
| - | ... | ||
| - | SSLCertificateFile | ||
| - | SSLCertificateKeyFile / | ||
| - | ... | ||
| - | |||
| - | SSL aktivieren: | ||
| - | # a2ensite default-ssl | ||
| - | # a2enmod ssl | ||
| - | # / | ||
| - | |||
| - | |||
| - | ===== openssl -> pkcs12 ===== | ||
| - | |||
| - | eine P12-Datei ist praktisch eine verschlüsselte PEM-Datei | ||
| - | # openssl pkcs12 -export -out zertifikat.p12 -inkey privater.key -in zertifikat.crt -certfile ca.crt | ||
| - | |||
| - | -> [[openVPN# | ||
/home/http/wiki/data/attic/ssl-schluessel_generieren.1712323812.txt · Zuletzt geändert: von manfred
