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 .
[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:
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
[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]#
Maintenant, nos certificats OpenLDAP doivent être placés dans / etc / openldap / certs /
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
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.
[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]#
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 -
[root@centos]# yum -y install mod_ssl
Rechargez ensuite votre démon Apache pour vous assurer qu'Apache utilise la nouvelle configuration.
[root@centos]# 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é.
[root@centos]# mkdir /etc/ssl/private
[root@centos]# 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.
[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 - Vous pouvez utiliser l'adresse IP publique du serveur si vous n'avez pas de nom de domaine enregistré.
Jetons un œil à notre certificat -
[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:
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.
[root@centos]# 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.
[root@centos]# 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.