Identifier la source de packages à l'aide de signatures numériques

S’applique à :SQL Server SSIS Integration Runtime dans Azure Data Factory

Il est possible de signer un package Integration Services avec un certificat numérique pour identifier sa source. Après avoir signé un package avec un certificat numérique, vous pouvez utiliser Integration Services pour vérifier la signature numérique avant de charger le package. Pour vérifier la signature à l’aide d’ Integration Services , vous devez définir une option dans SQL Server Data Tools (SSDT) ou dans l’utilitaire dtexec (dtexec.exe), ou définir une valeur de Registre facultative.

Signer un package à l’aide d’un certificat numérique

Avant de pouvoir signer un package avec un certificat numérique, vous devez obtenir ou créer le certificat. Une fois que vous possédez le certificat, vous pouvez l'utiliser pour signer le package. Pour plus d’informations sur la façon d’obtenir un certificat et de signer un package avec ce certificat, consultez Signer un package à l’aide d’un certificat numérique.

Définir une option pour vérifier la signature d’un package

SQL Server Data Tools (SSDT) et l’utilitaire dtexec proposent tous les deux une option qui configure Integration Services pour la vérification de la signature numérique d’un package signé. L’utilisation de SQL Server Data Tools (SSDT) ou de l’utilitaire dtexec dépend de si vous souhaitez vérifier tous les packages ou simplement des packages spécifiques :

  • Pour vérifier la signature numérique de tous les packages avant de charger les packages au moment de la conception, définissez l'option Vérifier la signature numérique lors du chargement d'un package dans SQL Server Data Tools (SSDT). Cette option est un paramètre global pour tous les packages dans SQL Server Data Tools (SSDT).

  • Pour vérifier la signature numérique d’un package individuel, spécifiez l’option /VerifyS[igned] quand vous utilisez l’utilitaire dtexec pour exécuter le package. Pour plus d'informations, consultez Utilitaire dtexec.

Définir une valeur du Registre pour vérifier la signature d’un package

Integration Services prend également en charge une valeur de Registre facultative, BlockedSignatureStates, que vous pouvez utiliser pour gérer la stratégie de chargement des packages signés et non signés d’une organisation. La valeur de Registre peut empêcher le chargement de packages si les packages ne sont pas signés ou s'ils possèdent des signatures non valides ou non approuvées. Pour plus d’informations sur la définition de cette valeur de Registre, consultez Implémenter une stratégie de signature en définissant une valeur du Registre.

Notes

La valeur de Registre BlockedSignatureStates facultative peut spécifier un paramètre plus restrictif que l’option de signature numérique définie dans SQL Server Data Tools (SSDT) ou au niveau de la ligne de commande dtexec . Dans cette situation, le paramètre du Registre plus restrictif a priorité sur les autres paramètres.

Implémenter une stratégie de signature en définissant une valeur du Registre

Vous pouvez utiliser une valeur du Registre facultative pour gérer la stratégie d'une organisation pour charger des packages signés ou non signés. Si vous utilisez cette valeur du Registre, vous devez créer cette valeur du Registre sur tous les ordinateurs sur lesquels les packages Integration Services s'exécuteront et sur lesquels vous souhaitez appliquer la stratégie. Une fois la valeur du Registre définie, Integration Services vérifiera les signatures avant de charger les packages.

La procédure présentée dans cet article explique comment ajouter la valeur DWORD facultative BlockedSignatureStates à la clé de Registre HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\150\SSIS\Setup\DTSPath.

Notes

Un emplacement de registre sous 150 représente SQL Server 2019, sous 140 il représente SQL Server 2017, sous 130 il représente SQL Server 2016, sous 120 il représente SQL Server 2014 et sous 110 il représente SQL Server 2012.

La valeur de données dans BlockedSignatureStates détermine si un package doit être bloqué s’il possède une signature non approuvée ou non valide, ou s’il n’est pas signé.

En ce qui concerne l’état des signatures utilisées pour signer les packages, la valeur du Registre BlockedSignatureStates emploie les définitions suivantes :

  • Une signature valide est une signature qui peut être lue correctement.

  • Une signature non valide est une signature dont la somme de contrôle déchiffrée (hachage unidirectionnel du code de package chiffré par une clé privée) ne correspond pas à la somme de contrôle déchiffrée calculée dans le cadre du chargement des packages Integration Services .

  • Une signature approuvée est une signature créée à l’aide d’un certificat numérique signé par une autorité de certification racine de confiance. Ce paramètre n'exige pas la recherche du signataire dans la liste Éditeurs approuvés de l'utilisateur.

  • Une signature non approuvée est une signature qui ne peut pas être vérifiée en tant que signature émise par une autorité de certification racine de confiance ou bien une signature qui n’est pas actuelle.

Le tableau suivant répertorie les valeurs valides des données DWORD et leur stratégie associée.

Value Description
0 Pas de restriction administrative.
1 Bloquer les signatures non valides.

Ce paramètre ne bloque pas les packages non signés.
2 Bloquer les signatures non valides et non approuvées.

Ce paramètre ne bloque pas les packages non signés mais bloque les signatures générées automatiquement.
3 Bloquer les signatures non valides et non approuvées et les packages non signés.

Ce paramètre bloque lui aussi les signatures générées automatiquement.

Notes

Le paramètre recommandé pour BlockedSignatureStates est 3. Ce paramètre offre une protection maximale contre des packages non signés ou des signatures non valides ou non approuvées. Néanmoins, ce paramètre recommandé peut ne pas convenir dans tous les cas. Pour plus d’informations sur la signature des ressources numériques, consultez la rubriqueIntroduction to Code Signing(Introduction à la signature du code) dans MSDN Library.

Pour implémenter une stratégie de signature pour des packages

  1. Dans le menu Démarrer , cliquez sur Exécuter.

  2. Dans la boîte de dialogue Exécuter, tapez Regeditet cliquez sur OK.

  3. Localisez la clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\SSIS.

  4. Cliquez avec le bouton droit sur MSDTS, pointez sur Nouveau, puis cliquez sur Valeur DWORD.

  5. Mettez à jour le nom de la nouvelle valeur en utilisant BlockedSignatureStates.

  6. Cliquez avec le bouton droit sur BlockedSignatureStates et cliquez sur Modifier.

  7. Dans la boîte de dialogue Édition de la valeur DWORD , tapez la valeur 0, 1, 2 ou 3.

  8. Cliquez sur OK.

  9. Dans le menu Fichier , cliquez sur Quitter.

Signer un package à l'aide d'un certificat numérique

Cette rubrique décrit comment signer un package Integration Services à l'aide d'un certificat numérique. Vous pouvez utiliser une signature numérique avec d'autres paramètres pour empêcher le chargement et l'exécution d'un package non valide.

Avant de pouvoir signer un package Integration Services , vous devez effectuer les tâches suivantes :

  • Créez ou obtenez une clé privée à associer au certificat et stockez cette clé privée sur l'ordinateur local.

  • Obtenez un certificat en vue de la signature du code à partir d'une autorité de certification approuvée. Vous pouvez utiliser l'une des méthodes suivantes pour obtenir ou créer un certificat :

    • Obtenez un certificat à partir d'une autorité de certification commerciale publique qui émet des certificats.

    • Obtenez un certificat à partir d'un serveur de certificats, qui permet à une organisation d'émettre des certificats de façon interne. Vous devez ajouter le certificat racine utilisé pour signer le certificat dans le magasin Autorités de certification racines de confiance . Pour ajouter le certificat racine, vous pouvez utiliser le composant logiciel enfichable MMC ( Microsoft Management Console) Certificats. Pour plus d'informations, consultez la rubrique «Services de certificats» dans MSDN Library (éventuellement en anglais).

    • Créez votre propre certificat à des fins de test uniquement. La commande PowerShell New-SelfSignedCertificate peut créer un certificat auto-signé avec un algorithme de hachage sécurisé à des fins de test. Par exemple :

        $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
    

    Si vous recevez le message d'erreur « échec de la signature du package en raison de l'erreur 0x80090008 'Algorithme non valable spécifié' », c'est que l'algorithme de hachage de votre certificat n'est pas sécurisé. Veuillez remplacer votre certificat par un algorithme de hachage plus sécurisé tel que SHA512, et utilisez un CSP (fournisseur de services de chiffrement). Lorsque .NET Framework est mis à niveau vers la version 4.7.2 du SQL Server 2022, l'algorithme SignedXML par défaut est remplacé par SHA256. En effet, l'algorithme SHA1 n'est plus considéré comme sécurisé. Pour plus d'informations, consultez cet article.

    Pour plus d'informations sur les certificats, recherchez le composant logiciel enfichable Certificats dans l'aide en ligne. Pour plus d'informations sur la façon de signer des ressources numériques, consultez la rubrique «Signature et vérification de code à l'aide d'Authenticode» dans MSDN Library (éventuellement en anglais).

  • Assurez-vous que le certificat a été activé pour la signature de code. Pour déterminer si un certificat est activé pour la signature du code, examinez les propriétés du certificat dans le composant logiciel enfichable Certificats.

  • Stockez le certificat dans le magasin Personnel.

Après avoir terminé les tâches précédentes, vous pouvez utiliser la procédure suivante pour signer un package.

Pour signer un package

  1. Dans SQL Server Data Tools (SSDT), ouvrez le projet Integration Services contenant le package à signer.

  2. Dans l'Explorateur de solutions, double-cliquez sur le package pour l'ouvrir.

  3. Dans le concepteur SSIS , dans le menu SSIS , cliquez sur Signature numérique.

  4. Dans la boîte de dialogue Signature numérique , cliquez sur Signer.

  5. Dans la boîte de dialogue Sélectionner un certificat , sélectionnez un certificat.

  6. (Facultatif) Cliquez sur Afficher le certificatpour afficher les informations sur le certificat.

  7. Cliquez sur OK pour fermer la boîte de dialogue Sélectionner un certificat .

  8. Cliquez sur OK pour fermer la boîte de dialogue Signature numérique .

  9. Pour enregistrer le package mis à jour, cliquez sur Enregistrer les éléments sélectionnés dans le menu Fichier .

    Bien que le package ait été signé, vous devez maintenant configurer Integration Services pour vérifier la signature numérique avant de charger le package.

Référence de l'interface utilisateur de la boîte de dialogue Signature numérique

Utilisez la boîte de dialogue Signature numérique pour signer un package par une signature numérique ou pour la supprimer. La boîte de dialogue Signature numérique est disponible via l'option Signature numérique dans le menu SSIS dans SQL Server Data Tools (SSDT).

Pour plus d’informations, voir Signer un package à l’aide d’un certificat numérique.

Options

Signe
Cliquez sur cette option pour ouvrir la boîte de dialogue Sélectionner un certificat et sélectionner le certificat à utiliser.

Remove
Cliquez sur cette option pour supprimer la signature numérique.

Voir aussi

Packages Integration Services (SSIS)
Vue d’ensemble de la sécurité (Integration Services)