Zertifizierungsstelle einrichten (OpenSSL): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieser Artikel beschreibt, wie unter Debian GNU/Linux eine Zertifizierungsstelle auf Basis von OpenSSL erstellt werden kann.
Dieser Artikel beschreibt, wie Debian GNU/Linux eine selbst signierte Stamm-Zertifizierungsstelle (Root CA = Certificate Authority) auf Basis von OpenSSL erstellt wird.


Quellen für diesen Artikel:
Eine Zertifizierungsstelle setzt sich aus einem privaten Schlüssel und einem selbst signierten Zertifikat zusammen. Siehe auch: [[Grundlagen der PKI]]
* Umfassend: https://jamielinux.com/docs/openssl-certificate-authority/
* Kurz und bündig: https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/
* Kurz und bündig: https://blog.veloc1ty.de/2015/08/13/eigene-zertifizierungsstelle-ca-mit-sub-zertifizierungsstellen-sub-cas/
* Kurz und bündig: https://www.maffert.net/eigene-ca-zertifizierungsstelle-erstellen-und-zertifikate-ausstellen-debian/


== Computer-Zertifikat erstellen ==
achfolgend werden die Schritte beschrieben, um beides zu erstellen.
Privaten Schlüssel "cert.key" mit Schlüssellänge 2048 Byte erstellen:
openssl genrsa -out cert.key 2048
Für Server-Zertifikate ist es bei der Beantwortung der Fragen notwendig, als Common Name den Hostnamen des Servers einzugeben. Als Anhaltspunkt kann der Name verwendet werden, der im Browser für den Zugriff auf den Server verwendet wird. Dies kann der Servername im lokalen Netzwerk, der Full Qualified Domain Name (FQDN) oder die IP-Adresse des Servers sein.


Zertifikatsanfrage (CSR = Certificate Signing Request) erstellen:
== Vorbereitungen ==
  openssl req -new -key cert.key -out cert.csr -sha256
Verzeichnisse für CA anlegen, z. B.:
  [[Kategorie:Debian]]
# mkdir /root/ca
# cd /root/ca
[[Kategorie:Kryptographie]]
# mkdir certs crl csr newcerts private
# chmod 700 private
# touch index.txt
# touch index.txt.attr
# echo 1000 > serial
 
== Konfiguration anpassen ==
Die Konfigurationsdatei für OpenSSL befindet sich Standardmäßig unter <code>/usr/lib/ssl/openssl.cnf</code> 
 
Unter Debian findet sich die Default-Konfigurationsdatei für OpenSSL unter <code>/etc/ssl/openssl.cnf</code> 
 
Sie kann für die eigenen Zwecke angepasst werden, z. B. indem die Default-Werte für bestimmte Felder gesetzt werden. Nachfolgend ein paar Beispiele:
 
Pfade für die Zertifizierungsstelle und ihre Unterverzeichnisse und Standard-Zeiträume festlegen:
[ CA_default ]
 
dir = /root/ca # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
 
new_certs_dir = $dir/newcerts # default place for new certs.
 
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
 
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file
 
...
 
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = default # use public key default MD
preserve = no # keep passed DN ordering
Vorgabewerte für Land, Region und Organisation festlegen:
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = AU
countryName_min = 2
countryName_max = 2
 
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Some-State
 
localityName = Locality Name (eg, city)
 
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Internet Widgits Pty Ltd
 
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
 
== Schlüssel für Zertifizierungsstelle (Root CA) erstellen ==
Zunächst wird ein privater Schlüssel für die Zertifizierungsstelle erstellt.
 
Seine Schlüssellänge sollte so angesetzt werden, dass sie in der  Gültigkeitsdauer des Zertifizierungsstellen-Zertifikats ausreichend Sicherheit verspricht.
 
Für eine Gültigkeitszeit von 10 Jahren sind 2048 Bit im Jahr 2017 vermutlich zu wenig und daher sollte eher eine Schlüssellänge von 4096 Bit benutzt werden.
 
Der private Schlüssel der Zertifizierungsstelle sollte mit dem Parameter <code>-aes256</code> verschlüsselt werden und mit einem starken Passwort gesichert werden.
# cd /root/ca
# openssl genrsa -aes256 -out private/cakey.pem 4096
Zugriff auf den Schlüssel einschränken:
# chmod 400 private/cakey.pem
Der private Schlüssel sollte geheim gehalten werden, da mit ihm die Glaubwürdigkeit der ausgestellten Zertifikate steht und fällt.
 
Idealerweise sollte der Schlüssel auf einer Maschine ohne Internet-Zugang offline gehalten werden.
 
== Zertifikat selbst signieren ==
Für den erstellten privaten Schlüssel der Zertifizierungsstelle (Root CA) ein Zertifikat erstellen und dieses selbst signieren:
  # openssl req -new -x509 -days 3650 -sha512 -key private/cakey.pem -out cacert.pem
Zugriff auf das Stammstellen-Zertifikat einschränken:
# chmod 444 cacert.pem
 
Für das Ausstellen von Computer- und Benutzer-Zertifikaten selbst sollten aus sicherheitsgründen Zwischen-Zertifizierungsstellen verwendet werden.
 
== Zertifikat überprüfen ==
Beim erstellten Zertifikat sollten folgende Informationen überprüft werden:
* Signature Algorithm
* Validity Not Before und Not After
* Public Key Algorithm und Länge des Public Key
* Issuer
* Subject
* X509v3 Extensions (v3_ca)
Diese können folgendermaßen ausgegeben werden:
# openssl x509 -noout -text -in certs/ca.cert.pem
SHA-256 Fingerprint ausgeben:
openssl x509 -noout -fingerprint -sha256 -in certs/ca.cert.pem
SHA-1 Fingerprint ausgeben:
  openssl x509 -noout -fingerprint -sha1 -in certs/ca.cert.pem
 
== Zwischen-Zertifizierungsstelle (Intermediate CA) erstellen ==
Todo
 
== Computer- und Benutzer-Zertifikate erstellen ==
Die Erstellung von Computer- und Benutzer-Zertifikaten wird in folgendem Artikel beschrieben: [[Zertifikate erstellen (OpenSSL)]]
[[Kategorie:Kryptographie]]
 
== Quellen ==
* Umfassend, strukturiert und akademisch sauber: https://jamielinux.com/docs/openssl-certificate-authority/
* Mittelumfassend und recht sauber: https://thomas-leister.de/selbst-signierte-tls-zertifikate-mit-eigener-ca/
* Kurz und bündig, recht sauber: https://blog.veloc1ty.de/2015/08/13/eigene-zertifizierungsstelle-ca-mit-sub-zertifizierungsstellen-sub-cas/
* Kurz und bündig, Befehle teils fragwürdig: https://datacenteroverlords.com/2012/03/01/creating-your-own-ssl-certificate-authority/
* Kurz und bündig, Befehle teils fragwürdig, out of Date: https://www.maffert.net/eigene-ca-zertifizierungsstelle-erstellen-und-zertifikate-ausstellen-debian/
[[Kategorie:Terminal]]
[[Kategorie:OpenSSL]]

Aktuelle Version vom 12. September 2017, 20:25 Uhr

Dieser Artikel beschreibt, wie Debian GNU/Linux eine selbst signierte Stamm-Zertifizierungsstelle (Root CA = Certificate Authority) auf Basis von OpenSSL erstellt wird.

Eine Zertifizierungsstelle setzt sich aus einem privaten Schlüssel und einem selbst signierten Zertifikat zusammen. Siehe auch: Grundlagen der PKI

achfolgend werden die Schritte beschrieben, um beides zu erstellen.

Vorbereitungen

Verzeichnisse für CA anlegen, z. B.:

# mkdir /root/ca
# cd /root/ca
# mkdir certs crl csr newcerts private
# chmod 700 private 
# touch index.txt
# touch index.txt.attr
# echo 1000 > serial 

Konfiguration anpassen

Die Konfigurationsdatei für OpenSSL befindet sich Standardmäßig unter /usr/lib/ssl/openssl.cnf

Unter Debian findet sich die Default-Konfigurationsdatei für OpenSSL unter /etc/ssl/openssl.cnf

Sie kann für die eigenen Zwecke angepasst werden, z. B. indem die Default-Werte für bestimmte Felder gesetzt werden. Nachfolgend ein paar Beispiele:

Pfade für die Zertifizierungsstelle und ihre Unterverzeichnisse und Standard-Zeiträume festlegen:

[ CA_default ]
 
dir		= /root/ca		# Where everything is kept
certs		= $dir/certs		# Where the issued certs are kept
crl_dir		= $dir/crl		# Where the issued crl are kept
database	= $dir/index.txt	# database index file.
 
new_certs_dir	= $dir/newcerts		# default place for new certs.
 
certificate	= $dir/cacert.pem 	# The CA certificate
serial		= $dir/serial 		# The current serial number
crlnumber	= $dir/crlnumber	# the current crl number
 
crl		= $dir/crl.pem 		# The current CRL
private_key	= $dir/private/cakey.pem# The private key
RANDFILE	= $dir/private/.rand	# private random number file
 
...
 
default_days	= 365			# how long to certify for
default_crl_days= 30			# how long before next CRL
default_md	= default		# use public key default MD
preserve	= no			# keep passed DN ordering

Vorgabewerte für Land, Region und Organisation festlegen:

[ req_distinguished_name ]
countryName			= Country Name (2 letter code)
countryName_default		= AU
countryName_min			= 2
countryName_max			= 2
 
stateOrProvinceName		= State or Province Name (full name)
stateOrProvinceName_default	= Some-State
 
localityName			= Locality Name (eg, city)
 
0.organizationName		= Organization Name (eg, company)
0.organizationName_default	= Internet Widgits Pty Ltd
 
organizationalUnitName		= Organizational Unit Name (eg, section)
#organizationalUnitName_default	=

Schlüssel für Zertifizierungsstelle (Root CA) erstellen

Zunächst wird ein privater Schlüssel für die Zertifizierungsstelle erstellt.

Seine Schlüssellänge sollte so angesetzt werden, dass sie in der Gültigkeitsdauer des Zertifizierungsstellen-Zertifikats ausreichend Sicherheit verspricht.

Für eine Gültigkeitszeit von 10 Jahren sind 2048 Bit im Jahr 2017 vermutlich zu wenig und daher sollte eher eine Schlüssellänge von 4096 Bit benutzt werden.

Der private Schlüssel der Zertifizierungsstelle sollte mit dem Parameter -aes256 verschlüsselt werden und mit einem starken Passwort gesichert werden.

# cd /root/ca
# openssl genrsa -aes256 -out private/cakey.pem 4096

Zugriff auf den Schlüssel einschränken:

# chmod 400 private/cakey.pem

Der private Schlüssel sollte geheim gehalten werden, da mit ihm die Glaubwürdigkeit der ausgestellten Zertifikate steht und fällt.

Idealerweise sollte der Schlüssel auf einer Maschine ohne Internet-Zugang offline gehalten werden.

Zertifikat selbst signieren

Für den erstellten privaten Schlüssel der Zertifizierungsstelle (Root CA) ein Zertifikat erstellen und dieses selbst signieren:

# openssl req -new -x509 -days 3650 -sha512 -key private/cakey.pem -out cacert.pem

Zugriff auf das Stammstellen-Zertifikat einschränken:

# chmod 444 cacert.pem

Für das Ausstellen von Computer- und Benutzer-Zertifikaten selbst sollten aus sicherheitsgründen Zwischen-Zertifizierungsstellen verwendet werden.

Zertifikat überprüfen

Beim erstellten Zertifikat sollten folgende Informationen überprüft werden:

  • Signature Algorithm
  • Validity Not Before und Not After
  • Public Key Algorithm und Länge des Public Key
  • Issuer
  • Subject
  • X509v3 Extensions (v3_ca)

Diese können folgendermaßen ausgegeben werden:

# openssl x509 -noout -text -in certs/ca.cert.pem

SHA-256 Fingerprint ausgeben:

openssl x509 -noout -fingerprint -sha256 -in certs/ca.cert.pem

SHA-1 Fingerprint ausgeben:

openssl x509 -noout -fingerprint -sha1 -in certs/ca.cert.pem

Zwischen-Zertifizierungsstelle (Intermediate CA) erstellen

Todo

Computer- und Benutzer-Zertifikate erstellen

Die Erstellung von Computer- und Benutzer-Zertifikaten wird in folgendem Artikel beschrieben: Zertifikate erstellen (OpenSSL)

Quellen