SSL Certificate Authority
Zur Navigation springen
Zur Suche springen
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