# Générer un CSR sur un serveur Windows sans IIS Manager

> Générez un CSR sur un serveur Windows sans IIS Manager à l'aide de la console MMC, de l'utilitaire Certreq ou de PowerShell.

Source: https://helpcenter.ruachost.com/fr/ssl-security/csr-generation/how-to-generate-a-csr-code-on-a-windows-based-server-without-iis/

Que faire si vous devez installer un certificat SSL pour un service autre qu'IIS et qu'IIS Manager n'est pas installé sur le serveur Windows ? Comment générer un CSR dans ce cas ?

Heureusement, il existe plusieurs solutions de contournement.

- MMC (Microsoft Management Console)
- Génération du CSR avec l'utilitaire Certreq
- Génération du CSR avec PowerShell

Ces solutions n'offrent pas d'assistant convivial et demandent une certaine familiarité avec les outils d'administration système, mais elles restent très efficaces pour atteindre notre objectif : créer un CSR, que nous pourrons soumettre à l'autorité de certification lors de l'activation du certificat.

Voyons maintenant chacune de ces méthodes de plus près.

### Génération du CSR dans MMC (Microsoft Management Console)

Ouvrez le composant logiciel enfichable **Certificates** dans MMC en suivant ces étapes : **Win+R** >> ***mmc.exe*** >> **OK** >> **File**>> **Add/Remove Snap-in** >> **Certificates**>> **Add**>> **Computer account** >> **Next**>>**Local computer** >> **Finish**>> **OK**.

Dans le panneau **Personal** >> **Certificates**, faites un clic droit dans l'espace vide et suivez **All Tasks** >> **Advanced Operations** >> **Create Custom Request** pour ouvrir l'assistant **Certificate Enrollment** :

Vérifiez que l'option par défaut **Proceed without enrollment policy** est sélectionnée et cliquez sur **Next** :

Sur l'écran suivant, laissez les options présélectionnées **(No template) CNG key** et **PKCS#10** et cliquez sur **Next** :

Il faut maintenant ouvrir la fenêtre dans laquelle nous allons ajuster la demande de certificat, afin d'obtenir un certificat avec les bonnes informations et le type de clé requis. Cliquez sur la flèche déroulante à droite, puis sur le bouton **Properties**.

Saisissez un nom convivial (friendly name) dans le champ prévu, afin de pouvoir identifier cette demande par la suite. Ce champ sert à donner un nom au certificat : il peut s'agir du nom de domaine pour lequel le certificat sera émis ou de pratiquement n'importe quel autre nom :

Dans l'onglet suivant, appelé **Subject**, nous devons ajouter quelques champs à la demande et indiquer leurs valeurs. Les types de champs essentiels qui doivent figurer dans la demande sont :

- Common name : nom de domaine complet (FQDN) pour lequel le certificat doit être émis
- Country : code pays à 2 lettres conforme à la norme [ISO 3166](http://www.iso.org/iso/home/standards/country_codes.htm). Le bon code peut être vérifié ici.
- State : nom de l'État ou de la région ; peut être identique au nom de la ville
- Locality : nom de la ville
- Organization : indiquez ici le nom de l'entreprise

**REMARQUE :** si vous devez ajouter des noms alternatifs du sujet (SAN) à la demande, vous pouvez le faire dans la section **Alternative name**. Sélectionnez le type de champ **DNS** et ajoutez les noms de domaine un par un :

Le résultat devrait ressembler à ceci :

Le dernier onglet de cette fenêtre à ouvrir et à vérifier est **Private key**. Dépliez la section **Cryptographic Service Provider** pour y jeter un œil. L'option par défaut est l'algorithme **RSA**, la norme du secteur aujourd'hui, mais vous pouvez opter pour « ECDSA » (si vous devez émettre un certificat ECC) en cochant l'une des entrées de l'image ci-dessous :

Dans la section **Key options**, si l'algorithme RSA est utilisé, assurez-vous que **Key size** est réglé sur au moins 2048 bits.

**REMARQUE :** les certificats basés sur une clé de moins de 2048 bits sont considérés comme non sécurisés, et les autorités de certification de confiance ne les émettent plus.

Si vous prévoyez d'exporter le certificat, par exemple pour l'installer sur une autre instance, vous devez cocher l'option **Make private key exportable** :

Vous pouvez maintenant cliquer sur **Ok** et poursuivre.

Le dernier écran de l'assistant **Certificate Enrollment** vous demande d'indiquer le nom du fichier dans lequel le CSR sera enregistré ainsi que son emplacement dans le système de fichiers. Assurez-vous aussi que **File Format** est réglé sur **Base64**. Cliquez ensuite sur le bouton **Finish** pour lancer la génération de la clé privée et du CSR avec les attributs que nous venons de définir :

### Génération du CSR avec l'utilitaire Certreq

**Certreq** est un utilitaire en ligne de commande, utilisé principalement pour créer et soumettre des demandes de certificat, et pour récupérer, accepter et installer les réponses des autorités de certification.

Avant de commencer à utiliser « certreq », nous devons créer un fichier de stratégie (policy file) dans lequel seront puisées les informations nécessaires au CSR. Créez un nouveau fichier texte ordinaire et ouvrez-le. Copiez-collez ensuite le texte ci-dessous dans le fichier (choisissez le bloc de code RSA ou ECDSA) :

## RSA

;----------------- request.inf -----------------

[Version]\
Signature="$Windows NT$"

[NewRequest]\
Subject = "C=**US**, O=**Ruachost**, CN=**example.com**, L=**Los Angeles**, S=**California**"

KeySpec = 1\
KeyLength = 2048\
Exportable = TRUE\
MachineKeySet = TRUE\
SMIME = False\
PrivateKeyArchive = FALSE\
UserProtected = FALSE\
UseExistingKeySet = FALSE\
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"\
ProviderType = 12\
RequestType = PKCS10\
KeyUsage = 0xa0\
HashAlgorithm = SHA256

[EnhancedKeyUsageExtension]\
OID=1.3.6.1.5.5.7.3.1\
;-----------------------------------------------

## ECDSA

;----------------- request.inf -----------------

[Version]\
Signature="$Windows NT$"

[NewRequest]\
Subject = "C=**US**, O=**Ruachost**, CN=**example.com**, L=**Los Angeles**, S=**California**"\
KeyAlgorithm = ECDSA_P**384** ; can be changed to 256 or 521\
Exportable = TRUE\
MachineKeySet = TRUE\
SMIME = False\
PrivateKeyArchive = FALSE\
UserProtected = FALSE\
UseExistingKeySet = FALSE\
ProviderName = "Microsoft Software Key Storage Provider"\
ProviderType = 12\
RequestType = PKCS10\
KeyUsage = 0xa0\
HashAlgorithm = SHA256

[EnhancedKeyUsageExtension]\
OID=1.3.6.1.5.5.7.3.1\
;-----------------------------------------------

**REMARQUE** : vous pouvez ajouter l'adresse postale au CSR en indiquant la variable **Street** dans la directive **Subject**, comme ceci :

***Subject = "***************CN=example.com,******C=**US**, O=**Ruachost**, L=**Los Angeles**, S=**California*****, Street= Test Avenue 1"***

Veillez à remplacer les valeurs mises en évidence en noir par des valeurs valides pour votre demande. Enregistrez ensuite le fichier au format .inf (request.inf, par exemple) :

Ouvrez maintenant l'invite de commandes : **Win+R**>> ***cmd***>> **Enter**.

Allez dans le dossier où le fichier de stratégie est enregistré à l'aide de la commande « cd » :***\***

## cd C:

Exécutez la commande suivante pour lancer la génération du CSR :*\*

*certreq.exe -new **request**.inf **nctest**.csr*

Si le message **Request Created** apparaît en réponse à la commande, le CSR est créé et enregistré dans le fichier .csr (nctest_ecdsa.csr dans l'exemple ci-dessus).

### Génération du CSR avec PowerShell

Si vous aimez les scripts et avez l'habitude d'effectuer certaines tâches courantes dans PowerShell, le script suivant, conçu pour générer un CSR avec une clé RSA de 2048 bits, vous plaira certainement.

Ouvrez la console PowerShell en lançant :

**Win+R** >> ***powershell***>> **Enter**.

Utilisez ensuite la commande suivante pour créer un nouveau fichier qui contiendra le code du script :

***start notepad script_file_name.ps1***

**Où **script_file_name.ps1** est le fichier de script, auquel vous pouvez donner n'importe quel nom adapté.*

Dans la fenêtre du Bloc-notes (Notepad) qui s'ouvre, collez l'intégralité du code disponible [ici](https://raw.githubusercontent.com/chrisdee/Scripts/master/PowerShell/Working/certificates/GenerateCertificateSigningRequest(CSR).ps1) et enregistrez le fichier en appuyant sur **Ctrl+S** ou via le menu **File** >> **Save As**.

Exécutez ensuite la commande suivante dans PowerShell :

***.\script_file_name.ps1***

***Où **script_file_name.ps1** est le nom que vous avez donné à votre fichier de script.****\****

L'invite, qui rappelle un peu OpenSSL, vous demandera de saisir les valeurs Common Name, organisation, service (organization unit), ville, État et pays.

**REMARQUE :** lorsqu'on vous demande les noms alternatifs du sujet (SAN), vous pouvez les indiquer si nécessaire ou simplement passer cette étape en appuyant sur Entrée.

Enfin, la fenêtre PowerShell affiche un récapitulatif des informations fournies, les détails des algorithmes de hachage et de clé, ainsi que le CSR, et propose de copier immédiatement le CSR dans le presse-papiers :

Une fois le CSR généré avec l'une des méthodes décrites ci-dessus, vous pouvez passer à l'activation du certificat SSL.
