Glasnost

Notes sur la certification de services Internet

Lorsque l'on certifie plusieurs services Internet, un problème arrive souvent, celui de la gestion de ces certificats et de la négociation SSL.

Certification de serveur

Un service est fourni par un serveur. Nous parlons ici de serveur logiciel (apache est un serveur http par exemple).

La certification est le lien entre une identité et une clé privée. L'appellation commune d'une personne se retrouve dans les certificats X509 dans le champs CN (Common Name, nom commun). Pour un serveur, de la même manière, son appellation commune est son nom (www.entrouvert.org par exemple).

Ainsi, un serveur certifié peut avoir pour nom commun son nom Internet, c'est l'usage le plus courant.

Spécificité virtuelle

Un serveur logiciel n'est pas un être humain, il peut avoir le pouvoir de se dupliquer à l'infini et de répondre à autant d'appellation qu'on le désire.

Par exemple, un même serveur peut répondre à l'appellation www.entrouvert.org et glasnost.entrouvert.org.

Il deviendra incohérent pour un client demandant à glasnost.entrouvert.org de lui servir une page que se dernier lui certifie son identité avec le certificat de www.entrouvert.org.

Utiliser l'appellation commune d'un certificat pour certifier l'identité d'un serveur ne prend pas en compte le fait qu'un même serveur peut avoir plusieurs identité.

Comment ensuite entamer une connexion sécurisée avec un serveur qui prouve son identité de manière assez peu pertinente ?

Spécifité du protocole sécurisé (SSL/TLS)

Le protocole SSL/TLS encapsule toutes les informations même celles initiant la connexion. Une connexion est un lien entre deux adresses IP sur deux ports différents. Le nom utilisé pour accéder à l'adresse du serveur fait aussi parti de la négociation de connexion.

Hors si un serveur dispose de plusieurs noms, avant de savoir lequel est appelé, encore faudrait-il qu'il le sache. La seule manière de le savoir est d'entamer la connexion SSL/TLS afin d'obtenir ces informations supplémentaire.

Mais entamer une connexion TLS/SSL nécessite de présenter un certificat, mais lequel ? Celui du serveur.

Si le CN du certificat du serveur ne correspond pas à l'appelation utilisée pour y accéder, le logiciel demande une confirmation à l'utilisateur ou peut même refuser la connexion.

Utiliser l'appellation commune d'un certificat pour certifier l'identité d'un serveur peut obliger l'utilisateur à certifier lui-même le serveur.

Solutions

Certification

Il est possible de modifier sa pratique en matière de certification afin de produire des certificats sur plusieurs identités.

Bidouille

Les jokers sont souvent accepté par les logiciels, ainsi, un certificat certifiant un serveur comme étant appellé communément par *.entrouvert.org, permettra la certification de tous les serveurs www.entrouvert.org, glasnost.entrouvert.org, etc…

Pourtant, ce certificat ne permettra pas de certifier un site comme www.entrouvert.com.

Noms alternatifs du sujet

Il s'agit d'une extension du jeu d'extensions version 3 des certificats X509 v3.

Cette extension permet de nommer l'entité certifié par des noms de domaine.

Il est alors possible de certifier un serveur comme répondant à de multiples identité Internet, et ayant une appellation commune autre qu'une de ses identité Internet.

Par exemple, une appellation commune d'un serveur HTTP pourrait être "Serveur web Entr'ouvert" et ses appellations alternatives "www.entrouvert.org", "www.entrouvert.com", "glasnost.entrouvert.org", etc…

Ces informations étant assez importantes pour l'utilité du certificat, il serait bon de marquer l'interprétation de cette extension comme critique.

Ces extensions étant relativement récentes (avril 2002), certains logiciels ne les supporte pas encore.

Connexion

Une autre solution utilisée (par certains serveur SMTP par exemples) est d'initier la connexion en clair, puis une fois que le serveur sait à quelle appellation la communication s'adresse, il fournit le certificat correspondant et commence à communiquer via la TLS/SSL.