SSL Certificate Authority: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= CA Erstellen =
 
= CA Erstellen =
/etc/ssl/openssl.cnf
+
== OpenSSL Configuration ==
 +
=== /etc/ssl/openssl.cnf ===
 +
==== Globale Variablen ====
 
<source lang="Make">
 
<source lang="Make">
# Globale Variablen
+
DIR= . # Nützliches Macro für Pfaderweiterung
DIR= . # Nützliches Macro
 
 
RANDFILE= ${DIR}/private/.rnd # Entropy Quelle
 
RANDFILE= ${DIR}/private/.rnd # Entropy Quelle
 
default_md= sha1 # Standard message digest
 
default_md= sha1 # Standard message digest
 
+
</source>
# CA Abschnitt
+
==== CA Abschnitt ====
 +
<source lang="Make">
 
[ ca ]
 
[ ca ]
 
default_ca= dft_ca # Konfigurationsdateien können mehr als eine CA enthalten
 
default_ca= dft_ca # Konfigurationsdateien können mehr als eine CA enthalten
Zeile 54: Zeile 56:
  
 
authorityKeyIdentifier=keyid:always,issuer:always
 
authorityKeyIdentifier=keyid:always,issuer:always
 +
</source>
 +
==== req Einstellungen ====
 +
<source lang="Make">
 +
[ req ]
 +
# Default bit encryption and out file for generated keys.
 +
default_bits= 1024
 +
default_keyfile=private/ca.key
  
# CA req Einstellungen
+
string_mask= utf8only # Lasse nur utf8 Strings in abfragen/ca feldern zu.
...
+
prompt= no # Verlange keine extra Bestätigung der Parameter.
 
</source>
 
</source>
  
Makefile
+
==== CA req Einstellungen ====
 +
<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">
 
<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 ===
 +
<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>
 +
 
 +
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

Links