web-dev-qa-db-fra.com

Une autorité de certification intermédiaire peut-elle être confiée comme une racine signée auto-signée?

Est-il possible dans les limites de la spécification X.509 de marquer une autorité de certification intermédiaire en tant que fiduciée pour un objectif spécifique, par ex. Pour vérifier une clé VPN, HTTPS, etc. Touche de serveur, comme cela fonctionnerait avec une racine ca?

Mon client VPN a tous un moyen de fournir explicitement un certificat de certification de confiance, utilisé pour vérifier l'authenticité du serveur VPN. Tant que je fournis le certificat de certification root, cela fonctionne comme prévu - le certificat est fait confiance. (Les certs intermédiaires sont fournis dans le cadre de la poignée de main TLS.)

Cependant, j'utilise une CA intermédiaire et j'aimerais beaucoup fournir ce certificat, au lieu de la racine ca. Dans ma compréhension de X.509, cela devrait fonctionner:

La clé du serveur VPN est signée par l'autorité de certification intermédiaire et jusqu'à la connaissance du X.509, c'est tout ce qui est nécessaire pour établir une chaîne de confiance.

Mais dans la pratique, cela ne fonctionne pas: mon client VPN ne se connecte pas.

En plus du VPN, j'ai essayé ceci avec l'authentification 802.1x/EAPOL et plusieurs clients - avec les mêmes résultats: fournir le certificat CA racine au service client; Fournir mon certificat de CA intermédiaire n'est pas.

Est-ce que c'est par conception, ou est-ce que la plupart des implémentations fonctionnent?

(J'utilise un VPN basé sur TLS, mais comme je l'ai également essayé avec 802.1x et TTLS, il semble être lié à TLS ou X.509, et non à mon architecture de client/serveur VPN spécifique.)

Mise à jour: J'aime N COMMISSE OPENSSL COMMIT qui met en œuvre l'ajout de certificats de CA non signataires en tant que ancrages de confiance. Malheureusement, cela n'est pas encore inclus dans aucune version de version, de sorte que toutes les solutions de contournement proposées dans les commentaires s'appliquent toujours.

Mise à jour 2: OpenSSL Now contient cette option Dans la version de version, à partir de 1.0.2. Le drapeau correspondant pour le client de ligne de commande est partial_chain, et le drapeau programmatique semble être X509_V_FLAG_PARTIAL_CHAIN.

De plus, j'ai récemment dû vérifier les certificats de serveur en Java: au moins dans la version JDK 1.8 de la mise en œuvre SSL du fournisseur Sun JSSE, ajoutant un certificat de feuille à la valeur par défaut TrustManager fonctionne sans aucune configuration particulière et la vérification réussit comme si l'autorité de certification racine avait été fournie.

21
lxgr

A racine ca est en fait une illusion. Dans x.509 , il y a ancrages de confiance . Une ancrage de confiance est, principalement un nom et une clé publique, que vous connaissez A priori et que vous avez confiance. La représentation de ce nom et cette clé publique en tant que "fichier de certificat" (traditionnellement auto-signé) est un moyen pratique de garder l'ancre de confiance comme bande d'octets.

Selon X.509, une autorité de certification est "intermédiaire" que si vous ne faites pas confiance à une priori; Ce n'est pas une propriété intrinsèque de la ca. Ce que vous devez faire est de convaincre votre logiciel de considérer l'autorité de certification comme ancrage de confiance. Un astuce possible consiste à réenregorter les données pertinentes (nom de ca (nom de la CA et clé publique) en tant que certificat auto-signé (prétendument). Notez que la signature de soi n'est qu'une tradition; Il y est surtout parce que le format de fichier d'un certificat a un champ obligatoire pour une signature. Pour une CA "racine", cette signature n'a aucune signification (il est peu logique de le vérifier, car cela ne vous achèterait rien de sécurité). Par conséquent, les applications utilisant des certificats de CA racine vérifient rarement que la signature est "Self".

Par conséquent, vous pouvez créer un certificat "auto-signé" personnalisé avec le nom de votre "CA intermédiaire" comme SubjectDN et IssuerDN. Pour la signature, il suffit de mettre au hasard des octets indésirables d'environ la bonne taille (256 octets pour une signature de 2048 bits). Ensuite, essayez de définir ce certificat pseudo-auto-signé en racine: les chances sont qu'il fonctionnera avec votre VPN. Sinon, créez votre propre CA racine et émettez un certificat supplémentaire pour l'autorité de certification intermédiaire (vous n'avez pas besoin de la coopération de l'autorité de certification intermédiaire pour cela, vous avez juste besoin de son nom et de sa clé publique, et vous les avez, dans le certificat de CA intermédiaire ).

23
Thomas Pornin

Selon la RFC sur la validation du certificat - RFC 328 - Section 6.2:

La sélection d'un ou plusieurs CAS de confiance est une décision locale. Un système peut fournir à l'une de ses CAS de confiance comme ancrage de confiance pour un chemin particulier. Les entrées à l'algorithme de validation du chemin peuvent être différentes pour chaque chemin. Les entrées utilisées pour traiter un chemin peuvent refléter des exigences ou des limitations spécifiques à une application dans la fiducie accordée à une ancrage de confiance particulière. Par exemple, une autorité de certification approuvée ne peut être approuvée que pour une politique de certificat particulière. Cette restriction peut être exprimée à travers les entrées de la procédure de validation du chemin.

Il se peut que vous finissez avec quelques douleurs sévères, cependant, par exemple, si les extensions de stratégie du certificat CA indiquent que cela doit être vérifié par la CRL ou l'OSCP - alors vous pouvez avoir une suspendre légitime dans votre application quand elle ne peut pas Recherchez la racine CA pour vérifier que les parties de ce processus - par exemple les CRL peuvent être signées par la CA racine, de sorte que si l'autorité de certification root n'est pas disponible dans le magasin Trust Store, l'application peut ne pas être en mesure de gérer la situation.

Selon la RFC, il semble que vous devriez être en mesure de configurer un certificat d'autorité de certification intermédiaire qui peut agir comme ancrage de confiance et vous devriez pouvoir créer un ensemble de paramètres de stratégie qui fonctionnent. Je peux dire de l'expérience, cependant que vous êtes entré dans le domaine douteux de "Peut-être". Vous proposez une configuration non standard ici qui n'est pas la typique. La plupart du temps, l'autorité de certification racine est utilisée ici car c'est la chose la plus élevée, et à long terme, le provisionnement de l'ancre de confiance est généralement assez velu que les gens soient heureux d'aller avec la plus grande puissance de confiance et d'éviter tout besoin d'ajouter de nouveaux CAS à l'application au fil du temps. Le domaine de la définition correcte des extensions de stratégie et l'application de l'application pour jouer est avancée PKI Vodoo - Les messages d'erreur sont souvent absurdes, il existe un support technique minimal et cela peut prendre un peu de temps pour le faire fonctionner correctement.

6
bethlakshmi