Configuration d'un certificat en vue de son utilisation par SSL

Les services Web XML natifs sont déconseillés. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

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.

    Notes

    Le hachage du certificat peut être obtenu auprès du magasin de certificats. Il peut être visualisé à l'aide du composant logiciel enfichable Certificats ou d'un outil en 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 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. IP:Port Par exemple, si l'instance de SQL Server et une autre application, telle que les services Internet (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.

Si SQL Server s'exécute sous Windows Vista (ou une édition Windows Server équivalente), vous devrez peut-être inscrire spécifiquement le certificat pour l'adresse IP locale (IPv4: 127.0.0.1 ou IPv6: [::1]), ainsi que l'adresse IP externe de l'ordinateur, pour activer la connectivité « locahost » via le protocole SSL. Vous pouvez également spécifier l'adresse non spécifiée (IPv4: 0.0.0.0 ou IPv6: [::]) lors de l'inscription du certificat SSL. Par ailleurs, Windows Vista fournit désormais un outil intégré qui vient remplacer httpcfg.exe pour gérer les inscriptions de certificats SSL ; la nouvelle commande est la suivante :

netsh http add sslcert ipport=IP:Port certhash=Hash appid=Guid

Par exemple :

netsh http add sslcert ipport=[::]:443 certhash=<hash> appid=<guid>Examples

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 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. MakeCert.exe fait partie du kit de développement logiciel (SDK) .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, 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 (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 peut s'agir de signature, exchange ou d'un entier, tel que 4. Pour l'algorithme d'échange de clé publique RSA, la valeur exchange est requise. 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, un certificat SSL a déjà pu être enregistré avec Http.sys. Si ce n'est pas le cas, utilisez 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.

Observations

  • Lorsque vous désinstallez une instance de SQL Server, 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 ne requière pas IIS, une fois IIS installé avec une instance de SQL Server, le service HTTP SSL est lié à l'utilisation d'IIS. Lorsque vous arrêtez IIS, par exemple à l'invite de commandes à l'aide de net stop iisadmin, IIS arrête également le service HTTP SSL. 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).