Ajout de noms alternatifs de sujet (SAN) à une demande de signature de certificat (CSR) existante

9

Quelqu'un peut-il me dire comment ajouter un certain nombre de noms alternatifs de sujet à un CSR existant?

Je ne parle pas de générer une CSR avec des SAN ou d'ajouter des SAN au moment de la signature - je sais comment faire ces deux choses.

Contexte: Le problème que nous avons est que les châssis de lames HP vous permettent de générer des CSR, mais ils n'autorisent qu'un seul SAN. Nous ne pouvons pas utiliser un CSR généré ailleurs car nous ne pouvions pas utiliser le certificat résultant car il n'y a aucun moyen (que je peux trouver) de télécharger la clé sur le châssis de la lame.

Le processus standard de notre autorité de certification ne permet pas d'ajouter des SAN au moment de la signature. Ils sont prêts à expérimenter, mais j'essaie de trouver une solution de notre côté car cela signifie que nous n'aurons pas à compter sur eux pour avoir un processus non standard pour nous - d'après mon expérience s'ils ont besoin d'utiliser un processus non standard la vie finira par devenir difficile. Par exemple, lorsqu'un membre du personnel qui connaît le processus non standard n'est pas présent en raison d'un départ, etc.

La méthode actuelle consiste à se connecter à l'administrateur intégré de bladechassis via l'interface graphique Web et à générer la CSR avec un seul CN.

L'interface graphique Web ne permet qu'un seul SAN dans le CSR.

Ensuite, nous le signons nous-mêmes avec la strophe suivante dans la configuration openssl:

[ v3_ca ]
subjectAltName = "DNS:bladesystem8,DNS:bladesystem8.services.adelaide.edu.au,DNS:bladesystem8-backup,DNS:bladesystem8-backup.services.adelaide.edu.au"

Le certificat résultant a les SAN supplémentaires.

Jason Tan
la source
Comment générez-vous actuellement les certificats sur le châssis de la lame? Quelle méthode utilisez-vous pour connecter etc. quel modèle de châssis de lame?
Eli
Le châssis est un c7000. Oui, nous créons actuellement des CSR sur le châssis et ajoutons le SAN au moment de la signature, mais c'est pour les certificats auto-signés.
Jason Tan
Quelle méthode utilisez-vous pour vous y connecter actuellement et quel est votre processus pour générer des certificats pour cela?
Eli
J'ai édité la question principale pour inclure la méthode actuelle.
Jason Tan
1
Pouvez-vous importer la clé certifiée et privée si vous la générez sur une autre machine et l'exportez?
Clint

Réponses:

15

Si votre châssis ne prend pas en charge l'ajout de SAN, vous devrez retirer la clé du châssis et générer la CSR avec openssl.

Assurez-vous que req_extensions = v3_reqn'est pas commenté dans la [ req ]section.

Ajoutez le subjectAltNameà la [ v3_req ]section.

Générez un nouveau CSR.

openssl req -new -key extracted_c7000.key -out your_new.csr

Vous ne pouvez pas modifier un CSR existant.

Cakemox
la source
Ce que cakemox a dit. Si vous pouviez modifier un certificat (c'est-à-dire un CSR signé) après sa signature, cela irait à l'encontre de l'objectif des autorités de certification.
MadHatter
Je ne veux pas modifier le CSR après sa signature - ce serait comme vous le dites vaincre le puprose. Je souhaite modifier le CSR après sa génération, mais AVANT qu'il ne soit signé. Il est définitivement possible d'éditer des parties d'une CSR avant de signer en utilisant openssl.
Jason Tan
Si je pouvais télécharger la clé, je le ferais. Désolé, je n'ai pas mentionné cela dans la question d'origine, mais je n'ai pas pu trouver de suite pour télécharger la clé. Je serais tout aussi heureux de payer la prime à quelqu'un qui pourrait me dire comment télécharger la clé.
Jason Tan
FYI - Il est définitivement possible d'éditer des parties d'un CSR avant de signer en utilisant openssl en particulier l'option "openssl req -subj". Cependant, pour autant que je sache, cela ne permettra pas d'ajouter l'extension SAN v3, cela vous permettra simplement de spécifier une nouvelle ligne d'objet comprenant des CN supplémentaires.
Jason Tan
2
Le CSR est signé par la clé privée de la machine, vous ne pouvez donc pas le modifier une fois qu'il a été généré (sinon il ne serait plus signé). Il est possible cependant que l'AC modifie les champs mis dans le certificat public; c'est le seul moyen de modifier le champ SAN (sur lequel vous n'avez aucun contrôle si vous l'envoyez à une autorité de certification publique).
Chris S
0

Remarque importante: Tout cela est quelque peu spéculatif, donc si vous êtes au fond du code et qu'il n'est pas d'accord avec ce que je dis, croyez le code. Je ne suis pas un expert CA, j'en joue juste un à la télé. Cela dit:

En tant que caractéristique des RSE, ce sera difficile. La dernière étape de la génération d'un CSR par programme consiste à hacher tout ce que vous avez créé, puis à le signer avec la clé privée. Ainsi, bien que vous puissiez ajouter ces attributs au texte de la CSR, la signature ne correspondrait pas au contenu, donc aucune autorité de certification ne la signerait.

Dans votre cas, cependant, vous contrôlez (ou êtes au moins en contact avec) l'autorité de certification. Cela vous donne deux options:

  1. Vous pouvez demander à l'autorité de certification d'ignorer allègrement la signature sur le CSR et d'émettre un certificat de toute façon.
  2. Vous pouvez demander à l'AC d'émettre un certificat différent de celui demandé (par exemple, en ajoutant des attributs).

Parmi ceux-ci, le n ° 1 semble de loin le plus simple. Vous devrez briser le sceau inviolable sur OpenSSL pour le faire, mais il a certaines fonctions qui devraient rendre un peu plus facile. Je commencerais par asn1parse, qui vous montrera comment séparer la RSE.

BMDan
la source
Lors de recherches ultérieures, l'option n ° 2 est en fait assez simple également et est effectuée par un certain nombre d'autorités de certification (par exemple, pour ajouter site.comà un www.site.comcertificat en tant que SAN).
BMDan
0

Alors que la réponse de cakemox est certainement la plus simple si vous pouvez en quelque sorte obtenir une copie de la clé privée, il existe un autre moyen si vous ne pouvez pas en signant à nouveau la CSR en utilisant un certificat "Agent d'inscription".

Cet article de blog css-security.com contient tous les petits détails. Mais l'aperçu de haut niveau du processus ressemble à ceci:

  • Acquérir un certificat d'agent d'inscription
  • Modifier un modèle de certificat SSL pour exiger un certificat EA pour l'émission
  • Acquérir une CSR qui a besoin d'informations SAN
  • Utilisez le certificat EA pour résigner la CSR lors de l'ajout des informations SAN

Lorsque j'ai essayé cela personnellement, je suis presque sûr d'avoir ignoré la partie concernant la modification du modèle de certificat. En supposant que vous pouvez générer un certificat d'agent d'inscription pour vous-même, le processus réel ressemble à ceci.

Créez un fichier san.inf avec les informations sur l'extension SAN

[Extensions]
2.5.29.17="{text}dns=mysan1.example&dns=mysan2.example"

Re-signer la demande

certreq -policy -config "myca.example\CA" orig-request.csr san.inf corrected-request.csr

Soumettre la demande corrigée

certreq -submit -config "myca.example\CA" -attrib "CertificateTemplate:MyTemplate" corrected-request.csr

Et puis procédez comme d'habitude au processus d'émission.

Ryan Bolger
la source