Configuration d'un certificat en vue de son utilisation par SSL
Pour les communications SSL (Secure Sockets Layer), un serveur HTTP doit disposer d'un certificat inscrit pour chaque socket (combinaison adresse IP/port) activé en vue d'une utilisation avec SSL. Les certificats doivent être autorisés pour l'authentification du serveur. Pour ce faire, vous pouvez obtenir un certificat SSL auprès d'une autorité d'émission de certificats, telle que Verisign, ou, si vous souhaitez effectuer des tests, utiliser des outils vous permettant d'émettre et de créer un certificat vous-même.
Que vous obteniez un certificat ou que vous l'émettiez vous-même, vous devez l'inscrire sur le serveur Il est recommandé de recourir à l'utilitaire de configuration HTTP (HttpCfg.exe) pour inscrire, interroger et supprimer des certificats SSL.
Inscription des certificats SSL
Pour inscrire un certificat, utilisez la commande suivante :
httpcfg set ssl /iIP:Port**/hHash/g**Guid
Arguments
- IP:Port
Combinaison d'une adresse IP et d'un port pour laquelle vous inscrivez le certificat.
Hash
Hachage du certificat.Remarque :
Le hachage du certificat peut être obtenu auprès du magasin de certificats. Vous pouvez visualiser celui-ci à l'aide du composant logiciel enfichable Certificats ou d'un outil de ligne de commande tel que CertUtil.
- Guid
Chaîne GUID identifiant l'entité qui inscrit le certificat. Il est conseillé de créer un GUID par instance de SQL Server 2005 et, pour toutes les inscriptions de certificat réalisées par une instance donnée, d'utiliser le GUID correspondant à celle-ci.
L'inscription d'un certificat SSL pour une combinaison IP:Port affecte toutes les applications à l'écoute de celle-ci. Par exemple, si l'instance de SQL Server 2005 et une autre application, telle que IIS, sont à l'écoute de la même combinaison IP:Port (10.0.0.1:80), l'instance de SQL Server qui inscrit un certificat SSL pour 10.0.0.1:80 affecte IIS ; en outre, IIS et l'instance de SQL Server doivent partager l'utilisation du même certificat commun. Cette restriction est due au pilote HTTP en mode noyau (Http.sys). Lorsque Http.sys reçoit une demande sur la combinaison IP:Port 10.0.0.1:80, il ne peut pas examiner l'URL pour déterminer si la demande appartient à SQL Server ou à IIS car celle-ci est chiffrée. Https.sys peut uniquement acheminer la demande après l'avoir déchiffrée. Par conséquent, il ne peut pas utiliser un certificat SSL différent pour chaque application à l'écoute de la même combinaison IP:Port.
Exemples
L'exemple suivant inscrit un certificat :
httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"
Interrogation des certificats
Pour afficher tous les certificats inscrits, utilisez la commande suivante :
httpcfg query ssl
Pour afficher un certificat spécifique, utilisez l'option /i :
httpcfg query ssl /iIP:Port
Arguments
- IP:Port
Combinaison d'une adresse IP et d'un port pour laquelle vous interrogez le certificat.
Exemple
httpcfg query ssl
httpcfg query ssl /I 10.0.0.1:80
Suppression des certificats SSL
Pour supprimer un certificat, utilisez l'option /i comme suit :
httpcfg delete ssl /iIP:Port
Arguments
- IP:Port
Combinaison d'une adresse IP et d'un port pour laquelle vous supprimez le certificat.
Exemple
httpcfg delete ssl /i 10.0.0.1:80
Obtention de certificats
Vous pouvez obtenir auprès d'une autorité de certification telle que Verisign les certificats requis par SQL Server 2005 pour les communications SSL avec des clients Internet.
Toutefois, à des fins de test, vous pouvez créer un certificat de test à l'aide de l'outil MakeCert.exe, qui fait partie du kit de développement logiciel (SDK) Microsoft .NET Framework. MakeCert.ext est également disponible dans le kit de développement Platform SDK. Pour télécharger les Kits de développement logiciel (SDK), accédez au Centre de développement de Microsoft .NET Framework et au Centre de téléchargement Microsoft, respectivement. MakeCert.exe crée un certificat X.509. Il crée une paire de clés publique et privée pour les signatures numériques et l'enregistre dans un fichier de certificat. Il associe également cette paire de clés à un éditeur spécifié et crée un certificat X.509 liant un nom spécifié par l'utilisateur à la partie publique de la paire de clés.
Pour créer un certificat SSL pour un serveur qui répond à un nom d'hôte (MySQLServer), vous pouvez exécuter MakeCert à l'aide des options suivantes :
makecert -r -pe -nCN="MySQLServer"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine
-skyexchange-sp"Microsoft RSA SChannel Cryptographic Provider"-sy12
Commutateurs de ligne de commande
- -r
Crée un certificat auto-signé. Un certificat auto-signé est un certificat qui n'est pas signé par une autorité de certification. Par conséquent, il peut être utilisé pour le chiffrement requis dans SSL mais pas pour l'authentification du serveur.
- -n
Spécifie le nom du serveur. Ce nom doit être conforme à la norme X.500. La méthode la plus simple consiste à spécifier le nom entre guillemets doubles, précédé de CN=.
- -eku
Spécifie dans le certificat une liste d'identificateurs d'objets séparés par des virgules et destinés à l'utilisation améliorée de la clé. Dans le cas de SQL Server 2005, vous devez utiliser un certificat SSL valide pour l'authentification du serveur et dont l'identificateur d'objet a pour valeur 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH).
- -ss
Spécifie le magasin de certificats où le certificat créé est enregistré. Il est recommandé d'enregistrer celui-ci dans le magasin my, à l'emplacement de votre choix.
- -sr
Spécifie le magasin de certificats où se trouve le certificat. L'emplacement peut être currentuser (emplacement par défaut) ou localmachine. Étant donné que ce certificat est créé pour un service, il doit être placé dans l'ordinateur local.
- -sky
Spécifie le type de clé de certificat. Il doit s'agir de signature, exchange ou d'un entier, tel que 4. Dans le cas de l'algorithme d'échange de clés publiques RSA, exchange est requis ici. Ce type de clé permet de chiffrer et de déchiffrer les clés de session.
- -sp
Spécifie le nom du fournisseur CryptoAPI. Dans le cas des certificats créés pour SQL Server, ce paramètre peut avoir pour valeur Microsoft RSA SChannel Cryptographic Provider.
- -sy
Spécifie le type de fournisseur CryptoAPI. Lorsque le fournisseur est Microsoft RSA SChannel Cryptographic Provider, ce paramètre a pour valeur 12.
Commutateurs de ligne de commande supplémentaires
- -b
Valeur de date, dans le format mm/jj/aaaa, qui définit le début de la période de validité du certificat. La valeur par défaut de ce paramètre correspond à la date de création du certificat.
- -e
Valeur de date, dans le format mm/jj/aaaa, qui définit la fin de la période de validité du certificat. Si cette date n'est pas spécifiée, sa valeur par défaut est 12/31/2039 11:59:59 (GMT).
Exemples
L'exemple suivant illustre la création d'un certificat à l'aide de MakeCert et des options supplémentaires.
makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036
-eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange
-sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
Après avoir créé le certificat, vous pouvez obtenir son hachage auprès de sa console MMC ou à l'aide d'un outil tel que CertUtil. CertUtil vous permet d'afficher le certificat que vous venez de créer.
C:\>certutil -store "my" "MySQLServerName"
================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.
Le hachage obtenu suite à l'exécution de CertUtil peut être transmis à l'outil Httpcfg.exe pour inscrire le certificat auto-signé.
Avant d'utiliser MakeCert pour créer un certificat SSL auto-signé et de l'inscrire auprès de Http.sys, vérifiez si IIS est déjà installé sur l'ordinateur. IIS met à votre disposition un Assistant qui facilite l'inscription des certificats SSL. Par conséquent, si IIS est déjà installé sur l'ordinateur, il est possible qu'un certificat SSL ait déjà été inscrit auprès de Http.sys. Si tel n'est pas le cas, vous pouvez utiliser l'Assistant IIS pour créer et inscrire le certificat.
Étant donné que la portée des certificats SSL s'étend à l'ensemble de l'ordinateur, il n'est pas important de recourir à IIS pour inscrire un certificat en vue de son utilisation par SQL Server 2005.
Observations
- Lorsque vous désinstallez une instance de SQL Server 2005, toutes les liaisons de certificat SSL créées à l'aide de Httpcfg.exe sont conservées sauf si vous les supprimez manuellement. Étant donné que ces paramètres n'ont pas été créés à l'aide du programme d'installation de SQL Server, celui-ci ne les supprime pas. Par conséquent, si une instance de SQL Server est désinstallée, ces liaisons doivent être supprimées.
- Bien que l'utilisation de SSL sur HTTP avec SQL Server 2005 ne requière pas IIS, une fois IIS installé avec une instance de SQL Server, le service HTTP SSL est lié à l'utilisation de IIS. Ainsi, IIS arrête le service HTTP SSL si vous arrêtez IIS, par exemple à l'aide de la syntaxe net stop iisadmin à partir de l'invite de commandes. En outre, une fois IIS installé sous Windows, vous ne pouvez pas démarrer le service HTTP SSL sans démarrer également IIS (Inetinfo.exe).
Voir aussi
Concepts
Configuration du pilote en mode noyau HTTP (Http.sys)