Administrateur Linux - Créer des certificats SSL

Contexte TLS et SSL

TLS est le nouveau standard pour la sécurité de la couche socket, en procédant SSL. TLS offre de meilleures normes de cryptage avec d'autres fonctionnalités de sécurité et d'encapsulation de protocole faisant progresser SSL. Souvent, les termes TLS et SSL sont utilisés de manière interchangeable. Cependant, en tant qu'administrateur CentOS professionnel, il est important de noter les différences et l'historique qui les séparent.

SSL passe à la version 3.0. SSL a été développé et promu en tant que norme de l'industrie sous Netscape. Après l'achat de Netscape par AOL (un FAI populaire dans les années 90, autrement connu sous le nom d'America Online), AOL n'a jamais vraiment promu le changement nécessaire pour améliorer la sécurité de SSL.

À la version 3.1, la technologie SSL est passée aux normes des systèmes ouverts et a été remplacée par TLS . Étant donné que les droits d'auteur sur SSL appartenaient toujours à AOL, un nouveau terme a été inventé:TLS - Transport Layer Security. Il est donc important de reconnaître que TLS est en fait différent de SSL . D'autant plus que les anciennes technologies SSL ont connu des problèmes de sécurité et que certaines sont aujourd'hui considérées comme obsolètes.

Note- Ce tutoriel utilisera le terme TLS pour parler des technologies 3.1 et supérieures. Puis SSL lors des commentaires spécifiques aux technologies SSL 3.0 et inférieurs.

Gestion des versions SSL et TLS

Le tableau suivant montre comment les versions TLS et SSL seraient liées les unes aux autres. J'ai entendu quelques personnes parler de la version 3.2 de SSL . Cependant, ils ont probablement obtenu la terminologie en lisant un blog. En tant qu'administrateur professionnel, nous voulons toujours utiliser la terminologie standard. Par conséquent, tout en parlant SSL devrait être une référence aux technologies passées. Des choses simples peuvent faire passer un demandeur d'emploi CentOS à un CS Major chevronné.

TLS SSL
- 3.0
1.0 3.1
1.1 3.2
1.2 3,3

TLS remplit aujourd'hui deux fonctions principales importantes pour les utilisateurs d'Internet: Premièrement, il vérifie qui est une partie, connue sous le nom deauthentication. Deux, il offreend-to-end encryption au niveau de la couche de transport pour les protocoles de niveau supérieur qui ne disposent pas de cette fonctionnalité native (ftp, http, protocoles de messagerie, etc.).

Le premier, vérifie qui est une partie et est important pour la sécurité en tant que cryptage de bout en bout. Si un consommateur dispose d'une connexion cryptée à un site Web qui n'est pas autorisé à accepter le paiement, les données financières sont toujours en danger. Voici ce que tous les sites de phishing n'auront pas:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.

Il n'y a que deux méthodes pour contourner le fait de ne pas avoir de certificat correctement signé: inciter l'utilisateur à autoriser la confiance d'un navigateur Web pour un certificat auto-signé ou espérer que l'utilisateur n'est pas averti en technologie et ne saura pas l'importance d'un certificat de confiance Autorité (ou CA).

Dans ce didacticiel, nous utiliserons ce que l'on appelle un certificat auto-signé . Cela signifie que, sans donner explicitement à ce certificat le statut de confiance dans chaque navigateur Web visitant le site Web, une erreur sera affichée décourageant les utilisateurs de visiter le site. Ensuite, cela fera sauter l'utilisateur à travers quelques actions avant d'accéder à un site avec un certificat auto-signé. N'oubliez pas que pour des raisons de sécurité, c'est une bonne chose.

Installer et configurer openssl

openssl est la norme pour les implémentations open-source de TLS. openssl est utilisé sur des systèmes tels que Linux, les distributions BSD, OS X et prend même en charge Windows.

openssl est important, car il fournit la sécurité de la couche de transport et fait abstraction de la programmation détaillée de l' authentification et du chiffrement de bout en bout pour un développeur. C'est pourquoi openssl est utilisé avec presque toutes les applications open source utilisant TLS. Il est également installé par défaut sur toutes les versions modernes de Linux.

Par défaut, openssl doit être installé sur CentOS à partir d'au moins la version 5. Juste pour être sûr, essayons d'installer openssl via YUM. Lancez simplement install, car YUM est suffisamment intelligent pour nous indiquer si un package est déjà installé. Si nous exécutons une ancienne version de CentOS pour des raisons de compatibilité, faire une installation yum -y garantira qu'openssl est mis à jour contre la vulnérabilité semi-récente heart-bleed.

Lors de l'exécution du programme d'installation, il a été constaté qu'il y avait en fait une mise à jour de openssl .

[[email protected]]# 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:

Créer un certificat auto-signé pour OpenLDAP

Ceci est une méthode pour créer un auto-signé pour notre précédente installation OpenLDAP .

Pour créer un certificat OpenLDAP auto-signé.

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

[[email protected]]# 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]
[[email protected]]#

Maintenant, nos certificats OpenLDAP doivent être placés dans / etc / openldap / certs /

[[email protected]]# ls /etc/openldap/certs/*.pem 
/etc/openldap/certs/vmnetcert.pem  /etc/openldap/certs/vmnetkey.pem
[[email protected]]#

Comme vous pouvez le voir, le certificat et la clé sont installés dans les répertoires / etc / openldap / certs / . Enfin, nous devons modifier les autorisations de chacun, car ils appartiennent actuellement à l'utilisateur root.

[[email protected]]# chown -R  ldap:ldap /etc/openldap/certs/*.pem
[[email protected]]# 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
[[email protected]]#

Créer un certificat auto-signé pour le serveur Web Apache

Dans ce tutoriel, nous supposerons qu'Apache est déjà installé. Nous avons installé Apache dans un autre tutoriel (configuration du pare-feu CentOS) et nous allons passer à l'installation avancée d'Apache pour un prochain tutoriel. Donc, si vous n'avez pas déjà installé Apache, veuillez suivre.

Une fois Apache HTTPd peut être installé en suivant les étapes suivantes -

Step 1 - Installez mod_ssl pour le serveur Apache httpd.

Nous devons d'abord configurer Apache avec mod_ssl. En utilisant le gestionnaire de paquets YUM, c'est assez simple -

[[email protected]]# yum -y install mod_ssl

Rechargez ensuite votre démon Apache pour vous assurer qu'Apache utilise la nouvelle configuration.

[[email protected]]# systemctl reload httpd

À ce stade, Apache est configuré pour prendre en charge les connexions TLS sur l'hôte local.

Step 2 - Créez le certificat SSL auto-signé.

Commençons par configurer notre répertoire de clés TLS privé.

[[email protected]]# mkdir /etc/ssl/private 
[[email protected]]# chmod 700 /etc/ssl/private/

Note- Assurez-vous que seul le root a un accès en lecture / écriture à ce répertoire. Avec l'accès mondial en lecture / écriture, votre clé privée peut être utilisée pour décrypter le trafic reniflé.

Génération du certificat et des fichiers clés.

[[email protected]]# 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 []:

[[email protected]]#

Note - Vous pouvez utiliser l'adresse IP publique du serveur si vous n'avez pas de nom de domaine enregistré.

Jetons un œil à notre certificat -

[[email protected]]# 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:

Voici une explication pour chaque option que nous avons utilisée avec la commande openssl -

Commander action
req -X509 Utilisez la norme PKI de gestion X.509 CSR pour la gestion des clés.
-nœuds Ne sécurisez pas notre certificat avec une phrase secrète. Apache doit pouvoir utiliser le certificat sans interruption d'une phrase secrète.
-jours 2555 Indique la validité du certificat à 7 ans ou 2555 jours. La période de temps peut être ajustée au besoin.
-nouveau clé rsa: 2048 Spécifié pour générer à la fois la clé et le certificat en utilisant RSA à une longueur de 2048 bits.

Ensuite, nous voulons créer un groupe Diffie-Heliman pour la négociation de PFS avec les clients.

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

Cela prendra de 5 à 15 minutes.

Perfect Forward Secrecy- Utilisé pour sécuriser les données de session au cas où la clé privée a été compromise. Cela générera une clé utilisée entre le client et le serveur qui est unique pour chaque session.

Maintenant, ajoutez la configuration Perfect Forward Secrecy à notre certificat.

[[email protected]]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt

Configurer Apache pour utiliser les fichiers de clé et de certificat

Nous apporterons des modifications à /etc/httpd/conf.d/ssl.conf -

Nous apporterons les modifications suivantes à ssl.conf . Cependant, avant de faire cela, nous devons sauvegarder le fichier d'origine. Lorsque vous apportez des modifications à un serveur de production dans un éditeur de texte avancé tel que vi ou emcas , il est recommandé de toujours sauvegarder les fichiers de configuration avant d'effectuer des modifications.

[[email protected]]# cp /etc/httpd/conf.d/ssl.conf ~/

Continuons maintenant nos modifications après avoir copié une copie de travail connue de ssl.conf à la racine de notre dossier personnel.

  • Locate
  • Modifiez à la fois DocumentRoot et ServerName comme suit.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443

DocumentRootc'est le chemin vers votre répertoire apache par défaut. Dans ce dossier devrait être une page par défaut qui affichera une requête HTTP demandant la page par défaut de votre serveur Web ou site.

ServerNameest le nom du serveur qui peut être une adresse IP ou le nom d'hôte du serveur. Pour TLS, il est recommandé de créer un certificat avec un nom d'hôte. À partir de notre didacticiel OpenLdap, nous avons créé un nom d'hôte centos sur le domaine d'entreprise local: vmnet.local

Nous voulons maintenant commenter les lignes suivantes.

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

Ensuite, indiquez à Apache où trouver notre certificat et notre paire de clés privée / publique.

Spécifiez le chemin d'accès à notre fichier de certificat auto-signé

#   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

Enfin, nous devons autoriser les connexions entrantes vers https via le port 443.