Share via


Configurar certificados para su uso con SSL

Los Servicios web XML nativos están desusados. 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 entidad de certificación, como Verisign, o bien, con fines de comprobación, use 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 usar la utilidad de configuración de HTTP (HttpCfg.exe) para registrar, consultar y eliminar certificados SSL.

Registrar certificados SSL

Para registrar un certificado, use 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 use 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. Esta es una limitación del controlador HTTP en modo kernel (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 solamente puede enrutar la solicitud después de descifrarla. Por lo tanto, no puede usar 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 usar 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, use el comando siguiente:

httpcfg query ssl

Para ver un solo certificado, use 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, use 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 de certificación 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-ssmi-srlocalmachine**

-skyexchange-sp"Microsoft RSA SChannel Cryptographic Provider"-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 de certificación. Como no está firmado por ninguna entidad de certificación, 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. Esta debe ser signature, exchange o un entero, como 4. Para el algoritmo de intercambio de clave pública de RSA, es obligatorio exchange. Se trata del tipo de clave usada 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 CertUtil, puede mostrar 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 usar 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 consiguiente, si IIS ya está instalado en el equipo, un certificado SSL ya puede haberse registrado con Http.sys. Si no, 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 use IIS para registrar un certificado que se va a usar 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 usa 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).