web-dev-qa-db-fra.com

Est-il possible de limiter l'utilisation d'un certificat racine à un domaine

Mon client utilise un certificat auto-signé pour une application au travail. Pour pouvoir travailler, je dois installer le certificat racine qu'ils utilisaient pour signer le certificat.

Est-il possible de configurer un certificat racine afin qu'il ne valide que vers un domaine?

28
MichaelD

En règle générale:

Non , implicite en fiducie Le certificat de CA du client est la confiance dans chaque certificat signé par cette ca.

Je ne connais pas d'applications/bibliothèques qui ont une option facile qui vous permet de sélectionner l'utilisateur final à sélectionner que vous fassiez confiance à vos clients ou à tout autre certificat de CA uniquement pour certains (sous-) domaines, à savoir uniquement pour *. exemple.com et * .example.org et rien d'autre.

Mozilla a une préoccupation similaire à l'égard du gouvernement actuellement confondu parrainé CA comme point d'attention ouvert et par exemple chrome a des chèques supplémentaires intégrés à l'accès à Google Sites, ce qui était la façon dont le voleur * Le certificat .google.com et le compromis de la CA Diginotar sont devenus publics.

Mais même si vous ne faites pas confiance à l'autorité de certification, vous pouvez toujours importer/faire confiance à un certificat de serveur spécifique signé par cette CA, qui empêchera les avertissements SSL pour les noms d'hôte dans ce certificat. Cela devrait faire fonctionner votre candidature sans erreurs ni plaintes.

Exceptions:

Une option très sous-utilisée de la norme X.509V3 PKI est la contraintes de nom Extension, qui permet à un certificat de CA de contenir des schémas blanches et noueuses de modèles de noms de domaine, il est autorisé à émettre des certificats.

Vous aurez peut-être de la chance et votre client s'est retenu quand ils ont configuré leur infrastructure PKI et incluaient la contrainte de nom dans leur certificat de certification. Ensuite, vous pouvez importer directement leur certificat CA et sachez qu'il ne peut valider que la validation d'une gamme limitée de noms de domaine.

24
HBruijn

@Cryptoguy a eu une très bonne réponse ici, mais je voulais nous étendre dessus.

Paraphraser:

Vous pouvez limiter la 3ème partie CA aux certificats de fiducie (à partir de cette autorité de certification) délivrée à une liste de noms souhaitée. Même si la 3ème partie CA n'a pas d'extension de contraintes de nom, il est possible de les appliquer en utilisant votre propre serveur de CA interne via la certification croisée. L'astuce est que vous signez la 3ème partie CA en utilisant votre ca.

feuille SSL CERT -> Certificat croisé -> Votre certificat CA -> Votre certificat racine interne.

Et voici comment vous faites ce travail (à l'aide de la ligne de commande OpenSSL)

Créer une simple ca

openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"

(( Vous pouvez ignorer la création d'un CA intermédiaire

Créez une demande de CA intermédiaire, avec des contraintes de noms.

openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg

Avec cela dans le ossl_domain_com.cfg déposer:

[ req ]
Prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca

[ req_distinguished_name ]
CN=somedomain.com trust CA

[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com

Ensuite, signer que le domaine intermédiaire ca avec votre ca.

openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg

Si vous avez sauté la création de l'intermédiaire, utilisez votre CA racine pour signer

Maintenant, reprochez-vous le CA de domaine d'origine sous votre autorité, en utilisant leur certificat. Vous pouvez ajouter les extensions CA ici.

openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt

Vous devrez peut-être utiliser le -x509-to-req argument de créer une demande, que vous signez exactement de la même manière que l'intermédiaire ci-dessus.

Maintenant, ajoutez votre CA racine, CA intermédiaire et votre domaine-Cross-CA dans la base de données de confiance de votre navigateur.

17
davenpcj