Les services de certificats MS peuvent-ils être subordonnés à une autorité de certification créée avec OpenSSL

16

Je souhaite configurer une autorité de certification d'entreprise pour mon domaine. Je peux donc délivrer des certificats à diverses fins. Je voudrais suivre la meilleure pratique d'avoir une autorité de certification hors ligne en tant que racine et configurer mon autorité de certification d'entreprise en tant que subordonné. Mais il semble stupide de concéder sous licence une copie complète de Windows pour cette tâche.

Ce que j'espère pouvoir faire, c'est installer une distribution en direct sur un disque flash USB, puis installer openssl et configurer mon autorité de certification sur le lecteur flash. Lorsque je serai prêt à créer la clé racine / certificat, je déconnecterai l'ordinateur du réseau, puis je n'utiliserai plus jamais ce disque USB sur un ordinateur connecté au réseau.

Pourrai-je signer et créer correctement un certificat d'autorité de certification subordonnée pour une autorité de certification d'entreprise Windows, qui sera utilisable. Quelles options dois-je utiliser avec OpenSSL pour créer l'autorité de certification et signer correctement le certificat d'autorité de certification subordonnée.

J'ai essayé cherché sur le web, et c'était la seule chose que je pouvais trouver sur le sujet. Mais il est antérieur à 2008, et je ne suis pas tout à fait sûr que la personne ait réussi.

Zoredache
la source
Pour être clair, l'outil ne doit pas nécessairement être OpenSSL, mais je ne veux pas exécuter une énorme autorité de certification comme EJBCA. Je recherche un CA très léger qui peut être exécuté dans un environnement livecd / liveusb.
Zoredache

Réponses:

14

Ouais, ça marche très bien; une autorité de certification Windows n'a aucun scrupule à s'exécuter en tant que subordonné à une racine non Windows.

Testé avec une racine OpenSSL et un subordonné Windows 2008 R2 en mode Entreprise.


Quelques choses pour bien jouer avec ce que la MS CA attend dans la configuration OpenSSL:

  • Les emplacements AIA et CDP valides doivent s'appliquer au certificat racine, dans la section configurée par la x509_extensionspropriété de la [req]section pour la racine auto-signée. Quelque chose dans ce sens:

    authorityInfoAccess = caIssuers;URI:http://test-rootca.test.local/root.pem
    crlDistributionPoints = URI:http://test-rootca.test.local/root.crl
    
  • Une configuration OpenSSL donnée n'autorise probablement pas les CA subordonnées par défaut. Modifiez cela pour les demandes signées (assurez-vous que cela n'est pas en place pour les demandes qui ne devraient pas être des autorités de certification, bien sûr). Ce sera dans la section configurée par la x509_extensionspropriété de la [ca]section:

    basicConstraints=CA:TRUE
    certificatePolicies=2.5.29.32.0
    

Nous allons donc faire une CA pour tester.

Faites votre racine:

openssl req -new -x509 -keyout /etc/ssl/private/root.key -out /etc/ssl/certs/root.pem -nodes -extensions v3_ca

Jouez avec votre configuration et créez les fichiers et répertoires nécessaires dans la [ca]section de votre configuration OpenSSL.

Tout est prêt pour faire avancer le côté Microsoft; créer une autorité de certification subordonnée Windows avec signature manuelle.

Téléchargez la demande de certificat sur le serveur OpenSSL. Pendant que vous y êtes, téléchargez le certificat racine. Importez-le dans le magasin racine de confiance - de l'ordinateur, pas de votre utilisateur!

Émettez le certificat subordonné:

openssl ca -in test-subca.req
(you might need to specify a permissive policy manually with -policy, check your config)

Si cela ne fonctionne pas, votre autorité de certification a probablement un problème avec la configuration - nouveau répertoire de certificats, fichier d'index, fichier série, etc. Vérifiez le message d'erreur.

Si c'est parti, alors c'est tout. Si ce n'est pas le cas, créez une CRL et placez-la dans le CDP que vous avez configuré ci-dessus; Je viens d'installer Apache et de le bloquer dans webroot:

openssl ca -gencrl -out /var/www/root.crl

Et placez votre certificat à l'emplacement AIA, s'il ne l'est pas déjà:

cp /etc/ssl/certs/root.pem /var/www/root.pem

Téléchargez le certificat subordonné nouvellement émis et installez-le sur l'autorité de certification avec le composant logiciel enfichable MMC Autorité de certification. Il se plaindra de tout problème de confiance ou de validation, mais il n'a aucune objection morale à le prendre.

Résultat final; une autorité de certification Windows fonctionnelle sans se plaindre du composant logiciel enfichable PKI d'entreprise, avec un témoin OpenSSL Generated Certificatedans les attributs.

travail-ca

Shane Madden
la source
6

Je vois où vous voulez en venir, mais je ne pense pas qu'OpenSSL soit tout à fait l'outil pour le travail. Vous voudrez peut-être examiner les projets d'autorité de certification Open Source tels que EJBCA, qui sont plus axés sur cette fonctionnalité qu'OpenSSL et disposer d'une documentation spécifique que vous pouvez utiliser.

Je ne vois pas de raison pour laquelle le concept ne fonctionnerait pas, car tout ce que vous faites est de signer le certificat de l'autorité de certification subordonnée. Si vous payiez une autorité de certification publique pour le faire pour vous, vous ne sauriez pas nécessairement ou ne vous souciez pas de la saveur du serveur qu'ils utilisaient.

Tout ce dont vous avez besoin, c'est de:

  • vous pouvez signer le certificat à partir du CSR généré par votre subordonné
  • le résultat peut être installé sur le subordonné lui-même
  • vous disposez d'un certificat de signature racine qui peut être installé comme approuvé sur tous les clients que vous ciblez
  • vous pouvez générer une liste de révocation qui est servie quelque part

Je ne peux pas dire que j'ai fait cela, mais je suis sûr que si vous suivez les documents pour générer un CSR à partir d'une boîte Windows, puis suivez vos documents CA pour générer un certificat .p7k à partir d'un CSR, alors ça devrait aller.

Soit dit en passant - je vous recommande de créer votre autorité de certification en tant que machine virtuelle pour un hyperviseur populaire tel que Hyper-V ou VMware, plutôt que comme un disque de démarrage, assurez-vous de le stocker de manière très sécurisée quelque part où votre successeur peut le trouver et le faire tourner périodiquement hors ligne pour vous assurer qu'il fonctionne, ou transférez-le vers de nouveaux médias / technologies. Une AC racine peut avoir une durée de vie de 10 ou 20 ans ...

dunxd
la source
+1 OpenSSL n'est pas le premier outil pour créer une autorité de certification, mais il fonctionne en général. Je n'ai pas émis de certificat de sous-autorité de certification pour une entreprise Windows Enterprise, mais je ne peux pas imaginer pourquoi cela ne fonctionnerait pas (bien que MS ait commis des actes anticoncurrentiels plus flagrants dans le passé). Big +1 pour CA en tant que VM. Conserver une deuxième copie du certificat racine est une bonne idée (Base64 sur papier est très durable et facile à conserver dans un coffre-fort / coffre-fort / etc.)
Chris S
J'étais assez content de moi quand j'ai réalisé que je pouvais configurer une VM sans NIC et utiliser simplement un lecteur de disquette virtuel pour activer les CSR et signer les certificats. Sneakernet renaît avec un éclat virtuel du 21e siècle!
dunxd