Certificat SSL/TLS serveur

Résolu/Fermé
Lynow - 1 févr. 2022 à 14:23
 Lynow - 2 févr. 2022 à 16:32
Bonjour,

J'ai développé différents outils sur des VMs, outils qui sont des services auxquels je peux accéder via un client internet au réseau.

J'aimerais créer des certificats auto-signés, afin de sécuriser les informations échangées entre serveur et client dans mon réseau local (serveur promox).

J'ai regardé sur internet, j'ai vu comment générer des certificats mais je n'ai pas compris appliqué ces certificats à chaque VMs, et donc serveurs ... Je débute un peu.

Si quelqu'un a une explication ou un lien pouvant m'aider, je le remercie.
A voir également:

1 réponse

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 502
Modifié le 1 févr. 2022 à 14:49
Bonjour,

Le certificat ne se configure pas au niveau du serveur pour protéger l'ensemble des services, mais individuellement sur chaque application que tu souhaites protéger.

Si le serveur dispose d'un service HTTP (Apache, Nginx, ...), c'est donc dans la configuration de ce logiciel qu'il faut activer TLS et préciser le chemin vers le certificat et la clé privée.

Si le serveur offre d'autres services (comme FTP, IMAP, ...), il faut alors recommencer la configuration pour chacun de ces services.

La documentation de chacune de ces applications devrait détailler la configuration TLS. Pour qu'on puisse t'aider davantage, sois plus spécifique (quels logiciels ? quelles erreurs ?).

Je redirigerai la question vers le bon forum car elle ne semble pas concerner les réseaux.
brupala Messages postés 109866 Date d'inscription lundi 16 juillet 2001 Statut Membre Dernière intervention 16 juillet 2024 13 684
1 févr. 2022 à 15:11
Salut,
Je redirigerai la question vers le bon forum car elle ne semble pas concerner les réseaux.

Tout à fait, c'est plutôt du webmastering, si ce sont des serveurs web.
0
Merci pour ta réponse.

J'ai développé une architecture dit de "Cyber Threat Intelligence", cela regroupe les outils comme MISP, TheHive, Cortex, Wazuh etc.

J'ai donc pour chaque outils, un conteneur ou une VM dédiés.

Ensuite, j'accède aux interfaces WEB de mes outils via des VMs clientes, dans le réseau local.

Tout ces outils resteront dans ce réseau local, c'est pour cela que les certificats auto-signés me paraissent suffisants.

En effet, j'ai trouvé quelques documentations tels que pour TheHive le lien suivant : http://docs.thehive-project.org/thehive/installation-and-configuration/configuration/ssl/

Cependant je voulais éclaircir les choses ...

Après avoir regardé sur internet, j'ai pu voir cela :

Créer une clé privée de 4096 bit encrypté avec AES 256 bit :

openssl genrsa -aes256 -out certificat.key 4096


Ensuite génération du certificat déverrouillé :

openssl rsa -in certificat.key.lock -out certificat.key


A ce moment, j'ai donc une clé privée déverrouillée et une clé privée verrouillée.

Ensuite on créé un fichier de demande de signature : (Je ne sais pas trop pourquoi)

openssl req -new -key certificat.key.lock -out certificat.csr


Et pour auto-signer mon certificat :

openssl x509 -req -days 365 -in certificat.csr -signkey certificat.key.lock -out certificat.crt


Une fois cela fait, je dois indiquer à chaque application, comme par exemple Apache, d’utiliser le certificat SSL, c'est cela ?
Cette manipulation doit être effectuée sur chaque machine (CT, VM) ?

PS : je m'excuse pour avoir choisi le mauvais forum
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 502 > Lynow
1 févr. 2022 à 15:57
Je n'ai pas vérifié tes commandes, je suppose qu'elles fonctionnent. Si ce n'est pas le cas, il existe plusieurs tutoriels pour la génération de certificats x509 avec openssl.

Toutefois, puisque tu as l'intention d'émettre toi-même plusieurs certificats (plusieurs machines, plusieurs noms à protéger), je pense qu'il est préférable de mettre en place une PKI/CA plutôt que de générer des certificats un à un et devoir les accepter un à un en exception. De cette manière, il suffit d'ajouter le certificat de la CA sur une machine afin qu'elle accepte tous les certificats signés par cette CA.

> Une fois cela fait, je dois indiquer à chaque application, comme par exemple Apache, d’utiliser le certificat SSL, c'est cela ?

En effet, pour chaque nom que tu souhaites protéger par HTTPS, il faut que le serveur correspondant soit configuré avec un certificat qui couvre ce nom (attribut CN).

> Cette manipulation doit être effectuée sur chaque machine (CT, VM) ?

Je recommande plutôt de dédier une machine/container pour la création des certificats. Il est tout à fait possible de créer les certificats sur une machine et de les transférer vers la machine adéquate. En fait, si tu crées ta propre CA (autorité de certification), il devient même évident que la clé privé de la CA doit rester inaccessible aux autres machines.

Il y a plusieurs façons de procéder, mais le plus simple est de générer un certificat par nom que tu souhaites protéger (attribut CN). Si plusieurs machines hébergent le même nom (par exemple avec un load balancer), il vaut mieux créer un certificat par machine, plutôt que de distribuer le même certificat sur ces machines. Ainsi, si une machine est compromise, tu peux révoquer le certificat de cette machine sans impacter les autres.
Il est aussi possible d'utiliser l'extension SAN (Subject Alternative Name) mais je m'en sers uniquement dans le cas d'un domaine + un wildcard sur tous ses sous-domaines. Si par exemple mon serveur #1 gère plusieurs services, je vais générer un seul certificat avec CN=server1.example.com et en SAN je mets *.server1.example.com. De cette manière, cette machine dispose d'un seul certificat qui gère monapp.server1.example.com, autreapp.server1.example.com, etc.

> PS : je m'excuse pour avoir choisi le mauvais forum

Pas de soucis, les questions concernant les serveurs surfent un peu sur plusieurs forums à la fois (Linux, webmastering, réseau, ...).
0
Lynow > avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024
1 févr. 2022 à 17:13
Merci pour ta réponse claire et précise.

En effet, l'idée de créé une machine dédiée pour la création de certificats me convient très bien.

J'ai juste quelques dernières questions : lorsque j'ai effectué les commandes ci-dessus, j'ai effectivement dû donner un attribut CN. Cependant, je n'ai pas de nom de domaine, le serveur auquel je me connecte via le client est par exemple http://192.168.x.x:port. Je n'ai pas de nom dédié, cela pose problème ?

Si je prend l'exemple de Cortex, un service que je start sur un CT d'adresse hôte 192.168.x.x.
Je dois configurer son fichier .conf, soit les lignes suivantes :

  ## Authentication configuration
#username = ""
#password = ""

## SSL configuration
#keyStore {
# path = "/path/to/keystore"
# type = "JKS" # or PKCS12
# password = "keystore-password"
#}
#trustStore {
# path = "/path/to/trustStore"
# type = "JKS" # or PKCS12
# password = "trustStore-password"
#}


Si je comprend bien, je dois indiquer le chemin du certificat, le mot de passe etc.

Avant d'avoir fait cela, j'ai généré via les commandes ci-dessus un certificat dédié au CN cortex, mais c'est ici que j'ai un doute.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 502 > Lynow
1 févr. 2022 à 22:38
Dans le cas de HTTPS, la RFC 2818 impose que si l'URL est une adresse IP, alors le certificat doit contenir cette IP dans son champ "Subject Alternative Name". En "Common Name", tu peux donc mettre autre-chose, par exemple le nom du service.

> In some cases, the URI is specified as an IP address rather than a
> hostname. In this case, the iPAddress subjectAltName must be present
> in the certificate and must exactly match the IP in the URI.
> — https://www.rfc-editor.org/rfc/rfc2818#section-3.1

Pour générer des certificats avec un SAN :
https://medium.com/@antelle/how-to-generate-a-self-signed-ssl-certificate-for-an-ip-address-f0dd8dddf754

Je ne connais pas le logiciel Cortex mais la configuration que tu montres semble concerner un mécanisme d'authentification (sûrement basé sur TLS) entre plusieurs nodes/applications, cela ne concerne apparemment pas la configuration du serveur HTTP(S).
La documentation indique que Cortex doit être rendu accessible derrière un proxy (comme Nginx) et c'est le proxy qui prend en charge la connexion HTTPS/TLS entre le visiteur et le proxy.
https://github.com/TheHive-Project/CortexDocs/blob/master/admin/admin-guide.md#https
0