Compartir a través de


Configurar certificados para su uso con SSL

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

En comunicaciones de SSL (Capa de sockets seguros), un servidor HTTP debe tener un certificado registrado para cada socket (combinación de dirección IP/puerto) que se habilita para su uso con SSL. Los certificados deben ser autorizados para la autenticación del servidor. Para ello, obtenga un certificado SSL de una autoridad emisora de certificados, como Verisign, o bien, con fines de comprobación, utilice herramientas para emitir y crear su propio certificado.

Con independencia de que se obtenga o se emita, el certificado debe estar registrado en el servidor. Se recomienda utilizar la utilidad de configuración de HTTP (HttpCfg.exe) para registrar, consultar y eliminar certificados SSL.

Registrar certificados SSL

Para registrar un certificado, utilice el comando siguiente:

httpcfg set ssl /iIP:Port**/hHash/g**Guid

Argumentos

  • IP:Port
    Combinación de dirección IP y puerto para la que se registra el certificado.

  • Hash
    Hash del certificado.

    [!NOTA]

    El hash del certificado se puede obtener del almacén de certificados. Se puede ver mediante el complemento Certificados o una herramienta de línea de comandos como CertUtil.

  • Guid
    Cadena GUID que identifica la entidad en que se registra el certificado. Como práctica recomendada, cree una cadena GUID por cada instancia de SQL Server y utilice la misma cadena GUID para todos los registros de certificado realizados por dicha instancia.

El registro de un certificado SSL para una combinación IP:Port afecta a todas las aplicaciones que escuchan en dicha combinación IP:Port. Por ejemplo, si la instancia de SQL Server y la de otra aplicación, como IIS, escuchan en la misma combinación IP:Port (10.0.0.1:80), la instancia de SQL Server que registre un certificado SSL para 10.0.0.1:80 afectará a IIS; además, IIS y la instancia de SQL Server tendrán que compartir el uso del mismo certificado común. Ésta es una limitación del controlador HTTP en modo de núcleo (Http.sys). Cuando Http.sys recibe una solicitud en la combinación IP:Port 10.0.0.1:80, no puede examinar la dirección URL para determinar si la solicitud pertenece a SQL Server o a IIS, ya que la solicitud está cifrada. Https.sys sólo puede enrutar la solicitud después de descifrarla. Por lo tanto, no puede utilizar un certificado SSL diferente para las distintas aplicaciones que escuchan en la misma combinación IP:Port.

Si SQL Server se ejecuta en Windows Vista (o una edición de Windows Server equivalente), podría tener que registrar específicamente el certificado de la dirección IP local (IPv4: 127.0.0.1 o IPv6: [::1]), así como la dirección IP externa del equipo, para habilitar la conectividad "locahost" en SSL. También puede especificar la dirección no especificada (IPv4: 0.0.0.0 o IPv6: [::]) al registrar el certificado SSL. Asimismo, Windows Vista proporciona ahora una herramienta integrada para ayudar a administrar los registros de certificado SSL en lugar de utilizar herramienta httpcfg.exe; el nuevo comando es como sigue:

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

Por ejemplo:

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

En el siguiente ejemplo se registra un certificado:

httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d 
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"

Consultar certificados

Para ver todos los certificados registrados, utilice el comando siguiente:

httpcfg query ssl

Para ver un solo certificado, utilice la opción /i:

httpcfg query ssl /iIP:Port

Argumentos

  • IP:Port
    Combinación de dirección IP y puerto para la que se consulta el certificado.

Ejemplo

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

Eliminar certificados SSL

Para eliminar un certificado, utilice la opción /i de la manera siguiente:

httpcfg delete ssl /iIP:Port

Argumentos

  • IP:Port
    Combinación de dirección IP y puerto para la que se elimina el certificado.

Ejemplo

httpcfg delete ssl /i 10.0.0.1:80

Obtener certificados

Puede obtener certificados obligatorios en SQL Server para comunicaciones SSL con clientes basados en Internet de una entidad emisora de certificados como Verisign.

Sin embargo, con fines de comprobación, puede crear un certificado de prueba mediante una herramienta denominada MakeCert.exe. MakeCert.exe forma parte del SDK de .NET Framework. También está disponible en el SDK de la plataforma. Para descargar los SDK, vaya al centro para programadores de Microsoft .NET Framework y el Centro de descarga de Microsoft, respectivamente. MakeCert.exe crea un certificado X.509. Crea un par de claves pública y privada para firmas digitales y lo almacena en un archivo de certificado. Esta herramienta también asocia el par de claves con un publicador determinado y crea un certificado X.509 que se enlaza a un nombre especificado por el usuario para la parte pública del par de claves.

Para crear un certificado SSL para un servidor que responde a un nombre de host (MySQLServer), se puede ejecutar MakeCert mediante el uso de las siguientes opciones:

makecert -r -pe -nCN="MySQLServer**"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine**

-skyexchange-sp"Proveedor de cifrado Microsoft RSA SChannel"-sy12

Modificadores de la línea de comandos

  • -r
    Crea un certificado autofirmado. Un certificado autofirmado es un certificado que no está firmado por una entidad emisora de certificados. Como no está firmado por ninguna entidad emisora de certificados, puede utilizarse para el cifrado obligatorio en SSL pero no en la autenticación del servidor.

  • -n
    Especifica el nombre del servidor. Este nombre debe cumplir el estándar X.500. El método más sencillo consiste en especificar el nombre entre comillas dobles, precedido de CN=.

  • -eku
    Especifica una lista de identificadores de objeto (OID) de uso de clave mejorada y separados por comas en el certificado. En SQL Server se necesita un certificado SSL que sea válido para autenticación del servidor y tenga un OID de 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH).

  • -ss
    Especifica el almacén de certificados en el que se guardan los certificados creados. Se recomienda guardarlo en el almacén my, aunque puede guardarse en cualquier lugar del almacén de certificados.

  • -sr
    Especifica el almacén de certificados en el que se ubica el certificado. La ubicación puede ser: currentuser (valor predeterminado) o localmachine. Como este certificado se crea para un servicio, debe colocarse en el equipo local.

  • -sky
    Especifica el tipo de clave de certificado. Debe ser signature, exchange o un número entero, por ejemplo 4. Para el algoritmo de intercambio de claves públicas RSA, se requiere exchange. Se trata del tipo de clave utilizada para cifrar y descifrar claves de sesión.

  • -sp
    Especifica el nombre del proveedor de CryptoAPI. En certificados creados para SQL Server, se puede establecer en Proveedor de cifrado Microsoft RSA SChannel.

  • -sy
    Especifica el tipo de proveedor de CryptoAPI. Cuando el proveedor es Proveedor de cifrado Microsoft RSA SChannel, este valor es 12.

Modificadores adicionales de la línea de comandos

  • -b
    Valor de fecha en formato mm/dd/aaaa que especifica el inicio del período de validez del certificado. El valor predeterminado en este caso es la fecha de creación del certificado.

  • -e
    Valor de fecha en formato mm/dd/aaaa que especifica el final del período de validez del certificado. Si no se establece de otra forma, el valor predeterminado en este caso es 12/31/2039 11:59:59 GMT.

Ejemplos

En el ejemplo siguiente se muestra la creación de un certificado mediante el uso de MakeCert con las opciones adicionales.

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

Una vez creado el certificado, se puede obtener su hash en la consola MMC del certificado o mediante el uso de una herramienta como CertUtil. Mediante el uso de CertUtil, puede ver en la lista el certificado recién creado.

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.

El hash obtenido de los resultados al ejecutar CertUtil se puede pasar a la herramienta Httpcfg.exe para registrar el certificado autofirmado.

Antes de utilizar MakeCert para crear un certificado SSL autofirmado y registrarlo con Http.sys, compruebe que el equipo tiene instalado IIS. IIS proporciona un asistente que simplifica el registro de certificados SSL. Por lo tanto, si IIS ya está instalado en el equipo, puede que ya se haya registrado un certificado SSL con Http.sys. De lo contrario, puede usar el asistente de IIS para crear y registrar el certificado.

Dado que los certificados tienen efecto en todo el equipo, no es muy importante que se utilice IIS para registrar un certificado que se va a utilizar en SQL Server.

Consideraciones

  • Cuando se desinstala una instancia de SQL Server, los enlaces de certificados SSL creados mediante Httpcfg.exe permanecen a no ser que se eliminen manualmente. Dado que estas configuraciones no se crearon mediante el programa de instalación de SQL Server, éste no las elimina. Por lo tanto, si se desinstala una instancia de SQL Server, también deben eliminarse dichos enlaces.

  • Aunque el uso de SSL a través de HTTP con SQL Server no requiere IIS, cuando se instala IIS junto con una instancia de SQL Server, el servicio HTTP SSL queda vinculado al uso de IIS. Por ejemplo, cuando IIS se detiene, como cuando se utiliza net stop iisadmin en el símbolo del sistema, IIS también detiene el servicio HTTP SSL. Además, una vez instalado IIS en Windows, no se puede iniciar el servicio HTTP SSL sin iniciar también IIS (Inetinfo.exe).