SSL Certificate Authority

Aus xinux.net
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

Links