デジタル署名を使用してパッケージのソースを特定する
適用対象:SQL Server Azure Data Factory の SSIS 統合ランタイム
Integration Services パッケージは、そのソースを識別するために、デジタル証明書を使用して署名できます。 パッケージがデジタル証明書を使用して署名されたら、パッケージを読み込む前に Integration Services でデジタル署名を確認できます。 Integration Services で署名を確認するには、 SQL Server Data Tools (SSDT) または dtexec ユーティリティ (dtexec.exe) でオプションを設定するか、オプションのレジストリ値を設定します。
デジタル証明書を使用してパッケージに署名する
デジタル証明書を使用してパッケージに署名する前に、証明書を取得または作成する必要があります。 証明書を用意したら、この証明書を使用してパッケージに署名できます。 証明書を取得し、その証明書を使用してパッケージに署名する方法の詳細については、「 デジタル証明書を使用してパッケージに署名する」を参照してください。
パッケージの署名を確認するオプションを設定する
SQL Server Data Tools (SSDT) と dtexec ユーティリティの両方に、署名付きパッケージのデジタル署名を確認するように Integration Services を構成するオプションがあります。 SQL Server Data Tools (SSDT) と dtexec ユーティリティのどちらを使用するかは、すべてのパッケージを確認するか特定のパッケージだけを確認するかによって決まります。
デザイン時にすべてのパッケージのデジタル署名を確認してからパッケージを読み込むには、 で [パッケージの読み込み時にデジタル署名を確認する] SQL Server Data Tools (SSDT)チェック ボックスをオンにします。 このオプションは、 SQL Server Data Tools (SSDT)でのすべてのパッケージに対するグローバルな設定です。
個別のパッケージのデジタル署名を確認するには、 dtexec ユーティリティを使用してパッケージを実行するときに /VerifyS[igned] オプションを指定します。 詳細については、「dtexec ユーティリティ」を参照してください。
パッケージの署名を確認するレジストリ値を設定する
Integration Services では、オプションのレジストリ値である BlockedSignatureStatesもサポートされています。このレジストリ値を使用すると、署名付きパッケージと署名がないパッケージの読み込みに関する組織のポリシーを管理できます。 このレジストリ値により、パッケージが署名されていない場合、または無効な署名や信頼できない署名が含まれている場合に、パッケージが読み込まれないようにすることができます。 このレジストリ値を設定する方法の詳細については、「 レジストリ値を設定して署名ポリシーを実装する」を参照してください。
Note
オプションの BlockedSignatureStates レジストリ値では、 SQL Server Data Tools (SSDT) または dtexec コマンド ラインで設定されたデジタル署名オプションよりも制限が厳しい設定を指定できます。 この場合、制限が厳しい方のレジストリ設定が他の設定をオーバーライドします。
レジストリ値を設定して署名ポリシーを実装する
オプションのレジストリ値を使用して、署名付きパッケージまたは署名がないパッケージを読み込む際の組織のポリシーを管理できます。 このレジストリ キーを使用する場合、 Integration Services が実行されるコンピューターおよびポリシーを適用するコンピューターごとにこのレジストリ値を作成する必要があります。 レジストリ値が設定されると、パッケージを読み込む前に、 Integration Services によって署名が確認されます。
この記事の手順では、オプションの BlockedSignatureStates DWORD 値をレジストリ キー HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\150\SSIS\Setup\DTSPath に追加する方法について説明します。
Note
150 の下のレジストリの場所は SQL Server 2019 を表し、140 の下は SQL Server 2017 を表し、130 の下は SQL Server 2016 を表し、120 の下は SQL Server 2014 を表し、110 の下は SQL Server 2012 を表します。
BlockedSignatureStates のデータ値は、署名が信頼できない場合、署名が無効な場合、または署名がない場合に、そのパッケージをブロックするかどうかを決定します。
パッケージの署名に使用される署名のステータスについて、BlockedSignatureStates レジストリ値では以下の定義が適用されます。
有効な署名 とは、正常に読み取ることができる署名のことです。
無効な署名 とは、暗号化解除済みのチェックサム (秘密キーによって暗号化されたパッケージ コードの一方向のハッシュ) が、 Integration Services パッケージを読み込むプロセスの一部として計算された暗号化解除済みのチェックサムと一致しない署名のことです。
信頼できる署名 とは、信頼されているルート証明機関により署名されたデジタル証明書を使用して作成される署名のことです。 この設定で、署名者は、ユーザーの信頼できる発行元のリストに含まれている必要はありません。
信頼できない署名 とは、信頼されているルート証明機関によって発行されたことを確認できない署名、または最新ではない署名のことです。
次の表に、DWORD データの有効な値、およびそれらに関連付けられたポリシーを示します。
値 | 説明 |
---|---|
0 | 管理制限はありません。 |
1 | 署名が無効なパッケージをブロックします。 この設定では、署名がないパッケージはブロックしません。 |
2 | 署名が無効または信頼できないパッケージをブロックします。 この設定では、署名がないパッケージをブロックしませんが、自己生成された署名をブロックします。 |
3 | 署名が無効であるか署名が信頼できないパッケージ、および署名がないパッケージをブロックします。 この設定では、自己生成された署名もブロックします。 |
Note
BlockedSignatureStates の推奨設定は 3 です。 この設定では、署名されていないパッケージまたは無効な署名や信頼できない署名に対する最大の保護が提供されます。 ただし、推奨される設定がすべての状況に適しているとは限りません。 デジタル アセットの署名の詳細については、MSDN ライブラリの「コード署名の概要」を参照してください。
パッケージに対する署名ポリシーを実装するには
[スタート] メニューの [ファイル名を指定して実行] をクリックします。
[ファイル名を指定して実行] ダイアログ ボックスで、「 Regedit」と入力し、 [OK] をクリックします。
レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\SSIS を探します。
[MSDTS]を右クリックし、 [新規]をポイントして、 [DWORD 値]をクリックします。
新しい値の名前を「 BlockedSignatureStates」に更新します。
[BlockedSignatureStates] を右クリックし、 [変更]をクリックします。
[DWORD 値の編集] ダイアログ ボックスで、「0」、「1」、「2」、または「3」のいずれかの値を入力します。
[OK] をクリックします。
[ファイル] メニューの [終了] をクリックします。
デジタル証明書を使用してパッケージに署名する
このトピックでは、デジタル証明書を使用して Integration Services パッケージに署名する方法について説明します。 デジタル署名を他の設定と共に使用して、有効でないパッケージの読み込みや実行を防ぐことができます。
Integration Services パッケージに署名する前に、次のタスクを実行する必要があります。
証明書と関連付ける秘密キーを作成または取得して、この秘密キーをローカル コンピューターに格納します。
信頼できる証明機関からコード署名用の証明書を入手します。 証明書を取得または作成するには、次のいずれかの方法を使用できます。
証明書を発行する公的な商用証明機関から証明書を入手します。
組織が証明書を内部的に発行できるようにする証明書サーバーから証明書を入手します。 証明書の署名に使用されるルート証明書を、 [信頼されたルート証明機関] ストアに追加する必要があります。 ルート証明書を追加するには、 Microsoft 管理コンソール (MMC) の証明書スナップインを使用します。 詳細については、MSDN ライブラリの「証明書サービス」を参照してください。
テスト目的でのみ独自の証明書を作成します。 PowerShell コマンド New-SelfSignedCertificate では、テスト目的で安全なハッシュ アルゴリズムを使用して、新しい自己署名証明書を作成できます。 次に例を示します。
$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
「エラー 0x80090008 "無効なアルゴリズムが指定されました" でパッケージ署名に失敗しました」というエラー メッセージが表示された場合は、証明書ハッシュ アルゴリズムが安全でないことを示しています。証明書を SHA512 などのより安全なハッシュ アルゴリズムに変更し、CSP (暗号化サービス プロバイダー) を使用してください。 SQL Server 2022 で .NET Framework が 4.7.2 にアップグレードされた場合、SHA1 は安全と見なされなくなるため、デフォルトの SignedXML アルゴリズムは SHA256 に変更されます。 詳細については、こちらの記事を参照してください。
証明書の詳細については、証明書スナップインのオンライン ヘルプを参照してください。 デジタル アセットの署名方法の詳細については、MSDN ライブラリの「Authenticode を使用したコードの署名と検証」を参照してください。
証明書がコードの署名用に有効になっていることを確認します。 証明書がコードの署名用に有効になっているかどうかを判断するには、証明書スナップインで証明書のプロパティを確認します。
個人ストアに証明書を格納します。
上記のタスクが完了したら、次の手順に従ってパッケージに署名できます。
パッケージに署名するには
SQL Server Data Tools (SSDT)で、署名するパッケージが含まれている Integration Services プロジェクトを開きます。
ソリューション エクスプローラーで、パッケージをダブルクリックして開きます。
SSIS デザイナーで [SSIS] メニューの [デジタル署名]をクリックします。
[デジタル署名] ダイアログ ボックスで、 [署名]をクリックします。
[証明書の選択] ダイアログ ボックスで、証明書を選択します。
(省略可能)[証明書表示]をクリックして証明書情報を表示します。
[OK] をクリックして、 [証明書の選択] ダイアログ ボックスを閉じます。
[OK] をクリックして、 [デジタル署名] ダイアログ ボックスを閉じます。
更新したパッケージを保存するには、 [ファイル] メニューの [選択されたファイルを上書き保存] をクリックします。
パッケージは署名されましたが、パッケージを読み込む前にデジタル署名を確認するように、 Integration Services を構成する必要があります。
[デジタル署名] ダイアログ ボックスの UI リファレンス
[デジタル署名] ダイアログ ボックスを使用すると、デジタル署名を使用してパッケージに署名したり、署名を削除したりできます。 [デジタル署名] ダイアログ ボックスは、 の [SSIS] メニューの [デジタル署名] SQL Server Data Tools (SSDT)から使用できます。
詳細については、「 デジタル証明書を使用してパッケージに署名する」を参照してください。
Options
[署名]
[証明書の選択] ダイアログ ボックスを開き、使用する証明書を選択します。
Remove
デジタル署名を削除します。
関連項目
Integration Services (SSIS) パッケージ
セキュリティの概要 (Integration Services)