Identificar a origem dos pacotes com assinaturas digitais

Aplica-se a: SQL Server SSIS Integration Runtime no Azure Data Factory

Um pacote do Integration Services pode ser assinado com um certificado digital para identificar sua origem. Depois que o pacote for assinado com um certificado digital, você poderá configurar o Integration Services para verificar a assinatura digital antes de carregar o pacote. Para que o Integration Services verifique a assinatura, defina uma opção no SQL Server Data Tools (SSDT) ou no utilitário dtexec (dtexec.exe) ou defina um valor opcional do Registro.

Assinar um pacote com um certificado digital

Antes de assinar um pacote com um certificado digital, você tem que obter ou criar o certificado primeiro. Depois que você tiver o certificado, poderá usar este certificado para assinar o pacote. Para obter mais informações sobre como obter um certificado e assinar um pacote com esse certificado, consulte Assinar um pacote por meio de um certificado digital.

Definir uma opção para verificar a assinatura do pacote

Ambos o SQL Server Data Tools (SSDT) e o utilitário dtexec têm uma opção que configura o Integration Services para verificar a assinatura digital de um pacote assinado. O uso do SQL Server Data Tools (SSDT) ou do utilitário dtexec dependerá da ação desejada, ou seja, se você deseja verificar todos os pacotes ou apenas alguns específicos:

  • Para verificar a assinatura digital de todos os pacotes antes de carregá-los no momento da criação, defina a opção Verificar assinatura digital ao carregar um pacote no SQL Server Data Tools (SSDT). Esta opção é uma configuração global para todos os pacotes no SQL Server Data Tools (SSDT).

  • Para verificar a assinatura digital de um pacote individual, especifique a opção /VerifyS[igned] quando usar o utilitário dtexec para executar o pacote. Para saber mais, veja dtexec Utility.

Definir um valor de Registro para verificar a assinatura do pacote

Integration Services também dá suporte a um valor opcional do Registro, BlockedSignatureStates, que pode ser usado para gerenciar a política de uma organização para carregar pacotes assinados e não assinados. O valor do Registro pode impedir que os pacotes sejam carregados se eles não estiverem assinados, se forem inválidos ou se as assinaturas não forem confiáveis. Para obter mais informações sobre como definir esse valor do Registro, consulte Implementar uma política de assinatura por meio da configuração de um valor do Registro.

Observação

O valor opcional do Registro BlockedSignatureStates pode especificar uma configuração mais restritiva do que a opção de assinatura digital definida no SQL Server Data Tools (SSDT) ou na linha de comando do dtexec . Nesta situação, a configuração de Registro mais restritiva substitui as outras configurações.

Implementar uma política de assinatura por meio da configuração de um valor do Registro

Você pode usar um valor opcional do Registro para gerenciar uma política da organização para carregar pacotes assinados ou não assinados. Se você usar o valor do Registro, será preciso criar esse valor em cada computador em que os pacotes do Integration Services serão executados e no qual deseja aplicar a política. Depois que o valor do Registro tiver sido definido, o Integration Services verificará as assinaturas antes de carregar pacotes.

O procedimento neste artigo descreve como adicionar o valor opcional DWORD BlockedSignatureStates à chave de registro HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\150\SSIS\Setup\DTSPath.

Observação

Um local de registro abaixo de 150 representa o SQL Server 2019, abaixo de 140 representa o SQL Server 2017, abaixo de 130 representa o SQL Server 2016, abaixo de 120 representa o SQL Server 2014 e abaixo de 110 representa o SQL Server 2012.

Os valores de dados no BlockedSignatureStates determinam se um pacote deverá ser bloqueado se tiver uma assinatura não confiável, uma assinatura inválida ou não esteja assinado.

Em relação ao status das assinaturas usadas para assinar os pacotes, o valor do registro BlockedSignatureStates usa as seguintes definições:

  • Uma assinatura válida é aquela que pode ser lida com êxito.

  • Uma assinatura inválida é aquela em que a soma de verificação descriptografada (o hash unidirecional do código de pacote criptografado por uma chave privada) não corresponde à soma de verificação descriptografada calculada como parte do processo de carregamento de pacotes do Integration Services .

  • Uma assinatura confiável é aquela criada usando um certificado digital assinado por uma Autoridade de Certificação Raiz Confiável. Essa configuração não exige que o signatário esteja na lista do usuário de Fornecedores Confiáveis.

  • Uma assinatura não confiável é aquela que não é possível verificar se foi emitida por uma Autoridade de Certificação Raiz Confiável ou é uma assinatura que não é atual.

A tabela a seguir lista os valores válidos dos dados de DWORD e sua política associada.

Valor Descrição
0 Nenhuma restrição administrativa.
1 Bloquear assinaturas inválidas.

Essa configuração não bloqueia pacotes não assinados.
2 Bloquear assinaturas inválidas e não confiáveis.

Essa configuração não bloqueia pacotes não assinados, mas bloqueia assinaturas geradas automaticamente.
3 Bloquear assinaturas inválidas e não confiáveis e pacotes não assinados

Essa configuração também bloqueia assinaturas geradas automaticamente.

Observação

A configuração recomendada para BlockedSignatureStates é 3. Essa configuração fornece maior proteção contra pacotes não assinados ou assinaturas que não são válidas nem confiáveis. Porém, a configuração recomendada talvez não seja apropriada em todas as circunstâncias. Para obter mais informações sobre como assinar ativos digitais, consulte o tópico "Introdução à assinatura de código", na biblioteca do MSDN.

Para implementar uma política de assinatura para pacotes

  1. No menu Iniciar , clique em Executar.

  2. Na caixa de diálogo Executar, digite Regedite clique em OK.

  3. Localize a chave do Registro, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\SSIS.

  4. Clique com o botão direito do mouse em MSDTS, aponte para Novoe clique em Valor DWORD.

  5. Atualize o nome do valor novo para BlockedSignatureStates.

  6. Clique com o botão direito do mouse em BlockedSignatureStates e clique em Modificar.

  7. Na caixa de diálogo Editar valor DWORD , digite o valor 0, 1, 2 ou 3.

  8. Clique em OK.

  9. No menu Arquivo , clique em Sair.

Assinar um pacote por meio de um certificado digital

Este tópico descreve como assinar um pacote do Integration Services com um certificado digital. Você pode usar uma assinatura digital, junto com outras configurações, para evitar o carregamento e a execução de um pacote inválido.

Antes de poder assinar um pacote do Integration Services , você deve realizar as seguintes tarefas:

  • Criar ou obter uma chave privada a ser associada ao certificado e armazenar esta chave no computador local.

  • Obter um certificado com a finalidade de assinatura de código de uma autoridade de certificação confiável. Você pode usar um dos métodos a seguir para obter ou criar um certificado:

    • Obtenha um certificado de uma autoridade de certificação comercial pública que emite certificados.

    • Obtenha um certificado de um servidor de certificados, que permita que uma organização emita certificados internamente. É necessário adicionar o certificado raiz usado para assinar o certificado ao armazenamento Autoridades de Certificação Raiz Confiáveis . Para adicionar o certificado raiz, você pode usar o snap-in de Certificados para o Microsoft Management Console (MMC). Para obter mais informações, consulte o tópico “Serviços de certificado” na biblioteca do MSDN.

    • Crie seu próprio certificado somente para teste. O comando do PowerShell New-SelfSignedCertificate pode criar um novo certificado autoassinado com algoritmo de hash seguro para fins de teste. Por exemplo:

        $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
    

    Se você vir a mensagem de erro 'Falha na assinatura do pacote com erro 0x80090008 "Algoritmo inválido especificado."', isso indica que o algoritmo de hash do certificado não é seguro. Altere o certificado para um algoritmo de hash mais seguro como SHA512 e use um CSP (Provedor de Serviços de Criptografia). Como o .NET framework é atualizado para 4.7.2 para o SQL Server 2022, o algoritmo SignedXML padrão é alterado para SHA256 porque SHA1 não é mais considerado seguro. Para detalhes, consulte este artigo.

    Para obter mais informações sobre certificados, consulte a Ajuda online do snap-in de Certificados. Para obter mais informações sobre como assinar ativos digitais, consulte o tópico “Assinando e verificando o código com o Authenticode” na biblioteca do MSDN.

  • Verifique se o certificado foi habilitado para assinatura de código. Para saber se um certificado está habilitado para assinatura de código, revise as propriedades do certificado no snap-in de Certificados.

  • Armazene o certificado no armazenamento Pessoal.

Depois de concluir as tarefas anteriores, realize o procedimento a seguir para assinar um pacote.

Para assinar um pacote

  1. No SQL Server Data Tools (SSDT), abra o projeto do Integration Services que contém o pacote a ser assinado.

  2. No Gerenciador de Soluções, clique duas vezes no pacote para abri-lo.

  3. No SSIS Designer, no menu SSIS , clique em Assinatura Digital.

  4. Na caixa de diálogo Assinatura Digital , clique em Assinar.

  5. Na caixa de diálogo Selecionar um Certificado , selecione um certificado.

  6. (Opcional) Clique em Exibir Certificadopara exibir informações do certificado.

  7. Clique em OK para fechar a caixa de diálogo Selecionar um Certificado .

  8. Clique em OK para fechar a caixa de diálogo Assinatura Digital .

  9. Para salvar o pacote atualizado, clique em Salvar Itens Selecionados no menu Arquivo .

    Embora o pacote tenha sido assinado, é necessário configurar o Integration Services para verificar a assinatura digital antes de carregar o pacote.

Referência da interface do usuário da caixa de diálogo Assinatura Digital

Use a caixa de diálogo Assinatura Digital para assinar um pacote com uma assinatura digital ou remover a assinatura. A caixa de diálogo Assinatura Digital está disponível na opção Assinatura Digital do menu SSIS no SQL Server Data Tools (SSDT).

Para saber mais, veja Assinar um pacote por meio de um certificado digital.

Opções

Assinar
Clique para abrir a caixa de diálogo Selecionar Certificado e selecione o certificado a ser usado.

Remover
Clique para remover a assinatura digital.

Confira também

Pacotes do SSIS (Integration Services)
Visão Geral de Segurança (Integration Services)