CREATE CERTIFICATE (Transact-SQL)

Agrega un certificado a una base de datos.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ] 
    { FROM <existing_keys> | <generate_new_keys> }
    [ ACTIVE FOR BEGIN_DIALOG =  { ON | OFF } ]
        
<existing_keys> ::= 
    ASSEMBLY assembly_name
    | { 
        [ EXECUTABLE ] FILE = 'path_to_file'
        [ WITH PRIVATE KEY ( <private_key_options> ) ] 
      }
    | { 
        BINARY = asn_encoded_certificate
        [ WITH PRIVATE KEY ( <private_key_options> ) ]
      }
<generate_new_keys> ::= 
    [ ENCRYPTION BY PASSWORD = 'password' ] 
    WITH SUBJECT = 'certificate_subject_name' 
    [ , <date_options> [ ,...n ] ] 

<private_key_options> ::=
      { 
        FILE = 'path_to_private_key'
         [ , DECRYPTION BY PASSWORD = 'password' ]
         [ , ENCRYPTION BY PASSWORD = 'password' ]  
      }
    |
      { 
        BINARY = private_key_bits
         [ , DECRYPTION BY PASSWORD = 'password' ]
         [ , ENCRYPTION BY PASSWORD = 'password' ]  
      }

<date_options> ::=
    START_DATE = 'datetime' | EXPIRY_DATE = 'datetime'

Argumentos

  • certificate_name
    Es el nombre por el que se conocerá el certificado en la base de datos.

  • AUTHORIZATION user_name
    Es el nombre del usuario propietario del certificado.

  • ASSEMBLY assembly_name
    Especifica un ensamblado firmado que se ha cargado en la base de datos.

  • [ EXECUTABLE ] FILE ='path_to_file'
    Especifica la ruta completa, incluido el nombre de archivo, de acceso a un archivo codificado con DER que contiene el certificado. Si se usa la opción EXECUTABLE, el archivo es una DLL firmada por el certificado. path_to_file puede ser una ruta de acceso local o una ruta UNC a una ubicación de red. Se obtendrá acceso al archivo en el contexto de seguridad de la cuenta de servicio de SQL Server. Esta cuenta debe disponer de los necesarios permisos de sistema de archivos.

  • WITH PRIVATE KEY
    Especifica que la clave privada del certificado se ha cargado en SQL Server. Esta cláusula solo es válida si se crea el certificado desde un archivo. Para cargar la clave privada de un ensamblado, utilice ALTER CERTIFICATE.

  • FILE ='path_to_private_key'
    Especifica la ruta de acceso completa a la clave privada, incluido el nombre de archivo. path_to_private_key puede ser una ruta de acceso local o una ruta UNC a una ubicación de red. Se obtendrá acceso al archivo en el contexto de seguridad de la cuenta de servicio de SQL Server. Esta cuenta debe disponer de los necesarios permisos de sistema de archivos.

    [!NOTA]

    Esta opción no está disponible en una base de datos independiente.

  • asn_encoded_certificate
    Bits de certificado codificados por ASN especificados como una constante binaria.

  • BINARY =private_key_bits
    Bits de clave privada especificados como una constante binaria. Estos bits pueden estar en forma cifrada. Si están cifrados, el usuario debe proporcionar una contraseña de descifrado. No se realizan comprobaciones de directiva de contraseña en esta contraseña. Los bits de clave privada deben tener el formato de archivo PVK.

  • DECRYPTION BY PASSWORD ='key_password'
    Especifica la contraseña necesaria para descifrar una clave privada recuperada de un archivo. La cláusula es opcional si la clave privada está protegida por una contraseña NULL. No se recomienda guardar una clave privada de un archivo sin protección de contraseña. Si no se especifica una contraseña requerida, la instrucción registrará errores.

  • ENCRYPTION BY PASSWORD ='password'
    Especifica la contraseña que se utilizará para cifrar la clave privada. Utilice esta opción solo si desea cifrar el certificado con una contraseña. Si se omite esta cláusula, la clave privada se cifrará usando la clave maestra de la base de datos. password debe cumplir los requisitos de la directiva de contraseñas de Windows del equipo que ejecuta la instancia de SQL Server. Para obtener más información, vea Directiva de contraseñas.

  • SUBJECT ='certificate_subject_name'
    El término subject se refiere a un campo en los metadatos del certificado según lo establecido en el estándar X.509. El asunto puede tener una longitud máxima de 128 caracteres. Los asuntos que superen los 4.096 bytes se truncarán al almacenarlos en el catálogo, pero el objeto binario grande (BLOB) que contiene el certificado conservará el nombre de asunto completo.

  • START_DATE ='datetime'
    Es la fecha en la que el certificado comienza a ser válido. Si no se especifica, START_DATE será la fecha actual. START_DATE se especifica en hora UTC y en cualquier formato que se pueda convertir a una fecha y hora.

  • EXPIRY_DATE ='datetime'
    Es la fecha en la que expira el certificado. Si no se especifica, EXPIRY_DATE será una fecha un año posterior a la indicada en START_DATE EXPIRY_DATE se especifica en hora UTC y en cualquier formato que se pueda convertir a una fecha y hora. SQL Server Service Broker comprueba la fecha de expiración; sin embargo, no se exige la expiración cuando el certificado se utiliza para el cifrado.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Hace que el certificado esté disponible para el iniciador de una conversación de diálogo de Service Broker. El valor predeterminado es ON.

Comentarios

Un certificado es un elemento protegible de nivel de base de datos que sigue el estándar X.509 y admite los campos V1 de X.509. CREATE CERTIFICATE puede cargar un certificado desde un archivo o ensamblado. Esta instrucción también puede generar un par de claves y crear un certificado con firma personal.

Las claves privadas generadas por SQL Server tienen una longitud de 1024 bits. Las claves privadas importadas de un origen externo presentan una longitud mínima de 384 bits y una máxima de 4.096 bits. La longitud de una clave privada importada debe ser un entero múltiplo de 64 bits. Los certificados que se usan para TDE están limitados a un tamaño de clave privada de 3456 bits.

La clave privada debe corresponderse con la clave pública especificada por certificate_name.

Cuando se crea un certificado desde un contenedor, es opcional cargar la clave privada. Pero cuando SQL Server genera un certificado con firma personal, siempre se creará la clave privada. De manera predeterminada, la clave privada se cifra con la clave maestra de base de datos. Si no existe una clave maestra de base de datos y no se especifica una contraseña, la instrucción registrará errores.

No se requiere la opción ENCRYPTION BY PASSWORD si se cifra la clave privada con la clave maestra de base de datos. Utilice esta opción solo si se cifra la clave privada con una contraseña. Si no se especifica una contraseña, la clave privada del certificado se cifrará con la clave maestra de base de datos. Al omitir esta cláusula se producirán errores si no se puede abrir la clave maestra de la base de datos.

No es necesario especificar una contraseña de descifrado si se cifra la clave privada con la clave maestra de base de datos.

[!NOTA]

Las funciones integradas para el cifrado y firma no comprueban las fechas de expiración de los certificados. Los usuarios de estas funciones deben decidir cuándo comprobar la expiración de los certificados.

Se puede crear una descripción binaria de un certificado mediante las funciones de CERTENCODED (Transact-SQL) CERTPRIVATEKEY (Transact-SQL) . Para obtener un ejemplo que utilice CERTPRIVATEKEY y CERTENCODED para copiar un certificado en otra base de datos, vea el ejemplo B del tema CERTENCODED (Transact-SQL).

Permisos

Requiere el permiso CREATE CERTIFICATE en la base de datos. Solo los inicios de sesión de Windows, los inicios de sesión de SQL Server y los roles de aplicación pueden poseer certificados. Los grupos y roles no pueden poseer los certificados.

Ejemplos

A.Crear un certificado autofirmado

En el siguiente ejemplo se crea un certificado denominado Shipping04. La clave privada de este certificado está protegida con una contraseña.

USE AdventureWorks2012;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '20121031';
GO

B.Crear un certificado desde un archivo

En el ejemplo siguiente se crea un certificado en la base de datos y se carga el par de claves desde los archivos.

USE AdventureWorks2012;
CREATE CERTIFICATE Shipping11 
    FROM FILE = 'c:\Shipping\Certs\Shipping11.cer' 
    WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk', 
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');
GO 

C.Crear un certificado desde un archivo ejecutable firmado

USE AdventureWorks2012;
CREATE CERTIFICATE Shipping19 
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO

Como alternativa, puede crear un ensamblado desde el archivo dll y crear un certificado desde el ensamblado.

USE AdventureWorks2012;
CREATE ASSEMBLY Shipping19 
    FROM ' c:\Shipping\Certs\Shipping19.dll' 
    WITH PERMISSION_SET = SAFE;
GO
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;
GO

Vea también

Referencia

ALTER CERTIFICATE (Transact-SQL)

DROP CERTIFICATE (Transact-SQL)

BACKUP CERTIFICATE (Transact-SQL)

EVENTDATA (Transact-SQL)

CERTENCODED (Transact-SQL)

CERTPRIVATEKEY (Transact-SQL)

Conceptos

Jerarquía de cifrado