Allgemein:Zertifikate-SymmetrischeAsymmetrische

Aus Fortinet Wiki
Zur Navigation springen Zur Suche springen


Zertifikate Allgemein

Zertifikate sind selbst für IT-Profis schwierig zu verstehen und oft im täglichen IT-Leben eine Herausforderung. Der korrekte Umgang mit Zertifikaten ist jedoch -speziell in der Security- unerlässlich. Mit dem Begriff "Zertifikat" (certificate) wird dabei sehr "allgemein" Umgegangen und man versteht dabei meistens darunter "öffentliche" Zertifikate und/oder "private" Zertifikate. Dabei ist Wichtig zu wissen, dass ein "öffentliches" (Public Key) Zertifikat auf einem "privaten" (Private Key) Zertifikat basiert.

Ein Webserver-Zertifikat dient der Authentifizierung eines Servers gegenüber dem Browser. Der Server kann sich aber nur dann ausweisen, wenn er auch den "privaten" Schlüssel besitzt. Der Browser hingegen benötigt das Zertifikat (Public Key), um die Authentizität der vom Server erhaltenen Daten zu überprüfen. Folglich benötigt man ein Zertifikat mit "private" Schlüssel, um einen sicheren Kommunikationskanal anzubieten.

Zertifikate - Verschlüsselung

Es gibt Grundsätzlich zwei Arten von Verschlüsselungsverfahren:

       [Symmetrische Verschlüsselung]
       [Asymmetrische Verschlüsselung]

Zertifikate - Symmetrische Verschlüsselung

       [Symmetrische Verschlüsselung]
       
       Symmetrische Verschlüsselung erfordert, dass jeder Kommunikationspartner im Besitz eines gemeinsamen Schlüssels
       ([Pre-Shared Key]) ist. Nur dann ist er in der Lage, verschlüsselte Daten zu lesen, zu senden und zu verändern. 
       Aufgrund der Funktionsweise der symmetrischen Verschlüsselung ist es von grösster Wichtigkeit, dass der Schlüssel
       nicht in die falschen Hände gerät. Mit steigender Anzahl von Teilnehmern erhöht sich auch die Gefahr, dass der 
       Schlüssel kompromittiert wird. Da jeder Teilnehmer denselben Schlüssel verwendet, muss dieser an jeden übermittelt 
       werden, was einen großen Sicherheitsnachteil darstellt. Die bekanntesten Algorithmen zur symmetrischen Verschlüsselung 
       sind:
       
       [Advanced Encryption Standard" (AES)]
       [Data Encryption Standard" (DES)]
       
       NOTE DES stellt den Vorgänger dar von AES und sollte nicht mehr benutzt werden!
       
       Zertifikate-1084.jpg

Zertifikate - Asymmetrische Verschlüsselung

       [Asymmetrische Verschlüsselung]
       
       Verwendet einen "öffentlichen" (Public Key) und einen "privaten" (Private Key) Anteil, die "mathematisch" in Verbindung stehen.
       Der geheimer oder privater Schlüssel (Private Key) gehört nur einer einzigen Person und darf nicht öffentlich gemacht oder 
       weitergegeben werden. Der öffentliche Schlüssel (Public Key) darf und "muss" sogar an Kommunikationspartner verteilt werden. 
       Die asymmetrische Verschlüsselung bildet so die Grundlage für Zertifikate.
       
       NOTE Diese Verschlüsselungsart "Asymmetrisch" wird auch "[Public Key Cryptography]" genannt.
       
       Zertifikate-1085.jpg

Alles beginnt mit dem "privaten" Schlüssel (Private Key). Aus ihm wird der "öffentliche" Schlüssel (Public Key) erzeugt und kann jeder Zeit wiederhergestellt werden. Daten, die mit einem der beiden "verschlüsselt" wurden, können nur mit dem anderen wieder "entschlüsselt" werden. Die Übermittlung von verschlüsselten Daten beruht darauf, dass die Daten mithilfe des "öffentlichen" Schlüssels (Public Key) des Empfängers "verschlüsselt" werden, so dass nur noch der Empfänger in der Lage ist, den Klartext zu ermitteln. Denn nur er befindet sich im Besitz des passenden "öffentlichen" Schlüssels (Public Key).

       Zertifikate-1086.jpg


Zertifikate - Asymmetrische Verschlüsselung und die "Diffie-Hellman" Problematik

Die Asymetrische Verschlüsselung wie schon im vorherigen Artikel erklärt basiert im Grundsatz auf einem "private" Key und einem darauf basierenden "public" Key. Zur Erinnerung: Alles beginnt mit dem "privaten" Schlüssel (Private Key). Aus ihm wird der "öffentliche" Schlüssel (Public Key) erzeugt und kann jeder Zeit wiederhergestellt werden. Daten die mit einem "Public-Key" verschlüsselt weren können nur mit dem korrespondierenden "Private-Key" entschlüsselt werden. Die Übermittlung von verschlüsselten Daten beruht darauf, dass die Daten mithilfe des "öffentlichen" Schlüssels (Public Key) des Empfängers "verschlüsselt" werden, so dass nur noch der Empfänger in der Lage ist, den Klartext zu ermitteln. Denn nur er befindet sich im Besitz des passenden "privaten" Schlüssels (Public Key). Diese Verschlüsselungsart "Asymmetrisch" wird auch "[Public Key Cryptography]" genannt.

       Zertifikate-1085.jpg

In diesem Verfahren gibt es einem Umstand dem Rechnung zu tragen. Formal besteht ein "Public-Key-Verschlüsselungsverfahren" aus drei Algorithmen:

       - Der Schlüsselerzeugungsalgorithmus erzeugt zu einem gegebenen Sicherheitsparameter (2048bit, 4096bit) ein Schlüsselpaar, das aus einem öffentlichen
         (Oeffentlicher Key "public") und dem dazugehörigen geheimen Schlüssel (Privater Key "private") besteht.
       - Der Verschlüsselungsalgorithmus erzeugt aus einem Klartext unter Verwendung des öffentlichen Schlüssels (Oeffentlicher Key "public") einen Geheimtext (Cyphertext).
       - Der Entschlüsselungsalgorithmus berechnet zu einem Geheimtext (Cyphertext) unter Verwendung des geheimen Schlüssels den passenden Klartext.

Das Problem: Bei der Daten-Übertragung mittels zB SSL/TLS werden mit einem Lanzeitschlüssel (pub-priv-key) sogenannte Sitzungsschlüssel für jede Session erzeugt (Session-keys). Hat ein Angreifer Zugriff auf den Langzeitschlüssel so können sämtliche vergangenen Sitzungsschlüssel errechnet werden und somit die gesamte Kommunikation entschlüsselt werden. Dies wird durch Perfect Forward Secrecy (PFS) unterbunden. Ein möglicher Angreifer kann trotz Kenntnis des Langzeitschlüssels keinerlei Rückschlüsse auf die ausgehandelten Sitzungsschlüssel ziehen. Bei zB. TLS wird dies dadurch erreicht, dass der Langzeitschlüssel zu einem Signaturverfahren gehört und nur benutzt wird, um Kurzzeitschlüssel zu signieren. Mit diesen wird jeweils durch einen Diffie-Hellman-Schlüsselaustausch ein Sitzungsschlüssel ausgehandelt. Wird ein Server kompromittiert, erfährt der Angreifer nur den langfristigen Signaturschlüssel und die Sitzungsschlüssel gerade aktiver Verbindungen. Die Sitzungsschlüssel zurückliegender Verbindungen sind bereits gelöscht und lassen sich nicht mehr rekonstruieren. In diesem Verfahren werden sogenannte "Diffie-Hellmann-Parameter" (auch Diffie-Hellmann-Group) verwendet. Eine DH-Group ist eine Liste von langen Primzahlen welche für das PFS-Verfahren (Perfect Forward Secret) verwendet werden. Bis vor kurzem galten diese Listen als sicherheits-unkritisch und wurden aus diesem Grund vom Hersteller "vorberechnet" und ausgeliefert. Somit verwenden tausende Rechner die gleichen Listen. Seit kurzem steht dieses Verfahren unter Kritik und es wird empfohlen eigene DH-Groups/Params zu erzeugen. Siehe auch:

       https://weakdh.org/sysadmin.html

Diesem Umstand kann abgeholfen werden dh. indem eigenen "DH" Parameter erstellt werden. Dabei ist jedoch zu berücksichtigen, dass man im Vorraus nicht weiss welcher Parameter benutzt werden soll dh. einige Clients kommen mit "hardcoded" Parameter und fordern einen "1024" Code an und andere wiederum "512". Dies zwingt uns e nachdem mehrere dieser "DH" Parameter zur Verfügung zu stellen. Diese "DH" Parameter die erstellt werden sind nicht Installations spezifisch dh. Sie können durchaus auch auf einem anderen Server erstellt werden und für mehrere Installationen benutzt werden. Um so einen "DH" Parameter auf einem Linux System anhand "OpenSSL" zu erzeugen kann folgendes durchgeführt werden:

       # mkdir /opt/DH-Param
       # chmod 700 /opt/DH-Param
       # chown root:root /opt/DH-Param 
       # cd /opt/DH-Param

Nun erzeuge zB einen "256bit" langen "DH" Parameter:

       # openssl genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:256 -out dh256.pem
       ........+......+..............+.......+...+...+..+........+.............++*++*++*++*++*++*++*++*++*++*++*++*

Nach der Erzeugung kann der "DH" Parameter ebenfalls mit folgenden Kommando als "text ausgegeben werden:

       # openssl pkeyparam -text -in dh256.pem 
       -----BEGIN DH PARAMETERS-----
       MCYCIQD1xBUy+F1DHmgT6t7ET7vHXN1Sm2TbvmlXfbQeoP1JSwIBAg==
       -----END DH PARAMETERS-----
       PKCS#3 DH Parameters: (256 bit)
           prime:
               00:f5:c4:15:32:f8:5d:43:1e:68:13:ea:de:c4:4f:
               bb:c7:5c:dd:52:9b:64:db:be:69:57:7d:b4:1e:a0:
               fd:49:4b
           generator: 2 (0x2)

Um einen "DH" Paramter mit höherer Bit Anzahl zu erzeugen zB 512, 1024, 2048 sowie 4096 kann folgendes ausgeführt werden:

       # /bin/openssl genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:512 -out dh512.pem
       # /bin/openssl genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:1024 -out dh1024.pem
       # /bin/openssl genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:2048 -out dh2048.pem
       # /bin/openssl genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:4096 -out dh4096.pem

Der Vorgang diese "DH" Parameter selber zu erzeugen ist einfach jedoch diese in den verschiedenen Services wie zB Apache, Postfix usw. einzubinden ist eine Andere. Speziell bei Herstellern basierend auf dem eigenen OS fehlt die Schnittstelle of diese erzeugten "DH" Paramter einzubinden. Die nachfolgende Seite zeigt auf wie bei verschiedenen Service wie Apache, Postfix, Cyrus-IMAP vorzugehen ist um den selbst erzeugten "DH" Paramter einzubinden:

       https://weakdh.org/sysadmin.html

Zertifikate - Asymmetrische Signatur

Die zweite Anwendung von asymmetrischer Verschlüsselung ist das Erstellen von Signaturen, um die Authentizität von Daten zu gewährleisten. Dabei macht man sich zu Nutze, dass die Verschlüsselung von Daten mithilfe des "privaten" Schlüssels (Private Key) durch den "öffentlichen" Schlüssel (Public Key) rückgängig gemacht werden kann. Dadurch ist jeder (mit dem öffentlichen Schlüssel des Absenders) in der Lage, die Signatur zu entschlüsseln. Allerdings konnte nur der Absender die Signatur erzeugen, da nur er sich im Besitz des "privaten" Schlüssels (Private Key) befindet. Für eine Signatur muss aber nicht die gesamte Nachricht wiederholt werden. Stattdessen wird ein so genannter "Hash-Wert" aus der Klartext-Nachricht erzeugt, der dann mit dem "privaten" Schlüssel (Private Key) des Absenders verschlüsselt wird. Die Überprüfung der Signatur verläuft sehr ähnlich zur Erzeugung:

       Der Empfänger erstellt ebenfalls den Hash-Wert der Klartext-Nachricht und vergleicht 
       diesen mit dem entschlüsselten Hash-Wert des Absenders. Sind diese identisch, handelt 
       es sich um eine gültige Signatur und die Nachricht kann als authentische eingestuft werden.
       
       Zertifikate-1087.jpg
       
       NOTE Ein Hash-Wert wird durch eine Funktion erstellt, die aus einem Text beliebiger Länge eine 
            eindeutige Zeichenkette  fester Länge erzeugt. Die Funktion ist nicht umkehrbar, so dass 
            es unmöglich (oder wenigstens sehr schwer) ist, den Klartext zu einem Hash-Wert zu ermitteln.

Durch die Verwendung von "Public Key Cryptography" kann die Authentizität und Integrität mithilfe von Signaturen sichergestellt werden. Die Vertraulichkeit beruht auf der Verschlüsselung der Nachricht. Damit Public Key Cryptography funktioniert, muss man offensichtlich seinen öffentlichen Schlüssel (Public Key) mit potentiellen Kommunikationspartnern teilen. Da ein öffentlicher Schlüssel (Public Key) aber nur durch eine unpersönliche Zeichenkette repräsentiert wird, wäre es notwendig, ein "Adressbuch" zu pflegen. Darin müsste zu jedem öffentlichen Schlüssel (Public Key) die Identität des Absenders vermerkt sein. Dieses Adressbuch würde aber ein Angriffsziel darstellen. Sollte ein Angreifer den öffentlichen Schlüssel (Public Key) eines bekannten Empfängers austauschen, wäre die Kommunikation kompromittiert. Daher wurde das Zertifikat erfunden. Es verschmilzt einen öffentlichen Schlüssel (Public Key) mit Identitätsinformationen mithilfe einer Signatur. Beispiele zu diesen Ausführungen wären:

       Pretty Good Privacy (PGP) 
       GNU Privacy Guard (GPG)

Diese basieren auf einem so genannten [Web of Trust], einem Netz aus Vertrauensstellungen. Jeder Teilnehmer kann die Zuordnung eines öffentlichen Schlüssels (Public Key) und den Identitätsinformationen mithilfe einer Signatur bestätigen. Dadurch benötigt jeder Teilnehmer nur wenige enge Freunde. Das Netz spannt sich durch die Signaturen untereinander auf. Erhält ein Teilnehmer eine Nachricht von einem (noch) unbekannten, lässt sich die Authentizität durch eine Kette aus vertrauenswürdigen Unterzeichnern überprüfen. Es handelt sich um einen "Community-basierten" Ansatz und erfordert eine kritische Masse von Teilnehmern, damit Kommunikationspartner verbunden sind.

       Zertifikate-1088.jpg

Zertifikate - Erstellen einer eigenen CA (Certificate Authority)

Zu Beginn: Vielen Dank gilt "Philipp Schrödel" für seine ausführliche Dokumentation und Zeitaufwand betreffend den nachfolgenden Informationen! Der nachfolgenden Dokumentation/Informationen unterliegen nachfolgende Allgemeinen Informationen:

       Certificate Authority (private)
       
       Dieses CA berücksichtigt folgende Informationen:
       
       • Best practice (2015) regarding crypto, key-length etc.
       • Das Root-CA wird erstellt für eine "fiktive" Firma «TheBC».
       • Es wird kein "intermediate" Zertifikat Authority erstellt.
       • Alle Kommandos basierend auf Linux werden im Verzeichnis "/opt/CA" ausgeführt.
       • Der CRL (Certifcate Revocation List) Distribution Point befindet sich auf der URL http://crl.thebc.ch/TheBC-CA.crl.pem
       • Der OCSP (Online Certificate Status Protocol) befindet sich auf der URL http://ocsp.thebc.ch:8888

In den nächsten Schritten wird die "CA" erstellt sprich das "Certificate Authority". Dazu erstellen wird die Verzeichnis Struktur resp. das "home" Verzeichnis für das "Certificate Authority":

       # mkdir -p /opt/CA/private /opt/CA/certs /opt/CA/crl /opt/CA/csr /opt/CA/newcerts
       # cd /opt/CA

Nun benötigen wir einige Files die erstellt werden müssen:

       1. Ein "random" File das von der CA benutzt wird.
       2. Ein "index" File in dem die erstellten Zertifikate gespeichert werden.
       3. Ein "index" File für die CRL (Certificate Revocation List).
       4. Anpassen der Rechte für das Verzeichnis "./private"
       # openssl rand -out /opt/CA/private/RANDFILE 8192
       # touch /opt/CA/index.txt
       # echo 01 > crl/crl.number
       # chmod 700 /opt/CA/private

Damit unsere "CA" Konsitent ist und bleibt definieren wir ein "Global Configuration". Dieses Konfig File ist unter "OpenSSL" auch als "openssl.cnf" definiert.

       # vi /opt/CA/TheBC-CA.conf
       
       --------------- /opt/CA/TheBC-CA.conf --------------- 
        
       ####################################################################
       # CA Definition `man ca`
       #
       # The [ ca ] section is mandatory. Here we tell OpenSSL to use the
       # options from the [ CA_default ] section.
       #
       [ ca ]
       default_ca      = CA_default	# The default ca section
       
       ####################################################################
       # The [ CA_default ] section contains a range of defaults.
       # Make sure you declare the directory you chose earlier (/opt/CA). [ CA_default ]
       
       # Directory and file locations.
       dir               = /opt/CA                        # Where everything is kept 
       certs             = $dir/certs                     # default place for new certs
       crl_dir           = $dir/crl                       # clr directory 
       new_certs_dir     = $dir/newcerts
       database          = $dir/index.txt                 # database index file
       serial            = $dir/serial                    # Don't initialize with echo, use -create_serial 
       RANDFILE          = $dir/private/RANDFILE          # private random number file
       
       # The root key and root certificate
       private_key       = $dir/private/TheBC-CA.key.pem  # CA private key 
       certificate       = $dir/certs/TheBC-CA.cert.pem   # CA certificate
       
       # For certificate revocation lists
       crlnumber         = $dir/crl/crl.number            # current crl number
       crl               = $dir/crl/ca.crl.pem            # current crl
       crl_extensions    = crl_ext                        # [ crl_ext ]
       default_crl_days  = 30                             # The default life for a certificate and a CRL.
       
       default_md        = sha512                         # Default digest algorithm 
       name_opt          = ca_default                     # Subject Name options
       cert_opt          = ca_default                     # Certificate field options
       default_days      = 365                            # The default life for a certificate and a CRL.
       preserve          = no                             # openssl will re-order the attributes in the DNs of CSRs 
       policy            = policy_anything                # [ policy_anything] default policy section to use
       
       ####################################################################
       # An alternative policy not referred to anywhere in this file. Can
       # be used by specifying '-policy policy_anything' to ca(8).
       #
       [ policy_anything ]
       countryName            = optional 
       stateOrProvinceName    = optional 
       localityName           = optional
       organizationName       = optional 
       organizationalUnitName = optional 
       commonName             = supplied
       emailAddress           = optional
       
       ####################################################################
       # This is where we define how to generate CSRs
       # [ req ] section are applied when creating certificates or certificate signing requests.
       # Options for the `req` tool (`man req`) [ req ]
       default_bits            = 4096                     # Size of keys 
       distinguished_name      = req_distinguished_name   # [ req_distinguished_name ] 
       string_mask             = utf8only                 # permitted characters
       default_md              = sha512                   # message digest algorithm
       
       ####################################################################
       # Per "req" section, this is where we define DN info
       # The [ req_distinguished_name ] section declares the information normally required in a certificate signing request. You can optionally specify some defaults.
       #
       [ req_distinguished_name ]
       #countryName	= Country Name (2 letter code)
       #countryName_default            = US
       #countryName_min                = 2
       
       #countryName_max                = 2
       #stateOrProvinceName            = State or Province Name (full name)
       #stateOrProvinceName_default    = NEW YORK
       #localityName                   = Locality Name (city, district)
       #localityName_default           = NEW YORK
       0.organizationName              = Organization Name (company) 
       0.organizationName_default      = TheBC
       organizationalUnitName          = Organizational Unit Name (department, division)
       organizationalUnitName_default	= Certificate Authoriy Departement
       emailAddress                    = Email Address
       emailAddress_max                = 64
       emailAddress_default            = sysop@thebc.ch
       commonName                      = Common Name (hostname, IP, or your name)
       commonName_max                  = 64
       
       ####################################################################
       # The next few sections are extensions that can be applied when signing certificates.
       # For example, passing the -extensions v3_ca command-line argument will apply the options set in [ v3_ca ].
       
       ####################################################################
       # We’ll apply the v3_ca extension when we create the root certificate. [ v3_ca ]
       # Extensions for a typical CA (`man x509v3_config`). 
       subjectKeyIdentifier     = hash
       authorityKeyIdentifier   = keyid:always,issuer 
       basicConstraints         = critical, CA:true
       keyUsage                 = critical, digitalSignature, cRLSign, keyCertSign
       
       ####################################################################
       # We’ll apply the v3_ca_intermediate extension when we create the intermediate certificate. pathlen:0 ensures that there can be no further certificate authorities below the intermediate CA.
       [ v3_intermediate_ca ]
       # Extensions for a typical intermediate CA (`man x509v3_config`). 
       subjectKeyIdentifier    = hash
       authorityKeyIdentifier  = keyid:always,issuer 
       basicConstraints        = critical, CA:true, pathlen:0
       keyUsage                = critical, digitalSignature, cRLSign, keyCertSign
       
       ####################################################################
       # Stanza for OCSP servers [ v3_OCSP ]
       basicConstraints       = CA:FALSE
       subjectKeyIdentifier   = hash 
       authorityKeyIdentifier = keyid,issuer
       keyUsage               = nonRepudiation, digitalSignature, keyEncipherment 
       extendedKeyUsage       = critical, OCSPSigning
       
       ####################################################################
       # We’ll apply the usr_cert extension when signing client certificates, such as those used for remote user authentication.
       [ usr_cert ]
       # Extensions for client certificates (`man x509v3_config`). 
       basicConstraints       = CA:FALSE
       #nsCertType            = server            # ssl server
       #nsCertType            = objsign           # ssl object signing
       #nsCertType            = client, email     # client 
       nsCertType             = client, email
       subjectKeyIdentifier   = hash 
       authorityKeyIdentifier = keyid,issuer
       keyUsage               = critical, nonRepudiation, digitalSignature, keyEncipherment 
       extendedKeyUsage       = clientAuth, emailProtection
       
       ####################################################################
       # We’ll apply the server_cert extension when signing server certificates, such as those used for web servers. [ server_cert ]
       # Extensions for server certificates (`man x509v3_config`). basicConstraints = CA:FALSE
       #nsCertType            = server            # ssl server
       #nsCertType            = objsign           # ssl object signing
       #nsCertType            = client, email     # client 
       nsCertType             = server
       subjectKeyIdentifier   = hash
       
       --------------- /opt/CA/TheBC-CA.conf --------------- 

Als nächstes erstellen wir den "root key" (TheBC-CA.key.pem) für unser "CA" und dieser muss absolut abgesichert sein gegenüber unerlaubten Zugriffen. Wenn jemand Besitz erlangt über den "root key" kann dieser anhand diesem "Trusted Zertifikate" erstellen. Aus diesem Grund wird der "root key" mit AES256 Verschlüsselt anhand einem "sicheren" Passwort.

       NOTE Erstelle all "root" sowie "intermediate" Zertifikat Key's mit einer Key Länge von 4096bit. Obwohl 4096bit benutzt wird können später
            Server und Client Zertifikate mit einer tieferen bit Länge erzeugt werden!
       # openssl genpkey -aes256 -out private/TheBC-CA.key.pem -algorithm RSA -pkeyopt rsa_keygen_bits:4096
       # chmod 400 private/TheBC-CA.key.pem

Nun erstelle den "root certificate signing request". Benütze den "root key" (ca.key.pem) um das "root" Zertifikat (ca.cert.pem) zu erstellen. Vergebe bei der Erstellung des "root" Zertikates ein spätes Verfalldatum von ca. 20 Jahren. Wenn das "root" Zertifikat abläuft werden alle darauf basierenden und gezeichnete Zertifikate ungültig.

       # openssl req -config TheBC-CA.conf -key private/TheBC-CA.key.pem -new -extensions v3_ca -out csr/TheBC- CA.csr.pem
       
       NOTE Als "CN" resp. Common Name muss nicht der FQDN des Server benutzt werden sonden zB "TheBC-Root-CA"

Das "root" Zertifikat ist erstellt nun zeichne dieses und denke an das Verfalldatum da in unsere "Global Configuration File" als "default_days" 365 definiert ist und dies mit unseren Angaben übersteuert wird (3650 Tage = 10 Jahre):

       # openssl ca -create_serial -config TheBC-CA.conf -selfsign -days 3650 -extensions v3_ca -in csr/TheBC- CA.csr.pem -out certs/TheBC-CA.cert.pem
       # chmod 444 certs/TheBC-CA.cert.pem

Nun überprüfe das "root" Zertifikat:

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

Bei dieser Ueberüfung sollten folgende Position kontrolliert werden:

       • Der benutzte "Signature Algorithm" (sha512WithRSAEncryption)
       • Das Ablaufdatum "Certificate Validity"
       • Die Public-Key bit Länge (4096 bit)
       • Der "Issuer", das ist der "entity" der das Zertifikat gezeichnet hat
       • Das "Subject", dieser referenziert auf das Zertifikat selber
       • Der "Basic Constraints" sollte "CA:TRUE" sein
       • Der "Key Usage" sollte auf "Digital Signature , Certificate Sign. CRL Sign" sein
       
       NOTE Der "Issuer" und "Subject" sind identisch da es sich um ein "Self-Sign" Zertifikat handelt. Alle "root" Zertifikate
            sind "Self-Signed"!

Nun erstelle den "Chain":

       # cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
       # chmod 444 intermediate/certs/ca-chain.cert.pem

Wenn kein "Intermediate Certificate Authority" vorhanden ist kopiere das "public" Zertifikat vom "root" Zertifikat:

       # cp certs/TheBC-CA.cert.pem certs/TheBC-CA-chain.cert.pem
       # chmod 444 certs/TheBC-CA-chain.cert.pem

Nun zum "Final" check hie eine Uebersicht über unsren Files und Struktur (CA-directory-tree):

       :/opt/CA> tree
       .
       ├── certs
       │	├── TheBC-CA.cert.pem           # Public Cert of the CA
       │	└── TheBC-CA-chain.cert.pem     # Certificate Chain
       ├── crl
       │	└── crl.number                  # Index of the CRL (atm. 01)
       ├── csr
       │	└── TheBC-CA.csr.pem            # CSR for the CA (can be deleted)
       ├── index.txt                            # DB with the issued certificates
       ├── index.txt.attr                       # Contains some extra attributes ???
       ├── index.txt.old                        # Backup file
       ├── newcerts
       │	└── B15E2E0017A94F06.pem        # The same as TheBC-CA.cert.pem
       ├── private
       │	├── RANDFILE                    # Contains some random numbers
       │	└── TheBC-CA.key.pem            # Private key of the CA (SENSITIVE!)
       ├── serial
       └── TheBC-CA.conf                        # The configuration file for the CA
       
       5 directories, 12 files
       :/opt/CA>

Zertifikate - Erstellen eines "Server Certificates" anhand unsere CA (Certificate Authority)

Als nächstes erstellen wir basierend auf unserer eigenen "CA" ein Server Zertifikat resp. den "server key":

       # openssl genpkey -out private/thebc.ch.key.pem -algorithm RSA -pkeyopt rsa_keygen_bits:4096

Nun ertelle den Zertifikat "signing request":

       # openssl req -config TheBC-CA.conf -key private/thebc.ch.key.pem -new -out csr/thebc.ch.csr.pem

Nun zeichne den Zertifikat "signing request":

       # openssl ca -config TheBC-CA.conf -extensions server_cert -in csr/thebc.ch.csr.pem -keyfile private/ ca.key.pem -out certs/thebc.ch.cert.pem
       # openssl ca -config TheBC-CA.conf -extensions server_cert -in csr/thebc.ch.csr.pem -out certs/ thebc.ch.cert.pem
       Beispiel
       :/opt/CA> openssl ca -config TheBC-CA.conf -extensions server_cert -in csr/thebc.ch.csr.pem -out certs/ thebc.ch.cert.pem
       Using configuration from TheBC-CA.conf
       Enter pass phrase for /opt/CA/private/TheBC-CA.key.pem: Check that the request matches the signature
       Signature ok Certificate Details:
       Serial Number: 12780703370455895815 (0xb15e2e0017a94f07) Validity
       Not Before: Jun 24 20:09:41 2015 GMT
       Not After : Jun 23 20:09:41 2016 GMT
       Subject:
       organizationName	= TheBC
       organizationalUnitName	= Certificate Authoriy Departement commonName	= thebc.ch
       emailAddress	= sysop@thebc.ch X509v3 extensions:
       X509v3 Basic Constraints:
        
       CA:FALSE
       Netscape Cert Type: SSL Server
       X509v3 Subject Key Identifier: 91:73:EA:91:8D:D9:F2:9D:EA:51:A0:0C:61:21:35:ED:1C:16:66:0D
       X509v3 Authority Key Identifier: keyid:B1:9C:83:84:2C:3B:64:B6:A0:BE:C2:CD:DB:20:70:C6:75:32:70:AE
       DirName:/O=TheBC/OU=Certificate Authoriy Departement/CN=TheBC-Root-CA/ emailAddress=sysop@thebc.ch
       serial:B1:5E:2E:00:17:A9:4F:06
       
       X509v3 Key Usage: critical
       Digital Signature, Key Encipherment X509v3 Extended Key Usage:
       TLS Web Server Authentication X509v3 CRL Distribution Points:
       
       Full Name:
       URI:http://crl.thebc.ch/TheBC-CA.crl.pem
       
       Authority Information Access:
       OCSP - URI:http://ocsp.thebc.ch:8888
       
       Certificate is to be certified until Jun 23 20:09:41 2016 GMT (365 days) Sign the certificate? [y/n]:

Um nun das Zertifikat dem Server zur Verfügung zu stellen benötigen wir folgende Files:

       • TheBC-CA-chain.cert.pem    (CA Certificate Chain)
       • thebc.ch.key.pem           (private)
       • thebc.ch.cert.pem          (public)

Zertifikate - Erstellen einer "Certificate Revocation List" (CRL / OSCP)

Eine "Certification Revocation List (CRL) beinhaltet Informationen über die Zertifikate und welche Wiederrufen wurden (revoked). Eine "CRL" kann als "Client" Applikation wie zB ein WebBrowser um die "Authentität" eines Server zu überprüfen oder für eine "Server" Applikation wie zB ein Apache oder OpenVPN um zu verhindern das Client sich verbinden die nicht mehr "trusted" Vertrauenswürdig sind. Ein "CRL" wird unter normalen Umständen öffentlich publiziert zB über eine URL. Drittanbieter können diese CRL Informationen über zB diese URL abfragen um festzustellen ob basierend auf dem Zertifikat diese noch gültig ist oder nicht (revoked). Im nächsten Schritt fügen wir unserem "Global Configuration File" den entsprechenden Eintrag hinzu für den "Distribution Point" (URL):

       NOTE Einige Applikationsanbieter unterstützen diesen Vorgang nicht mehr und benützen stattdessen das "Online
            Certificate Status Protocol (OCSP)!
       # vi /opt/CA/TheBC-CA.conf
       
       --------------- /opt/CA/TheBC-CA.conf --------------- 
       
       [ server_cert ]
       crlDistributionPoints = URI:http://crl.thebc.ch/TheBC-CA.crl.pem
       
       --------------- /opt/CA/TheBC-CA.conf --------------- 

Generiere die "CRL":

       # cd /root/ca
       # echo 01 > crl/crl.number
       # openssl ca -config /opt/CA/TheBC-CA.conf -gencrl -out crl/TheBC-CA.crl.pem
       NOTE Die "CRL Options" können anhand "man ca" eingesehen werden und enthält zusätzliche Informationen!

Um die "CRL" einzusehen kann folgender Befehl benutzt werden

       # openssl crl -in crl/ca.crl.pem -noout -text

Im "output" ist zu ersehen das keine Zertifikate "revoked" sind dh. der "output" zeigt an "No Revoked Certificates". Eine "CRL" wird unter normalen Umständen in Abstäden von 30 Tagen neu erstellt. Per Standard läuft eine "CRL" nach 30 Tagen ab. Dieser Vorgang resp. Umstand wird kontrolliert über die Definition "default_crl_days" im File "/opt/CA/TheBC-CA.conf" innerhalb des Absatzes "[ CA_default ]". Wenn ein Zertifikat als ungültig erklärt werden soll muss ein "revoke" auf dieses Zertifikat durchgeführt werden. Dies geschieht folgendermassen:

       # openssl ca -config /opt/CA/TheBC-CA.conf -revoke cert s/bob@example.com.cert.pem

Danach muss die CRL neu erstellt werden:

       # openssl ca -config /opt/CA/TheBC-CA.conf -gencrl -out crl/ca.crl.pem
       "Server Seitig"
       Wenn "Server Seitig" eine "CRL" benutzt wird überprüft im normal Fall die Server Applikation das Client Zertifikat über dessen
       Gültigkeit. Diese "Server Seitige" Applikation benötigt lokalen Zugriff auf die "CRL". Als Beispiel: Der Admin fügt dem "Apache"
       Server die Konfiguration "SSLCARevocationPath" hinzu und verweist lokal auf das File "ca.crl.pem". Wenn ein User zB "Bob" auf 
       den "Apache" zugreifft überprüft der "Apache" ob das "Client Zertifikat" von "Bob" in der "CRL" noch gültig ist oder nicht. Ist
       das "Client Zertifikat" nicht mehr gültig verweigert der "Apache" den Zugriff von "Bob".
       
       "Client Seitig"
       Wenn "Client Seitig" eine "CRL" benutzt wird dh. ein "Server Zertifikat" vorhanden ist überprüft die lokale Application zB der 
       Browser das Zertifikat. Diese lokale Applikation benötigt Zugriff auf die "CRL" (URL). Wenn ein Zertifikat signiert wird die 
       den "crlDistributionPoints" beinhaltet, kann dieses "Client Zertifikat" die überprüfung anhand dieses "crlDistributionPoints" 
       zB URL durchführen. 

Das "Online Certificate Status Protocol (OCSP) wurde erstellt als Alternative zur "CRL" (Certication Revocation List). Aehnlich wie bei der "CRL" aktiviert "OCSP" den Antragsteller zB WebBrowser, WebServer usw. zu eruieren ob das Zertifikat noch über seine Gültigkeit verfügt. Wenn eine "Certificate Authority" ein Zertifikat signiert enthält es typischerweise die Adresse des OSCP Servers zB http://ocsp.thebc.ch. Dies kommt der Definiton "crlDistributionPoints" gleich wie Analog der "CRL". Als Beispiel: Wenn einem WebBrowser ein "Server Certificate" überprüft sendet dieser eine Anfrage an den "OCSP" Server (enthalten im Zertifikat). Der "OSCP" Server verarbeitet die Anfrage und Antwortet mit dem Status des Zertifikates resp. "revocation status".

       NOTE Es ist empfohlen "OSCP" zu benutzen anstelle von "CRL" da die Untersützung betreffend "CRL" in einigen Browsern entfernt wurde!

Für "OSCP" muss wiederum dem "Global Configuration File" (/opt/CA/TheBC-CA.conf) wie bei der "CRL" die Konfiguration betreffend zB URL hinzugefügt werden. Dies wird mit der Konfiguration "authorityInfoAccess" durchgeführt im Absatz "[ server_cert ]":

       # vi /opt/CA/TheBC-CA.conf
       
       --------------- /opt/CA/TheBC-CA.conf --------------- 
       
       [ v3_OCSP ] basicConstraints = CA:FALSE
       keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = OCSPSigning
       
       [ server_cert ]
       authorityInfoAccess = OCSP;URI:http://ocsp.thebc.ch:8888
      
       --------------- /opt/CA/TheBC-CA.conf --------------- 

Nun muss ein "OCSP pair" erstellt werden. Der "OSCP" Responder benötigt ein "cyrptographic pair" um den eingehenden Request zu signieren. Dieses "OCSP pair" muss vom gleichen "Certificate Authority (CA) signiert werden sowie muss das gleiche "CA" sein mit dem das Zertifikat signiert wurde anhand dessen eine Uebrprüftung stattfindet zum "OSCP" Server.

       KEY:
       # openssl genpkey -out private/ocsp.thebc.ch.key.pem -algorithm RSA -pkeyopt rsa_keygen_bits:4096
       
       CSR:
       # openssl req -config TheBC-CA.conf -key private/ocsp.thebc.ch.key.pem -new -out csr/ocsp.thebc.ch.csr.pem
       
       SIGN:
       # openssl ca -config TheBC-CA.conf -extensions v3_OCSP -in csr/ocsp.thebc.ch.csr.pem -out certs/ocsp.thebc.ch.cert.pem
       
       CHECK:
       # openssl x509 -noout -text -in certs/ocsp.thebc.ch.cert.pem

Bei diesem "output" wird als Beispiel ungefähr folgendes angezeigt:

	X509v3 Key Usage: critical

	Digital Signature
	X509v3 Extended Key Usage: critical
	OCSP Signing

Der "OpenSSL OSCP Tool" kann als "OSCP" Server eingesetzt werden jedoch ist dieser im Status "Testing". Andere "OSCP" Server existieren sind jedoch "out of scope" in dieser Dokumentation. Um ein Zertifikat zu "revoken" sprich als Ungültig zu erklären kann folgendes Beispiel herangezogen werden:

       1. Erstelle zu Testzwecken ein Server Zertifikat
       2. Starte den "OpenSSL OSCP Server" über Localhost. Anstelle das die "revoke" Liste in einem seperaten "CRL"
          File gespeichert wird liest der "OSCP Server" das File "index.txt" aus. Beantwortet wird die Anfrage auf 
          den "OSCP Server" mit einem "cryptographic par" (benutzt dabei werden die Optionen -rkey und -rsigner):
          
          # openssl ocsp -port 2560 -text -sha256 \
          -index index.txt \
          -CA certs/ca-chain.cert.pem \
          -rkey private/ocsp.thebc.ch.key.pem \
          -rsigner certs/ocsp.thebc.ch.cert.pem \
          -nrequest 1
          
          Ueber ein seperates Terminal/Session sende nun eine Anfrage zum "OSCP Server". Die Option "-cert" definiert
          das Zertifikat für die Ueberprüfung:
          
          # openssl ocsp -CAfile intermediate/certs/ca-chain.cert.pem \
          -url http://localhost:2560 -resp_text \
          -issuer certs/intermediate.cert.pem \
          -cert certs/test.example.com.cert.pem
          
          Der "output" zu Beginn der Anfrage sieht folgendermassen aus:
          
          • ob eine Anfrage erfolgreich erhalten wurde (OCSP Response Status)
          • die Identität des "responder" (Responder Id)
          • der "revoke" Status des Zertifikates für die Ueberprüfung (Cert Status)
          
          OCSP Response Data:
           	OCSP Response Status: successful (0x0)
           	Response Type: Basic OCSP Response
           	Version: 1 (0x0)
           	Responder Id: ... CN = ocsp.example.com
           	Produced At: Apr 11 12:59:51 2015 GMT
           	Responses:
           	Certificate ID:
           	Hash Algorithm: sha1
           	Issuer Name Hash: E35979B6D0A973EBE8AEDED75D8C27D67D2A0334
           	Issuer Key Hash: 69E8EC547F252360E5B6E77261F1D4B921D445E9
           	Serial Number: 1003
           	Cert Status: good
           	This Update: Apr 11 12:59:51 2015 GMT
          
          Nun führe für das Zertifikat einen "revoke" aus:
          
          # openssl ca -config TheBC-CA.conf -revoke certs/<CERT>.cert.pem
          
          Nun führe wiederum in einem seperaten Terminal/Session eine Ueberprüfung durch und diesesmal
          zeigt der "output" des Zertifikat Status "revoke"sowie die "revoke time":
          
          OCSP Response Data:
           	OCSP Response Status: successful (0x0)
           	Response Type: Basic OCSP Response
           	Version: 1 (0x0)
           	Responder Id: ... CN = ocsp.example.com
           	Produced At: Apr 11 13:03:00 2015 GMT
           	Responses:
           	Certificate ID:
           	Hash Algorithm: sha1
           	Issuer Name Hash: E35979B6D0A973EBE8AEDED75D8C27D67D2A0334
           	Issuer Key Hash: 69E8EC547F252360E5B6E77261F1D4B921D445E9
           	Serial Number: 1003
           	Cert Status: revoked
           	Revocation Time: Apr 11 13:01:09 2015 GMT
           	This Update: Apr 11 13:03:00 2015 GMT

Für diese Dokumentation wurden folgenden Referenzen benutzt:

https://jamielinux.com/docs/openssl-certificate-authority/index.htmlhttp://www.phildev.net/ssl/https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.2.pdfhttps://calomel.org/nginx.htmlhttp://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_stapling_responderhttp://itigloo.com/security/generate-an-openssl-certificate-request-with-sha-256-signature/https://www.openssl.org/docs/apps/http://isrlabs.net/wordpress/?p=169Datei:Certificate Authority private.pdf

Root CA Zertifikate

Gibt es eine Möglichkeit "Root CA" Zertifikate manuell aus dem Internet runterzuladen?

Wenn man zB einen Device/Server hat der die Funktion der "Root CA" Zertifikate nicht beinhaltet kommt man unweigerlich zur Frage:

       --> Kann man die Vertrauenswürdigen Stammzertifikate (Root CA) eine IE exportieren umd diese auf einem Device/Server zu importieren

Ein Bull Export bei Firefox sowie Internet Explorer/Windows ist nicht möglich. Was jedoch möglich ist wäre die "Root CA" von Mozilla aus deren Source runterzuladen. Dazu kann unter Linux ein Perl Script benutzt werden. Das Perl Script findet man unter:

       https://raw.githubusercontent.com/bagder/curl/master/lib/mk-ca-bundle.pl

Das Script löst zwei Probleme dh. auf der einen Seite laded diese Script aus dem Mozilla Root CA Tree diese runter jedoch in Clear-Text. Diese Clear-Text File/Informtionen werden als PEM File umkonvertiert und in ein seperates File abgespeichert. Führ dazu folgendes aus:

       # mkdir /root/mk-ca-bundle
       # cp mk-ca-bundle.pl /root/mk-ca-bundle/
       # chmod 700 /root/mk-ca-bundle/mk-ca-bundle.pl
       # /root/mk-ca-bundle/mk-ca-bundle.pl -v -d release -p ALL:ALL
       Warning: Use of this script may pose some risk, -d risk for more details.
       SHA1 of old file: 0
       Downloading 'certdata.txt' ...
       Get certdata over HTTPS with curl!
         % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                        Dload  Upload   Total   Spent    Left  Speed
       100 1674k  100 1674k    0     0   402k      0  0:00:04  0:00:04 --:--:--  809k
       curl: unknown --write-out variable: 'response_code'
       Failed downloading HTTPS with curl, trying HTTP with LWP
       SHA1 of new file: ed3c0bbfb7912bcc00cd2033b0cb85c98d10559c
       Processing  'certdata.txt' ...
       Parsing: Equifax Secure CA
       Parsing: Digital Signature Trust Co. Global CA 1
       Parsing: Digital Signature Trust Co. Global CA 3
       Parsing: Verisign Class 3 Public Primary Certification Authority
       Parsing: Verisign Class 1 Public Primary Certification Authority - G2
       Parsing: Verisign Class 2 Public Primary Certification Authority - G2
       Parsing: Verisign Class 3 Public Primary Certification Authority - G2
       Parsing: GlobalSign Root CA
       Parsing: GlobalSign Root CA - R2
       Parsing: Verisign Class 1 Public Primary Certification Authority - G3
       Parsing: Verisign Class 2 Public Primary Certification Authority - G3
       Parsing: Verisign Class 3 Public Primary Certification Authority - G3
       Parsing: Verisign Class 4 Public Primary Certification Authority - G3
       Parsing: Entrust.net Premium 2048 Secure Server CA
       Parsing: Baltimore CyberTrust Root
       Parsing: Equifax Secure Global eBusiness CA
       Parsing: Equifax Secure eBusiness CA 1
       Parsing: AddTrust Low-Value Services Root
       Parsing: AddTrust External Root
       Parsing: AddTrust Public Services Root
       Parsing: AddTrust Qualified Certificates Root
       Parsing: Entrust Root Certification Authority
       Parsing: RSA Security 2048 v3
       Parsing: GeoTrust Global CA
       Parsing: GeoTrust Global CA 2
       Parsing: GeoTrust Universal CA
       Parsing: GeoTrust Universal CA 2
       Parsing: UTN-USER First-Network Applications
       Parsing: Visa eCommerce Root
       Parsing: Certum Root CA
       Parsing: Comodo AAA Services root
       Parsing: Comodo Secure Services root
       Parsing: Comodo Trusted Services root
       Parsing: QuoVadis Root CA
       Parsing: QuoVadis Root CA 2
       Parsing: QuoVadis Root CA 3
       Parsing: Security Communication Root CA
       Parsing: Sonera Class 1 Root CA
       Parsing: Sonera Class 2 Root CA
       Parsing: Staat der Nederlanden Root CA
       Parsing: UTN DATACorp SGC Root CA
       Parsing: UTN USERFirst Email Root CA
       Parsing: UTN USERFirst Hardware Root CA
       Parsing: UTN USERFirst Object Root CA
       Parsing: Camerfirma Chambers of Commerce Root
       Parsing: Camerfirma Global Chambersign Root
       Parsing: NetLock Qualified (Class QA) Root
       Parsing: NetLock Notary (Class A) Root
       Parsing: NetLock Business (Class B) Root
       Parsing: NetLock Express (Class C) Root
       Parsing: XRamp Global CA Root
       Parsing: Go Daddy Class 2 CA
       Parsing: Starfield Class 2 CA
       Parsing: StartCom Certification Authority
       Parsing: Taiwan GRCA
       Parsing: Swisscom Root CA 1
       Parsing: DigiCert Assured ID Root CA
       Parsing: DigiCert Global Root CA
       Parsing: DigiCert High Assurance EV Root CA
       Parsing: Certplus Class 2 Primary CA
       Parsing: DST Root CA X3
       Parsing: DST ACES CA X6
       Parsing: TURKTRUST Certificate Services Provider Root 1
       Parsing: TURKTRUST Certificate Services Provider Root 2
       Parsing: SwissSign Platinum CA - G2
       Parsing: SwissSign Gold CA - G2
       Parsing: SwissSign Silver CA - G2
       Parsing: GeoTrust Primary Certification Authority
       Parsing: thawte Primary Root CA
       Parsing: VeriSign Class 3 Public Primary Certification Authority - G5
       Parsing: SecureTrust CA
       Parsing: Secure Global CA
       Parsing: COMODO Certification Authority
       Parsing: Network Solutions Certificate Authority
       Parsing: WellsSecure Public Root Certificate Authority
       Parsing: COMODO ECC Certification Authority
       Parsing: MD5 Collisions Forged Rogue CA 25c3
       Parsing: IGC/A
       Parsing: Security Communication EV RootCA1
       Parsing: OISTE WISeKey Global Root GA CA
       Parsing: S-TRUST Authentication and Encryption Root CA 2005 PN
       Parsing: Microsec e-Szigno Root CA
       Parsing: Certigna
       Parsing: AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
       Parsing: TC TrustCenter Class 2 CA II
       Parsing: TC TrustCenter Class 3 CA II
       Parsing: TC TrustCenter Universal CA I
       Parsing: Deutsche Telekom Root CA 2
       Parsing: ComSign CA
       Parsing: ComSign Secured CA
       Parsing: Cybertrust Global Root
       Parsing: ePKI Root Certification Authority
       Parsing: T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
       Parsing: Buypass Class 2 CA 1
       Parsing: Buypass Class 3 CA 1
       Parsing: EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
       Parsing: certSIGN ROOT CA
       Parsing: CNNIC ROOT
       Parsing: ApplicationCA - Japanese Government
       Parsing: GeoTrust Primary Certification Authority - G3
       Parsing: thawte Primary Root CA - G2
       Parsing: thawte Primary Root CA - G3
       Parsing: GeoTrust Primary Certification Authority - G2
       Parsing: VeriSign Universal Root Certification Authority
       Parsing: VeriSign Class 3 Public Primary Certification Authority - G4
       Parsing: NetLock Arany (Class Gold) Főtanúsítvány
       Parsing: Staat der Nederlanden Root CA - G2
       Parsing: CA Disig
       Parsing: Juur-SK
       Parsing: Hongkong Post Root CA 1
       Parsing: SecureSign RootCA11
       Parsing: ACEDICOM Root
       Parsing: Verisign Class 1 Public Primary Certification Authority
       Parsing: Verisign Class 3 Public Primary Certification Authority
       Parsing: Microsec e-Szigno Root CA 2009
       Parsing: GlobalSign Root CA - R3
       Parsing: TC TrustCenter Universal CA III
       Parsing: Autoridad de Certificacion Firmaprofesional CIF A62634068
       Parsing: Izenpe.com
       Parsing: Chambers of Commerce Root - 2008
       Parsing: Global Chambersign Root - 2008
       Parsing: Bogus Mozilla Addons
       Parsing: Bogus Global Trustee
       Parsing: Bogus GMail
       Parsing: Bogus Google
       Parsing: Bogus Skype
       Parsing: Bogus Yahoo 1
       Parsing: Bogus Yahoo 2
       Parsing: Bogus Yahoo 3
       Parsing: Bogus live.com
       Parsing: Go Daddy Root Certificate Authority - G2
       Parsing: Starfield Root Certificate Authority - G2
       Parsing: Starfield Services Root Certificate Authority - G2
       Parsing: AffirmTrust Commercial
       Parsing: AffirmTrust Networking
       Parsing: AffirmTrust Premium
       Parsing: AffirmTrust Premium ECC
       Parsing: Certum Trusted Network CA
       Parsing: Certinomis - Autorité Racine
       Parsing: Root CA Generalitat Valenciana
       Parsing: A-Trust-nQual-03
       Parsing: TWCA Root Certification Authority
       Parsing: Explicitly Distrust DigiNotar Root CA
       Parsing: Explicitly Distrust DigiNotar Services 1024 CA
       Parsing: Explicitly Distrust DigiNotar Cyber CA
       Parsing: Explicitly Distrust DigiNotar Cyber CA 2nd
       Parsing: Explicitly Distrusted DigiNotar PKIoverheid
       Parsing: Explicitly Distrusted DigiNotar PKIoverheid G2
       Parsing: Explicitly Distrusted Malaysian Digicert Sdn. Bhd. (cyb)
       Parsing: Explicitly Distrusted Malaysian Digicert Sdn. Bhd. (en)
       Parsing: Security Communication RootCA2
       Parsing: EC-ACC
       Parsing: Hellenic Academic and Research Institutions RootCA 2011
       Parsing: Actalis Authentication Root CA
       Parsing: Trustis FPS Root CA
       Parsing: StartCom Certification Authority
       Parsing: StartCom Certification Authority G2
       Parsing: Buypass Class 2 Root CA
       Parsing: Buypass Class 3 Root CA
       Parsing: T-TeleSec GlobalRoot Class 3
       Parsing: EE Certification Centre Root CA
       Parsing: TURKTRUST Certificate Services Provider Root 2007
       Parsing: D-TRUST Root Class 3 CA 2 2009
       Parsing: D-TRUST Root Class 3 CA 2 EV 2009
       Parsing: PSCProcert
       Parsing: China Internet Network Information Center EV Certificates Root
       Parsing: Swisscom Root CA 2
       Parsing: Swisscom Root EV CA 2
       Parsing: CA Disig Root R1
       Parsing: CA Disig Root R2
       Parsing: SG TRUST SERVICES RACINE
       Parsing: ACCVRAIZ1
       Parsing: TWCA Global Root CA
       Parsing: TeliaSonera Root CA v1
       Parsing: E-Tugra Certification Authority
       Parsing: T-TeleSec GlobalRoot Class 2
       Parsing: Atos TrustedRoot 2011
       Parsing: QuoVadis Root CA 1 G3
       Parsing: QuoVadis Root CA 2 G3
       Parsing: QuoVadis Root CA 3 G3
       Parsing: DigiCert Assured ID Root G2
       Parsing: DigiCert Assured ID Root G3
       Parsing: DigiCert Global Root G2
       Parsing: DigiCert Global Root G3
       Parsing: DigiCert Trusted Root G4
       Parsing: WoSign
       Parsing: WoSign China
       Parsing: COMODO RSA Certification Authority
       Parsing: USERTrust RSA Certification Authority
       Parsing: USERTrust ECC Certification Authority
       Parsing: GlobalSign ECC Root CA - R4
       Parsing: GlobalSign ECC Root CA - R5
       Parsing: USERTrust-temporary-intermediate-after-1024bit-removal
       Parsing: VeriSign-C3SSA-G2-temporary-intermediate-after-1024bit-removal
       Parsing: Staat der Nederlanden Root CA - G3
       Parsing: Staat der Nederlanden EV Root CA
       Parsing: IdenTrust Commercial Root CA 1
       Parsing: IdenTrust Public Sector Root CA 1
       Parsing: S-TRUST Universal Root CA
       Parsing: Entrust Root Certification Authority - G2
       Parsing: Entrust Root Certification Authority - EC1
       Parsing: CFCA EV ROOT
       Parsing: Explicitly Distrusted MCSHOLDING CA
       Done (203 CA certs processed, 0 skipped).

Durch diesen Vorgang werden zwei Files erstellt dh. eines in Clear-Text und eines im PEM Format:

       # ls -lha
       total 2.0M
       drwxr-xr-x  2 root root 4.0K Aug 14 13:10 .
       drwxr-x--- 36 root root 4.0K Aug 14 13:08 ..
       -rw-r--r--  1 root root 333K Aug 14 13:10 ca-bundle.crt
       -rw-r--r--  1 root root 1.7M Aug 14 13:10 certdata.txt
       -rwx------  1 root root  18K Aug 14 13:10 mk-ca-bundle.pl

Nachfolgend ein Beispiel der Files:

       Datei:Ca-bundle.crt
       Datei:Certdata.txt
       Datei:Mk-ca-bundle.txt

Nun würde man die einzelnen Sektionen zB auf einer FortiGate importieren hätte man die "Root CA" auf einer FortiGate zur Verfügung die normalerweise nicht zur Verfügung steht. Natürlich ist diese im heutigen Zeitpunkt sowie zukünftig ein manueller Vorgang. Wenn dies durchgeführt werden möchte auf einer FortiGate führe folgendes aus:

       Import des Root CA "Equifax Secure CA"
       
       Im File "ca-bundle.crt" ist folgender Abschnitt vorhanden:-
       
       --------------- ca-bundle.crt ---------------
       
       Equifax Secure CA
       =================
       -----BEGIN CERTIFICATE-----
       MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
       ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
       MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
       B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
       nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
       fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
       8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
       A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
       CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
       A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
       spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
       Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
       zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
       BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
       70+sB3c4
       -----END CERTIFICATE-----
       
       --------------- ca-bundle.crt ---------------
       
       Um das entsprechende Zertifikat zu importieren muss der Name entfernt werden dh.
       es darf für die Option "ca" im späteren Kommando nur das effektive Zertifikat
       definiert werden. Dies bedeutet ebenfalls:
       
       würde man im File "ca-bundle.crt" "alle" Zertifikats Namen/Bezeichnungen also 
       "Equifax Secure CA" und die Zeichen "=================" entfernen sowie die 
       Informationen am Anfang des Files könnten man das File über das WebGui unter
       "Certificate CA" direkt auf einmal importieren. Beim Import wird Vorausgesetzt
       das im PEM File ausschliesslich folgende Informationen vorhanden sind:
       
       -----BEGIN CERTIFICATE-----
       MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
       ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
       MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
       B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
       nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
       fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
       8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
       A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
       CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
       A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
       spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
       Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
       zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
       BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
       70+sB3c4
       -----END CERTIFICATE-----
       
       Es dürfen somit kein zusätzliche Informationen vorhanden sein ansonsten wird
       der Import verhindert/abgebrochen! Um nun über Kommandozeile das Zertifikat
       "Equifax Secure CA" auf einer FortiGate zu importieren führen folgendes aus:
       
       # config vpn certificate ca
       # edit "Equifax Secure CA"
       # set ca "-----BEGIN CERTIFICATE-----
       MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
       ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
       MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
       B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
       nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
       fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
       8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
       A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
       CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
       A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
       spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
       Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
       zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
       BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
       70+sB3c4
       -----END CERTIFICATE-----"
       # end
       
       Danach ist das Zertifikat über das WebGui unter folgender Position
       ersichtlich:
       
       Config > System > Certificates
       
       NOTE Wird das Zertifikat eingespielt werden VPN-SSL sowie IPSec Services im
            Hintergrund neu gestartet und bestehende Verbindungen unterbrochen!

Würde man davon ausgehen, dass "alle" Root CA's auf einer FortiGate importiert wurden muss das "Deep Inspection" Profile entsprechend konfiguriert werden:

       # config firewall ssl-ssh-profile
       # edit [Name des entsprechenden Profiles]
       # config https
       # set allow-invalid-server-cert disable
       # set ssl-ca-list enable
       # end
       # end

Nun wird jedes Zertifikat betreffend "Root CA" überprüft. Bedenke: Diese Liste benötigt "maitenance" dh. "Root CA" werden immer wieder auf den neusten Stand gebracht dh. dieser Vorgang ist auf einer FortiGate Manuell durchzuführen.

TSL Version

TLS Version 1.3

Das kurz vor der Verabschiedung stehende Verschlüsselungsprotokoll TLS 1.3 könnte sich als grosser Wurf erweisen. Denn anders als bei den Vorgängerversionen, deren Einführung sich über viele Jahre hinzog, bringt eine möglichst schnell Umstellung konkrete Vorteile in Bezug auf Sicherheit und Performance. Das nachfolgende Dokumente geht auf diese Vorteile und Sicherheits-Aspekte ein:

       Datei:Weniger-ist-mehr-TLS-1.3.pdf