SSL Certificate Authority: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Pascal (Diskussion | Beiträge) |
Pascal (Diskussion | Beiträge) |
||
| (10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 70: | Zeile 70: | ||
==== CA req Einstellungen ==== | ==== CA req Einstellungen ==== | ||
<source lang="Make"> | <source lang="Make"> | ||
| + | distinguished_name=ca_dn # Distinguishedname Inhalt. | ||
| + | x509_extensions=ca_v3 # Zur Generierung des CA Zertifikats. | ||
| + | [ ca_dn ] | ||
| + | # CN isn't needed for CA certificates | ||
| + | C= de | ||
| + | ST= zweibrücken | ||
| + | O= xinux | ||
| + | |||
| + | [ ca_v3 ] | ||
| + | subjectKeyIdentifier= hash | ||
| + | |||
| + | # PKIX empfiehlt das dies ebenso den 'crucial' Wert anzugeben, | ||
| + | # jedoch haben einige Programme immernoch Probleme damit. | ||
| + | basicConstraints= CA:TRUE | ||
| + | |||
| + | keyUsage= cRLSign, keyCertSign | ||
| + | |||
| + | nsCertType= sslCA | ||
| + | nsComment= "OpenSSL Generated CA Certificate" | ||
| + | |||
| + | authorityKeyIdentifier=keyid:always,issuer:always | ||
| + | </source> | ||
| + | ==== Endnutzer req Einstellungen ==== | ||
| + | <source lang="Make"> | ||
| + | distinguished_name=ca_dn # Distinguishedname Inhalt. | ||
| + | req_extensions=req_v3 # Zur Generierung des CA Zertifikats. | ||
| + | |||
| + | [ ca_dn ] | ||
| + | C= de | ||
| + | ST= zweibruecken | ||
| + | O= xinux | ||
| + | CN= test.local | ||
| + | |||
| + | [ v3_req ] | ||
| + | basicConstraints= CA:FALSE | ||
| + | keyUsage= nonRepudiation, digitalSignature, keyEncipherment | ||
</source> | </source> | ||
== Zertifikate erstellen == | == Zertifikate erstellen == | ||
| + | <source lang="bash"> | ||
| + | mkdir -m0700 private | ||
| + | touch private/test.key | ||
| + | chmod 0600 private/test.key | ||
| + | openssl genpkey -algorithm RSA -out private/test.key | ||
| + | openssl genpkey -pass stdin -algorithm RSA -out private/test.key | ||
| + | </source> | ||
=== via Makefile === | === via Makefile === | ||
<source lang="Make"> | <source lang="Make"> | ||
| + | OPENSSL= openssl | ||
| + | CNF= openssl.cnf | ||
| + | CA= ${OPENSSL} ca -config ${CNF} | ||
| + | REQ= ${OPENSSL} req -config ${CNF} | ||
| + | KEY= private/ca.key | ||
| + | KEYMODE= RSA | ||
| + | |||
| + | CACERT= ca.crt | ||
| + | CADAYS= 3650 | ||
| + | |||
| + | CRL= ca.crl | ||
| + | INDEX= index.txt | ||
| + | SERIAL= serial | ||
| + | |||
| + | |||
| + | CADEPS= ${CNF} ${KEY} ${CACERT} | ||
| + | |||
| + | all: ${CRL} | ||
| + | |||
| + | ${CRL}: ${CADEPS} | ||
| + | ${CA} -gencrl -out ${CRL} | ||
| + | |||
| + | ${CACERT}: ${CNF} ${KEY} | ||
| + | ${REQ} -key ${KEY} -x509 -new -days ${CADAYS} -out ${CACERT} | ||
| + | rm -f ${INDEX} | ||
| + | touch ${INDEX} | ||
| + | echo 100001 > ${SERIAL} | ||
| + | |||
| + | ${KEY}: ${CNF} | ||
| + | mkdir -m0700 -p $(dirname ${KEY}) | ||
| + | touch ${KEY} | ||
| + | chmod 0600 ${KEY} | ||
| + | ${OPENSSL} genpkey -algorithm ${KEYMODE} -out ${KEY} | ||
| + | |||
| + | |||
| + | revoke: ${CADEPS} ${item} | ||
| + | @test -n $${item:?'usage: ${MAKE} revoke item=cert.crt'} | ||
| + | ${CA} -revoke ${item} | ||
| + | ${MAKE} ${CRL} | ||
| + | |||
| + | sign: ${CADEPS} ${item} | ||
| + | @test -n $${item:?'usage: ${MAKE} sign item=request.csr'} | ||
| + | mkdir -p newcerts | ||
| + | ${CA} -in ${item} -out ${item:.csr=.crt} | ||
</source> | </source> | ||
| + | |||
| + | Zertifikate signieren: | ||
| + | |||
| + | make sign item=req.csr | ||
| + | |||
| + | Zertifikate entwerten: | ||
| + | |||
| + | make revoke item=cert.crt | ||
| + | |||
[[Kategorie:HOWTO]] | [[Kategorie:HOWTO]] | ||
[[Kategorie:SSL]] | [[Kategorie:SSL]] | ||
| + | |||
| + | = Links = | ||
| + | * [https://wiki.archlinux.org/index.php/SSL OpenSSL on ArchLinux Wiki] | ||
Aktuelle Version vom 3. August 2011, 08:25 Uhr
CA Erstellen
OpenSSL Configuration
/etc/ssl/openssl.cnf
Globale Variablen
DIR= . # Nützliches Macro für Pfaderweiterung
RANDFILE= ${DIR}/private/.rnd # Entropy Quelle
default_md= sha1 # Standard message digest
CA Abschnitt
[ ca ]
default_ca= dft_ca # Konfigurationsdateien können mehr als eine CA enthalten
# Abschnitt für verschiedene Szenarien.
[ dft_ca ]
certificate= ${DIR}/cacert.pem # Das CA Zertifikat.
database= ${DIR}/index.txt # Datenbank zur Prüfung gültiger/zurückgezogener Zertifikate.
new_certs_dir= ${DIR}/newcerts # Kopieen der signierten Zertifikate
private_key= ${DIR}/private/cakey.pem # Der CA Schlüssel.
serial= ${DIR}/serial # Sollte mit der Nächsten Zertifikats S/N veröffentlicht werden (Hex)
# Dies regelt die Anzeige der Zertifikate während der Signierung
name_opt= ca_default
cert_opt= ca_default
default_days= 365 # Wie lange soll das Zertifikat gültig sein
default_crl_days=30 # Das selbe für die CRL.
policy= dft_policy # Die Standardrichtlinie
x509_extensions=cert_v3 # Für v3 Zertifikate
[ dft_policy ]
# 'supplied' - Parameter muss im Zertifikat enthalten sein.
# 'match' - Parameter muss mit CA Wert übereinstimmen.
# 'optional' - Parameter ist komplett Optional.
C= supplied # Land
ST= supplied # Region
L= optional # Ort
O= supplied # Organisation
OU= optional # Abteilung
CN= supplied # Common name
[ cert_v3 ]
# Mit Ausnahme von 'CA:FALSE' gibt es PKIX Empfehlungen für Endbenutzer-Zertifikate,
# welche nicht in der Lage sein sollten weitere Zertifikate zu unterschreiben.
# 'CA:FALSE' ist explizit, weil es sonst zu Softwareproblemen führen kann.
subjectKeyIdentifier= hash
basicConstraints= CA:FALSE
keyUsage= nonRepudiation, digitalSignature, keyEncipherment
nsCertType= client, email
nsComment= "OpenSSL Generated Certificate"
authorityKeyIdentifier=keyid:always,issuer:always
req Einstellungen
[ req ]
# Default bit encryption and out file for generated keys.
default_bits= 1024
default_keyfile=private/ca.key
string_mask= utf8only # Lasse nur utf8 Strings in abfragen/ca feldern zu.
prompt= no # Verlange keine extra Bestätigung der Parameter.
CA req Einstellungen
distinguished_name=ca_dn # Distinguishedname Inhalt.
x509_extensions=ca_v3 # Zur Generierung des CA Zertifikats.
[ ca_dn ]
# CN isn't needed for CA certificates
C= de
ST= zweibrücken
O= xinux
[ ca_v3 ]
subjectKeyIdentifier= hash
# PKIX empfiehlt das dies ebenso den 'crucial' Wert anzugeben,
# jedoch haben einige Programme immernoch Probleme damit.
basicConstraints= CA:TRUE
keyUsage= cRLSign, keyCertSign
nsCertType= sslCA
nsComment= "OpenSSL Generated CA Certificate"
authorityKeyIdentifier=keyid:always,issuer:always
Endnutzer req Einstellungen
distinguished_name=ca_dn # Distinguishedname Inhalt.
req_extensions=req_v3 # Zur Generierung des CA Zertifikats.
[ ca_dn ]
C= de
ST= zweibruecken
O= xinux
CN= test.local
[ v3_req ]
basicConstraints= CA:FALSE
keyUsage= nonRepudiation, digitalSignature, keyEncipherment
Zertifikate erstellen
mkdir -m0700 private
touch private/test.key
chmod 0600 private/test.key
openssl genpkey -algorithm RSA -out private/test.key
openssl genpkey -pass stdin -algorithm RSA -out private/test.key
via Makefile
OPENSSL= openssl
CNF= openssl.cnf
CA= ${OPENSSL} ca -config ${CNF}
REQ= ${OPENSSL} req -config ${CNF}
KEY= private/ca.key
KEYMODE= RSA
CACERT= ca.crt
CADAYS= 3650
CRL= ca.crl
INDEX= index.txt
SERIAL= serial
CADEPS= ${CNF} ${KEY} ${CACERT}
all: ${CRL}
${CRL}: ${CADEPS}
${CA} -gencrl -out ${CRL}
${CACERT}: ${CNF} ${KEY}
${REQ} -key ${KEY} -x509 -new -days ${CADAYS} -out ${CACERT}
rm -f ${INDEX}
touch ${INDEX}
echo 100001 > ${SERIAL}
${KEY}: ${CNF}
mkdir -m0700 -p $(dirname ${KEY})
touch ${KEY}
chmod 0600 ${KEY}
${OPENSSL} genpkey -algorithm ${KEYMODE} -out ${KEY}
revoke: ${CADEPS} ${item}
@test -n $${item:?'usage: ${MAKE} revoke item=cert.crt'}
${CA} -revoke ${item}
${MAKE} ${CRL}
sign: ${CADEPS} ${item}
@test -n $${item:?'usage: ${MAKE} sign item=request.csr'}
mkdir -p newcerts
${CA} -in ${item} -out ${item:.csr=.crt}
Zertifikate signieren:
make sign item=req.csr
Zertifikate entwerten:
make revoke item=cert.crt