Linux Admin - Erstellen Sie SSL-Zertifikate

TLS- und SSL-Hintergrund

TLS ist der neue Standard für die Sicherheit der Socket-Schicht, bei dem SSL angewendet wird. TLS bietet bessere Verschlüsselungsstandards mit anderen Sicherheits- und Protokoll-Wrapper-Funktionen, die SSL weiterentwickeln. Oft werden die Begriffe TLS und SSL synonym verwendet. Als professioneller CentOS-Administrator ist es jedoch wichtig, die Unterschiede und den Verlauf zu beachten, die die einzelnen Bereiche voneinander trennen.

SSL geht auf Version 3.0. SSL wurde unter Netscape als Industriestandard entwickelt und beworben. Nachdem Netscape von AOL (einem in den 90er Jahren beliebten ISP, auch bekannt als America Online) gekauft wurde, hat AOL die für Sicherheitsverbesserungen von SSL erforderliche Änderung nie wirklich beworben.

In Version 3.1 wurde die SSL- Technologie in die Standards für offene Systeme übernommen und in TLS geändert . Da die Urheberrechte an SSL noch im Besitz von AOL waren, wurde ein neuer Begriff geprägt:TLS - Transport Layer Security. Daher ist es wichtig zu erkennen, dass sich TLS tatsächlich von SSL unterscheidet . Insbesondere, da ältere SSL- Technologien Sicherheitsprobleme kennen und einige heute als veraltet gelten.

Note- In diesem Tutorial wird der Begriff TLS verwendet, wenn von Technologien 3.1 und höher gesprochen wird. Dann SSL beim Kommentieren spezifisch für SSL-Technologien 3.0 und niedriger.

SSL vs TLS Versionierung

Die folgende Tabelle zeigt, wie sich die TLS- und SSL-Versionierung aufeinander beziehen würden. Ich habe einige Leute über SSL Version 3.2 sprechen hören . Wahrscheinlich haben sie die Terminologie jedoch durch das Lesen eines Blogs erhalten. Als professioneller Administrator möchten wir immer die Standardterminologie verwenden. Während des Sprechens sollte SSL daher ein Hinweis auf frühere Technologien sein. Einfache Dinge können einen CentOS-Arbeitssuchenden wie einen erfahrenen CS-Major aussehen lassen.

TLS SSL
- - 3.0
1.0 3.1
1.1 3.2
1.2 3.3

TLS führt zwei Hauptfunktionen aus, die für die Benutzer des Internets heute wichtig sind: Zum einen wird überprüft, wer eine Partei istauthentication. Zweitens bietet esend-to-end encryption auf der Transportschicht für Protokolle der oberen Ebene, denen diese native Funktion fehlt (FTP, http, E-Mail-Protokolle und mehr).

Die erste überprüft, wer eine Partei ist und ist für die Sicherheit als End-to-End-Verschlüsselung wichtig. Wenn ein Verbraucher eine verschlüsselte Verbindung zu einer Website hat, die nicht zur Zahlung berechtigt ist, sind Finanzdaten weiterhin gefährdet. Dies ist, was jede Phishing-Site nicht haben wird:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.

Es gibt nur zwei Methoden, um zu umgehen, dass kein ordnungsgemäß signiertes Zertifikat vorhanden ist: Trick den Benutzer dazu, das Vertrauen eines Webbrowsers in ein selbstsigniertes Zertifikat zuzulassen, oder hoffe, dass der Benutzer nicht technisch versiert ist und die Bedeutung eines vertrauenswürdigen Zertifikats nicht kennt Behörde (oder eine Zertifizierungsstelle).

In diesem Tutorial verwenden wir ein sogenanntes selbstsigniertes Zertifikat. Dies bedeutet, dass ohne explizite Angabe des Status "Vertrauenswürdig" in jedem Webbrowser, der die Website besucht, ein Fehler angezeigt wird, der die Benutzer vom Besuch der Website abhält. Anschließend springt der Benutzer durch einige Aktionen, bevor er auf eine Site mit einem selbstsignierten Zertifikat zugreift. Denken Sie aus Sicherheitsgründen daran, dass dies eine gute Sache ist.

Installieren und Konfigurieren von openssl

openssl ist der Standard für Open-Source-Implementierungen von TLS. openssl wird auf Systemen wie Linux, BSD-Distributionen, OS X verwendet und unterstützt sogar Windows.

openssl ist wichtig, da es die Sicherheit der Transportschicht bietet und die detaillierte Programmierung der Authentifizierung und End-to-End-Verschlüsselung für einen Entwickler abstrahiert . Aus diesem Grund wird openssl mit fast jeder Open-Source-Anwendung verwendet, die TLS verwendet. Es wird auch standardmäßig auf jeder modernen Linux-Version installiert.

Standardmäßig OpenSSL sollte auf CentOS ab Version mindestens installiert 5 ab. Um dies zu gewährleisten, versuchen wir, openssl über YUM zu installieren . Führen Sie einfach install aus, da YUM intelligent genug ist, um uns mitzuteilen, ob ein Paket bereits installiert ist. Wenn wir aus Kompatibilitätsgründen eine ältere Version von CentOS ausführen, wird durch eine yum-y-Installation sichergestellt, dass openssl gegen die kürzlich aufgetretene Sicherheitsanfälligkeit durch Herzblutungen aktualisiert wird.

Beim Ausführen des Installationsprogramms wurde festgestellt, dass tatsächlich ein Update für openssl vorliegt .

[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for 
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution 
Dependencies Resolved

===============================================================================
=============================================================================== 
 Package                               Arch
 Version                            Repository                        Size 
=============================================================================== 
=============================================================================== 
Updating: 
openssl                               x86_64                          
1:1.0.1e-60.el7_3.1                 updates                           713 k
Updating for dependencies:

Erstellen Sie ein selbstsigniertes Zertifikat für OpenLDAP

Dies ist eine Methode zum Erstellen eines selbstsignierten Objekts für unsere vorherige OpenLDAP- Installation.

So erstellen Sie ein selbstsigniertes OpenLDAP-Zertifikat

openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365

[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem 
-keyout /etc/openldap/certs/vmnet.pem -days 365 
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#

Jetzt sollten unsere OpenLDAP-Zertifikate in / etc / openldap / certs / abgelegt werden.

[root@centos]# ls /etc/openldap/certs/*.pem 
/etc/openldap/certs/vmnetcert.pem  /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Wie Sie sehen können, haben wir sowohl das Zertifikat als auch den Schlüssel in den Verzeichnissen / etc / openldap / certs / installiert . Schließlich müssen wir die Berechtigungen für jede ändern, da sie derzeit dem Root-Benutzer gehören.

[root@centos]# chown -R  ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem 
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Erstellen Sie ein selbstsigniertes Zertifikat für den Apache-Webserver

In diesem Tutorial wird davon ausgegangen, dass Apache bereits installiert ist. Wir haben Apache in einem anderen Tutorial (Konfigurieren der CentOS-Firewall) installiert und werden für ein zukünftiges Tutorial mit der erweiterten Installation von Apache beginnen. Wenn Sie Apache noch nicht installiert haben, folgen Sie bitte den Anweisungen.

Sobald Apache HTTPd mithilfe der folgenden Schritte installiert werden kann:

Step 1 - Installieren Sie mod_ssl für den Apache httpd Server.

Zuerst müssen wir Apache mit mod_ssl konfigurieren. Mit dem YUM-Paketmanager ist dies ziemlich einfach -

[root@centos]# yum -y install mod_ssl

Laden Sie dann Ihren Apache-Daemon neu, um sicherzustellen, dass Apache die neue Konfiguration verwendet.

[root@centos]# systemctl reload httpd

Zu diesem Zeitpunkt ist Apache so konfiguriert, dass TLS-Verbindungen auf dem lokalen Host unterstützt werden.

Step 2 - Erstellen Sie das selbstsignierte SSL-Zertifikat.

Lassen Sie uns zunächst unser privates TLS-Schlüsselverzeichnis konfigurieren.

[root@centos]# mkdir /etc/ssl/private 
[root@centos]# chmod 700 /etc/ssl/private/

Note- Stellen Sie sicher, dass nur der Stamm Lese- / Schreibzugriff auf dieses Verzeichnis hat. Mit dem weltweiten Lese- / Schreibzugriff kann Ihr privater Schlüssel zum Entschlüsseln von abgehörtem Datenverkehr verwendet werden.

Generieren der Zertifikat- und Schlüsseldateien.

[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt 
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:

[root@centos]#

Note - Sie können die öffentliche IP-Adresse des Servers verwenden, wenn Sie keinen registrierten Domainnamen haben.

Werfen wir einen Blick auf unser Zertifikat -

[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
   Data:
      Version: 3 (0x2)
      Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
   Signature Algorithm: sha256WithRSAEncryption
   Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Validity
      Not Before: Feb 24 07:07:55 2017 GMT
      Not After : Feb 24 07:07:55 2018 GMT
   Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
         Public-Key: (2048 bit)
            Modulus:
               00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
               f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
               57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
               47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
               66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
               31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
               9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
               79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
               e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
               ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
               ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
               e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42: 
               7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
               5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
               c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
               6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
               12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:

Hier ist eine Erklärung für jede Option, die wir mit dem Befehl openssl verwendet haben -

Befehl Aktion
req -X509 Verwenden Sie den PKI-Verwaltungsstandard X.509 für die Schlüsselverwaltung.
-Knoten Sichern Sie unser Zertifikat nicht mit einer Passphrase. Apache muss das Zertifikat ohne Unterbrechung einer Passphrase verwenden können.
-Tage 2555 Zeigt die Gültigkeit des Zertifikats auf 7 Jahre oder 2555 Tage an. Der Zeitraum kann nach Bedarf angepasst werden.
-newkey rsa: 2048 Angegeben, um sowohl Schlüssel als auch Zertifikat mithilfe von RSA mit einer Länge von 2048 Bit zu generieren.

Als Nächstes möchten wir eine Diffie-Heliman-Gruppe für die Aushandlung von PFS mit Clients erstellen.

[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Dies dauert 5 bis 15 Minuten.

Perfect Forward Secrecy- Wird zum Sichern von Sitzungsdaten verwendet, falls der private Schlüssel kompromittiert wurde. Dadurch wird ein Schlüssel generiert, der zwischen dem Client und dem Server verwendet wird und für jede Sitzung eindeutig ist.

Fügen Sie nun die Perfect Forward Secrecy-Konfiguration zu unserem Zertifikat hinzu.

[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt

Konfigurieren Sie Apache für die Verwendung von Schlüssel- und Zertifikatdateien

Wir werden Änderungen an /etc/httpd/conf.d/ssl.conf vornehmen -

Wir werden die folgenden Änderungen an ssl.conf vornehmen . Bevor wir dies tun, sollten wir jedoch die Originaldatei sichern. Wenn Sie Änderungen an einem Produktionsserver in einem erweiterten Texteditor wie vi oder emcas vornehmen , empfiehlt es sich, vor dem Bearbeiten immer Konfigurationsdateien zu sichern.

[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/

Lassen Sie uns nun unsere Änderungen fortsetzen, nachdem wir eine bekannte Kopie von ssl.conf in das Stammverzeichnis unseres Home-Ordners kopiert haben.

  • Locate
  • Bearbeiten Sie sowohl DocumentRoot als auch ServerName wie folgt.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443

DocumentRootDies ist der Pfad zu Ihrem Standard-Apache-Verzeichnis. In diesem Ordner sollte sich eine Standardseite befinden, auf der eine HTTP-Anforderung angezeigt wird, in der nach der Standardseite Ihres Webservers oder Ihrer Website gefragt wird.

ServerNameist der Servername, der entweder eine IP-Adresse oder der Hostname des Servers sein kann. Für TLS empfiehlt es sich, ein Zertifikat mit einem Hostnamen zu erstellen. In unserem OpenLdap-Lernprogramm haben wir einen Hostnamen von centos in der lokalen Unternehmensdomäne erstellt: vmnet.local

Nun wollen wir die folgenden Zeilen kommentieren.

SSLProtocol

#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
 ~~~~> #SSLProtocol all -SSLv2
 
#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
 ~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

Dann teilen Sie Apache mit, wo sich unser Paar aus Zertifikat und privatem / öffentlichem Schlüssel befindet.

Geben Sie den Pfad zu unserer selbstsignierten Zertifikatdatei an

#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key

Schließlich müssen wir eingehende Verbindungen zu https über Port 443 zulassen .