Zertifizierungsstelle einrichten (OpenSSL): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
Dieser Artikel beschreibt, | Eine Zertifizierungsstelle setzt sich aus einem privaten Schlüssel und einem selbst signierten Zertifikat zusammen. | ||
Dieser Artikel beschreibt, welche Schritte unternommen werden müssen, um unter Debian GNU/Linux eine selbst signierte Stamm-Zertifizierungsstelle (Root CA = Certificate Authority) auf Basis von OpenSSL zu erstellen. | |||
== Vorbereitungen == | == Vorbereitungen == | ||
Zeile 10: | Zeile 12: | ||
== Konfiguration anpassen == | == Konfiguration anpassen == | ||
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. | 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. | 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 | 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 | # cd /root/ca | ||
# openssl genrsa -aes256 -out private/cakey.pem 4096 | # openssl genrsa -aes256 -out private/cakey.pem 4096 | ||
Zugriff auf den Schlüssel einschränken: | Zugriff auf den Schlüssel einschränken: | ||
# chmod 400 private/cakey.pem | # 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. | 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 | 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 certs/cacert.pem | # openssl req -new -x509 -days 3650 -sha512 -key private/cakey.pem -out certs/cacert.pem | ||
Zugriff auf das Stammstellen-Zertifikat einschränken: | Zugriff auf das Stammstellen-Zertifikat einschränken: |
Version vom 1. September 2017, 11:44 Uhr
Eine Zertifizierungsstelle setzt sich aus einem privaten Schlüssel und einem selbst signierten Zertifikat zusammen.
Dieser Artikel beschreibt, welche Schritte unternommen werden müssen, um unter Debian GNU/Linux eine selbst signierte Stamm-Zertifizierungsstelle (Root CA = Certificate Authority) auf Basis von OpenSSL zu erstellen.
Vorbereitungen
Verzeichnisse für CA anlegen, z. B.:
# mkdir /root/ca # cd /root/ca # mkdir certs crl newcerts private # chmod 700 private # touch index.txt # echo 1000 > serial
Konfiguration anpassen
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 certs/cacert.pem
Zugriff auf das Stammstellen-Zertifikat einschränken:
# chmod 444 private/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
Zwischen-Zertifizierungsstelle (Intermediate CA) erstellen
Todo
Zertifikate erstellen
Die Erstellung von Zertifikaten wird in folgendem Artikel beschrieben: Zertifikate erstellen (OpenSSL)
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/