Identificar el origen de paquetes con firmas digitales

Se aplica a:SQL Server SSIS Integration Runtime en Azure Data Factory

Es posible firmar un paquete de Integration Services con un certificado digital para identificar su origen. Una vez que el paquete está firmado con un certificado digital, se puede configurar Integration Services para que compruebe la firma digital antes de cargarlo. Para hacer que Integration Services compruebe la firma, puede establecer una opción en SQL Server Data Tools (SSDT) o en la utilidad dtexec (dtexec.exe), o bien establecer un valor opcional del Registro.

Firmar un paquete con un certificado digital

Antes de poder firmar un paquete con un certificado digital, debe obtener o crear el certificado. Cuando lo consiga, puede utilizar el certificado para firmar el paquete. Para obtener más información sobre cómo obtener un certificado y firmar un paquete con él, vea Firmar un paquete mediante un certificado digital.

Establecer una opción para comprobar la firma del paquete

Tanto SQL Server Data Tools (SSDT) como la utilidad dtexec tienen una opción que configura Integration Services para que compruebe la firma digital de un paquete firmado. El uso de SQL Server Data Tools (SSDT) o de la utilidad dtexec depende de si desea comprobar todos los paquetes o simplemente algunos de ellos:

  • Para comprobar la firma digital de todos los paquetes antes de cargarlos en tiempo de diseño, establezca la opción Comprobar la firma digital al cargar un paquete en SQL Server Data Tools (SSDT). Esta opción es un valor de configuración global para todos los paquetes en SQL Server Data Tools (SSDT).

  • Para comprobar la firma digital de un paquete concreto, especifique la opción /VerifyS[igned] al usar la utilidad dtexec para ejecutar el paquete. Para obtener más información, consulte utilidad dtexec.

Establecer un valor del Registro para comprobar la firma del paquete

Integration Services también admite un valor opcional del Registro, BlockedSignatureStates, que puede utilizarse para administrar la directiva de una organización para cargar los paquetes firmados y sin firmar. El valor del Registro puede evitar que los paquetes se carguen si están sin firmar o si tienen firmas que no sean válidas o de confianza. Para obtener más información sobre cómo establecer este valor del Registro, vea Implementar una directiva de firma estableciendo un valor del Registro.

Nota

El valor del Registro BlockedSignatureStates opcional puede especificar un parámetro de configuración más restrictivo que la opción de firma digital establecida en SQL Server Data Tools (SSDT) o en la línea de comandos de dtexec . En esta situación, el valor del Registro más restrictivo invalida los demás valores.

Implementar una directiva de firma estableciendo un valor del Registro

Se puede usar un valor opcional del Registro para administrar la directiva de una organización para la carga de paquetes firmados o sin firmar. Si utiliza este valor del Registro, debe crearlo en cada equipo en el que se ejecutarán los paquetes de Integration Services y en el que desea exigir el cumplimiento de la directiva. Una vez establecido el valor del Registro, Integration Services comprobará las firmas antes de cargar los paquetes.

En este procedimiento de este artículo se describe cómo agregar el valor DWORD opcional BlockedSignatureStates a la clave del Registro HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\150\SSIS\Setup\DTSPath.

Nota

Una ubicación del Registro inferior a 150 representa SQL Server 2019, en 140 representa SQL Server 2017, en 130 representa SQL Server 2016, en 120 representa SQL Server 2014 y en 110 representa SQL Server 2012.

El valor de los datos de BlockedSignatureStates determina si se debe bloquear un paquete que tenga una firma que no sea de confianza o una firma no válida, o esté sin firmar.

Con respecto al estado de las firmas que se utilizan para firmar paquetes, el valor del Registro BlockedSignatureStates usa las siguientes definiciones:

  • Una firma válida es una firma que puede leerse correctamente.

  • Una firma no válida es una firma para la que la suma de comprobación descifrada (algoritmo hash unidireccional del código de paquete cifrado con una clave privada) no coincide con la suma de comprobación descifrada que se calcula como parte del proceso de carga de paquetes de Integration Services .

  • Una firma de confianza es una firma creada mediante un certificado digital firmado por una entidad de certificación raíz de confianza. Este valor de configuración no exige que el firmante se encuentre en la lista de publicadores de confianza del usuario.

  • Una firma que no es de confianza es una firma que no se puede comprobar que haya sido emitida por una entidad de certificación raíz de confianza o una firma que no es actual.

En la tabla siguiente se enumeran los valores válidos de los datos DWORD y su directiva asociada.

Value Descripción
0 Sin restricción administrativa.
1 Bloquear firmas no válidas.

Este valor no bloquea los paquetes sin firmar.
2 Bloquear las firmas no válidas y las que no sean de confianza.

Este valor no bloquea los paquetes sin firmar, pero bloquea las firmas generadas automáticamente.
3 Bloquear las firmas no válidas, las que no sean de confianza y los paquetes sin firmar.

Este valor también bloquea las firmas generadas automáticamente.

Nota

El valor recomendado para BlockedSignatureStates es 3. Este valor proporciona la protección óptima frente a paquetes sin firmar o firmas que no son válidas o no son de confianza. No obstante, es posible que el valor recomendado no sea adecuado para todas las circunstancias. Para obtener más información sobre la firma de activos digitales, vea el tema deintroducción a la firma de códigoen MSDN Library.

Para implementar una directiva de firma para paquetes

  1. En el menú Inicio , haga clic en Ejecutar.

  2. En el cuadro de diálogo Ejecutar, escriba Regedity haga clic en Aceptar.

  3. Busque la clave del Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\SSIS.

  4. Haga clic con el botón derecho en MSDTS, seleccione Nuevoy, después, haga clic en Valor DWORD.

  5. Actualice el nombre del nuevo valor a BlockedSignatureStates.

  6. Haga clic con el botón derecho en BlockedSignatureStates y haga clic en Modificar.

  7. En el cuadro de diálogo Editar valor DWORD , escriba el valor 0, 1, 2 o 3.

  8. Haga clic en OK.

  9. En el menú Archivo , haga clic en Salir.

Firmar un paquete mediante un certificado digital

En este tema se describe cómo firmar un paquete de Integration Services con un certificado digital. Puede utilizar una firma digital, junto con otros valores de configuración, para evitar que se cargue y se ejecute un paquete que no es válido.

Antes de poder firmar un paquete de Integration Services debe realizar las tareas siguientes:

  • Crear u obtener una clave privada para asociarla al certificado y almacenarla en el equipo local.

  • Obtener un certificado para firmar código de una entidad de certificación de confianza. Puede utilizar uno de los métodos siguientes para obtener o crear un certificado:

    • Obtener un certificado de una entidad de certificación pública comercial que se dedique a emitirlos.

    • Obtener un certificado de un servidor de certificados que permita a una organización emitir certificados internamente. Tiene que agregar el certificado raíz utilizado para firmar dicho certificado al almacén Entidades de certificación raíz de confianza . Para ello, puede utilizar el complemento Certificados de Microsoft Management Console (MMC). Para obtener más información, vea el tema "Certificate Services" en MSDN Library.

    • Crear su propio certificado solo con fines de pruebas. El comando de PowerShell New-SelfSignedCertificate puede crear un nuevo certificado autofirmado con algoritmo hash seguro con fines de prueba. Por ejemplo:

        $params = @{
            Type = 'CodeSigningCert'
            Provider = 'Microsoft Enhanced RSA and AES Cryptographic Provider'
            Subject = 'CN=PS code signing Certificate 2'
            TextExtension = @(
                '2.5.29.37={text}1.3.6.1.5.5.7.3.3',
                '2.5.29.17={text}upn=yourupn' )
            KeyExportPolicy = 'NonExportable'
            KeyUsage = 'DigitalSignature'
            KeyAlgorithm = 'RSA'
            KeyLength = 2048
            CertStoreLocation = 'Cert:\CurrentUser\My'
                     HashAlgorithm = 'sha512'
        }
        New-SelfSignedCertificate @params
    

    El mensaje de error "Error de firma de paquetes con error 0x80090008 'Algoritmo no válido especificado'", indica que el algoritmo hash de certificado no es seguro, por lo que es necesario cambiar el certificado a un algoritmo hash más seguro como SHA512 y usar un CSP (proveedor de servicios criptográficos). A medida que .NET Framework se actualiza a 4.7.2 para SQL Server 2022, el algoritmo SignedXML predeterminado se cambia a SHA256 porque SHA1 ya no se considera seguro. Para obtener más información, consulte este artículo.

    Para obtener más información sobre los certificados, vea la Ayuda en pantalla para el complemento Certificados. Para obtener más información sobre cómo firmar activos digitales, vea el tema "Signing and Checking Code with Authenticode" en MSDN Library.

  • Asegurarse de que el certificado se ha habilitado para la firma de código. Para determinar si un certificado está habilitado para la firma de código, revise las propiedades del certificado en el complemento Certificados.

  • Almacenar el certificado en el almacén personal.

Una vez completadas las tareas anteriores, puede utilizar el procedimiento siguiente para firmar un paquete.

Para firmar un paquete

  1. En SQL Server Data Tools (SSDT), abra el proyecto de Integration Services que contiene el paquete que debe firmarse.

  2. En el Explorador de soluciones, haga doble clic en el paquete para abrirlo.

  3. En el Diseñador de SSIS , en el menú SSIS , haga clic en Firma digital.

  4. En el cuadro de diálogo Firma digital , haga clic en Firmar.

  5. En el cuadro de diálogo Seleccionar el certificado , seleccione un certificado.

  6. (Opcional) Haga clic en Ver certificadopara ver la información del certificado.

  7. Haga clic en Aceptar para cerrar el cuadro de diálogo Seleccionar un certificado .

  8. Haga clic en Aceptar para cerrar el cuadro de diálogo Firma digital .

  9. Para guardar el paquete actualizado, haga clic en Guardar los elementos seleccionados, en el menú Archivo.

    Aunque se haya firmado el paquete, también debe configurar Integration Services para comprobar la firma digital antes de cargar el paquete.

Referencia de la interfaz de usuario del cuadro de diálogo Firma digital

Utilice el cuadro de diálogo Firma digital para firmar un paquete con una firma digital o para quitar la firma. El cuadro de diálogo Firma digital está disponible en la opción de Firma digital del menú SSIS en SQL Server Data Tools (SSDT).

Para más información, consulte Firmar un paquete mediante un certificado digital.

Opciones

Firmar
Haga clic para abrir el cuadro de diálogo Seleccionar certificado y seleccione el certificado que quiere usar.

Remove
Haga clic para quitar la firma digital.

Vea también

Paquetes de Integration Services (SSIS)
Información general sobre seguridad (Integration Services)